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/06/02 14:47:37 UTC

[01/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site a913d06fd -> 3797f0e6a


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html
index 278a845..946d651 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html
@@ -26,233 +26,232 @@
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.zookeeper;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.junit.Assert.assertFalse;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.junit.Assert.assertNotNull;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.junit.Assert.assertTrue;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.junit.Assert.fail;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.conf.Configuration;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.Abortable;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HBaseZKTestingUtility;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.ZKTests;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.junit.AfterClass;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.junit.BeforeClass;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.junit.ClassRule;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.junit.Test;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.junit.experimental.categories.Category;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.slf4j.Logger;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.slf4j.LoggerFactory;<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>@Category({ ZKTests.class, MediumTests.class })<a name="line.46"></a>
-<span class="sourceLineNo">047</span>public class TestZKLeaderManager {<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  @ClassRule<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.50"></a>
-<span class="sourceLineNo">051</span>      HBaseClassTestRule.forClass(TestZKLeaderManager.class);<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private static final Logger LOG = LoggerFactory.getLogger(TestZKLeaderManager.class);<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private static final String LEADER_ZNODE =<a name="line.55"></a>
-<span class="sourceLineNo">056</span>      "/test/" + TestZKLeaderManager.class.getSimpleName();<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private static class MockAbortable implements Abortable {<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    private boolean aborted;<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>    @Override<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    public void abort(String why, Throwable e) {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>      aborted = true;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      LOG.error(HBaseMarkers.FATAL, "Aborting during test: "+why, e);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      fail("Aborted during test: " + why);<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    }<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @Override<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    public boolean isAborted() {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      return aborted;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    }<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static class MockLeader extends Thread implements Stoppable {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    private volatile boolean stopped;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    private ZKWatcher watcher;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    private ZKLeaderManager zkLeader;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    private AtomicBoolean master = new AtomicBoolean(false);<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    private int index;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>    public MockLeader(ZKWatcher watcher, int index) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      setDaemon(true);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      setName("TestZKLeaderManager-leader-" + index);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      this.index = index;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      this.watcher = watcher;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      this.zkLeader = new ZKLeaderManager(watcher, LEADER_ZNODE,<a name="line.86"></a>
-<span class="sourceLineNo">087</span>          Bytes.toBytes(index), this);<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>    public boolean isMaster() {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      return master.get();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>    public int getIndex() {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      return index;<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>    public ZKWatcher getWatcher() {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      return watcher;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>    @Override<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    public void run() {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      while (!stopped) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        zkLeader.start();<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        zkLeader.waitToBecomeLeader();<a name="line.106"></a>
-<span class="sourceLineNo">107</span>        master.set(true);<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>        while (master.get() &amp;&amp; !stopped) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>          try {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>            Thread.sleep(10);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>          } catch (InterruptedException ignored) {}<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>    }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>    public void abdicate() {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      zkLeader.stepDownAsLeader();<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      master.set(false);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>    @Override<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public void stop(String why) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      stopped = true;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      abdicate();<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      Threads.sleep(100);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      watcher.close();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>    @Override<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    public boolean isStopped() {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return stopped;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  private static HBaseZKTestingUtility TEST_UTIL;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  private static MockLeader[] CANDIDATES;<a name="line.137"></a>
-<span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>  @BeforeClass<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  public static void setupBeforeClass() throws Exception {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    TEST_UTIL = new HBaseZKTestingUtility();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    TEST_UTIL.startMiniZKCluster();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // use an abortable to fail the test in the case of any KeeperExceptions<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    MockAbortable abortable = new MockAbortable();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    int count = 5;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    CANDIDATES = new MockLeader[count];<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    for (int i = 0; i &lt; count; i++) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      ZKWatcher watcher = newZK(conf, "server"+i, abortable);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      CANDIDATES[i] = new MockLeader(watcher, i);<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      CANDIDATES[i].start();<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>  @AfterClass<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  public static void tearDownAfterClass() throws Exception {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    TEST_UTIL.shutdownMiniZKCluster();<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>  @Test<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void testLeaderSelection() throws Exception {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    MockLeader currentLeader = getCurrentLeader();<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    // one leader should have been found<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    assertNotNull("Leader should exist", currentLeader);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    LOG.debug("Current leader index is "+currentLeader.getIndex());<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    byte[] znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    int storedIndex = Bytes.toInt(znodeData);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    assertEquals("Leader znode should match leader index",<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        currentLeader.getIndex(), storedIndex);<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    // force a leader transition<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    currentLeader.abdicate();<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // check for new leader<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    currentLeader = getCurrentLeader();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // one leader should have been found<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    assertNotNull("New leader should exist after abdication", currentLeader);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    LOG.debug("New leader index is "+currentLeader.getIndex());<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>    znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    storedIndex = Bytes.toInt(znodeData);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    assertEquals("Leader znode should match leader index",<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        currentLeader.getIndex(), storedIndex);<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    // force another transition by stopping the current<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    currentLeader.stop("Stopping for test");<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // check for new leader<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    currentLeader = getCurrentLeader();<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // one leader should have been found<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    assertNotNull("New leader should exist after stop", currentLeader);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    LOG.debug("New leader index is "+currentLeader.getIndex());<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    storedIndex = Bytes.toInt(znodeData);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    assertEquals("Leader znode should match leader index",<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        currentLeader.getIndex(), storedIndex);<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    // with a second stop we can guarantee that a previous leader has resumed leading<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    currentLeader.stop("Stopping for test");<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // check for new<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    currentLeader = getCurrentLeader();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    assertNotNull("New leader should exist", currentLeader);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  private MockLeader getCurrentLeader() throws Exception {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    MockLeader currentLeader = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    outer:<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // Wait up to 10 secs for initial leader<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    for (int i = 0; i &lt; 1000; i++) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      for (int j = 0; j &lt; CANDIDATES.length; j++) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        if (CANDIDATES[j].isMaster()) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>          // should only be one leader<a name="line.225"></a>
-<span class="sourceLineNo">226</span>          if (currentLeader != null) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            fail("Both candidate "+currentLeader.getIndex()+" and "+j+" claim to be leader!");<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          currentLeader = CANDIDATES[j];<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>      if (currentLeader != null) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        break outer;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      }<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      Threads.sleep(100);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    return currentLeader;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  private static ZKWatcher newZK(Configuration conf, String name,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>                                 Abortable abort) throws Exception {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    Configuration copy = HBaseConfiguration.create(conf);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    ZKWatcher zk = new ZKWatcher(copy, name, abort);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return zk;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>}<a name="line.247"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertNotNull;<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>import static org.junit.Assert.fail;<a name="line.23"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.Abortable;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HBaseZKTestingUtility;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.ZKTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.AfterClass;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.BeforeClass;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.ClassRule;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.Test;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.junit.experimental.categories.Category;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.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>@Category({ ZKTests.class, MediumTests.class })<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class TestZKLeaderManager {<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>  @ClassRule<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.49"></a>
+<span class="sourceLineNo">050</span>      HBaseClassTestRule.forClass(TestZKLeaderManager.class);<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private static final Logger LOG = LoggerFactory.getLogger(TestZKLeaderManager.class);<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private static final String LEADER_ZNODE =<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      "/test/" + TestZKLeaderManager.class.getSimpleName();<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private static class MockAbortable implements Abortable {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    private boolean aborted;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>    @Override<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    public void abort(String why, Throwable e) {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      aborted = true;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      LOG.error(HBaseMarkers.FATAL, "Aborting during test: "+why, e);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      fail("Aborted during test: " + why);<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>    @Override<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    public boolean isAborted() {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      return aborted;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    }<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  }<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private static class MockLeader extends Thread implements Stoppable {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    private volatile boolean stopped;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    private ZKWatcher watcher;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    private ZKLeaderManager zkLeader;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    private AtomicBoolean master = new AtomicBoolean(false);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    private int index;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>    public MockLeader(ZKWatcher watcher, int index) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      setDaemon(true);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      setName("TestZKLeaderManager-leader-" + index);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      this.index = index;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      this.watcher = watcher;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      this.zkLeader = new ZKLeaderManager(watcher, LEADER_ZNODE,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>          Bytes.toBytes(index), this);<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>    public boolean isMaster() {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      return master.get();<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    }<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>    public int getIndex() {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      return index;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>    public ZKWatcher getWatcher() {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      return watcher;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>    @Override<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public void run() {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      while (!stopped) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        zkLeader.start();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        zkLeader.waitToBecomeLeader();<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        master.set(true);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>        while (master.get() &amp;&amp; !stopped) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>          try {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>            Thread.sleep(10);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>          } catch (InterruptedException ignored) {}<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>    }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>    public void abdicate() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      zkLeader.stepDownAsLeader();<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      master.set(false);<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 void stop(String why) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      stopped = true;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      abdicate();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      Threads.sleep(100);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      watcher.close();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>    @Override<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    public boolean isStopped() {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      return stopped;<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><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private static HBaseZKTestingUtility TEST_UTIL;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  private static MockLeader[] CANDIDATES;<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  @BeforeClass<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public static void setupBeforeClass() throws Exception {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    TEST_UTIL = new HBaseZKTestingUtility();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    TEST_UTIL.startMiniZKCluster();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>    // use an abortable to fail the test in the case of any KeeperExceptions<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    MockAbortable abortable = new MockAbortable();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    int count = 5;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    CANDIDATES = new MockLeader[count];<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    for (int i = 0; i &lt; count; i++) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      ZKWatcher watcher = newZK(conf, "server"+i, abortable);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      CANDIDATES[i] = new MockLeader(watcher, i);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      CANDIDATES[i].start();<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  @AfterClass<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  public static void tearDownAfterClass() throws Exception {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    TEST_UTIL.shutdownMiniZKCluster();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  @Test<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  public void testLeaderSelection() throws Exception {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    MockLeader currentLeader = getCurrentLeader();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    // one leader should have been found<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    assertNotNull("Leader should exist", currentLeader);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    LOG.debug("Current leader index is "+currentLeader.getIndex());<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>    byte[] znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    int storedIndex = Bytes.toInt(znodeData);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    assertEquals("Leader znode should match leader index",<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        currentLeader.getIndex(), storedIndex);<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    // force a leader transition<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    currentLeader.abdicate();<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    // check for new leader<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    currentLeader = getCurrentLeader();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    // one leader should have been found<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    assertNotNull("New leader should exist after abdication", currentLeader);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    LOG.debug("New leader index is "+currentLeader.getIndex());<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>    znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    storedIndex = Bytes.toInt(znodeData);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    assertEquals("Leader znode should match leader index",<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        currentLeader.getIndex(), storedIndex);<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span>    // force another transition by stopping the current<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    currentLeader.stop("Stopping for test");<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>    // check for new leader<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    currentLeader = getCurrentLeader();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    // one leader should have been found<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    assertNotNull("New leader should exist after stop", currentLeader);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    LOG.debug("New leader index is "+currentLeader.getIndex());<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    storedIndex = Bytes.toInt(znodeData);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    assertEquals("Leader znode should match leader index",<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        currentLeader.getIndex(), storedIndex);<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>    // with a second stop we can guarantee that a previous leader has resumed leading<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    currentLeader.stop("Stopping for test");<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>    // check for new<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    currentLeader = getCurrentLeader();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    assertNotNull("New leader should exist", currentLeader);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>  private MockLeader getCurrentLeader() throws Exception {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    MockLeader currentLeader = null;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    outer:<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    // Wait up to 10 secs for initial leader<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    for (int i = 0; i &lt; 1000; i++) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      for (int j = 0; j &lt; CANDIDATES.length; j++) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>        if (CANDIDATES[j].isMaster()) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          // should only be one leader<a name="line.224"></a>
+<span class="sourceLineNo">225</span>          if (currentLeader != null) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>            fail("Both candidate "+currentLeader.getIndex()+" and "+j+" claim to be leader!");<a name="line.226"></a>
+<span class="sourceLineNo">227</span>          }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          currentLeader = CANDIDATES[j];<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>      if (currentLeader != null) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        break outer;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      Threads.sleep(100);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return currentLeader;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  private static ZKWatcher newZK(Configuration conf, String name,<a name="line.239"></a>
+<span class="sourceLineNo">240</span>                                 Abortable abort) throws Exception {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    Configuration copy = HBaseConfiguration.create(conf);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    ZKWatcher zk = new ZKWatcher(copy, name, abort);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    return zk;<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>}<a name="line.246"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.ExitException.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.ExitException.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.ExitException.html
index 415df10..2dca6fc 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.ExitException.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.ExitException.html
@@ -51,7 +51,7 @@
 <span class="sourceLineNo">043</span>  // http://stackoverflow.com/questions/309396/java-how-to-test-methods-that-call-system-exit<a name="line.43"></a>
 <span class="sourceLineNo">044</span>  protected static class ExitException extends SecurityException {<a name="line.44"></a>
 <span class="sourceLineNo">045</span>    private static final long serialVersionUID = 1L;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    public final int status;<a name="line.46"></a>
+<span class="sourceLineNo">046</span>    private final int status;<a name="line.46"></a>
 <span class="sourceLineNo">047</span>    public ExitException(int status) {<a name="line.47"></a>
 <span class="sourceLineNo">048</span>      super("There is no escape!");<a name="line.48"></a>
 <span class="sourceLineNo">049</span>      this.status = status;<a name="line.49"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.NoExitSecurityManager.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.NoExitSecurityManager.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.NoExitSecurityManager.html
index 415df10..2dca6fc 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.NoExitSecurityManager.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.NoExitSecurityManager.html
@@ -51,7 +51,7 @@
 <span class="sourceLineNo">043</span>  // http://stackoverflow.com/questions/309396/java-how-to-test-methods-that-call-system-exit<a name="line.43"></a>
 <span class="sourceLineNo">044</span>  protected static class ExitException extends SecurityException {<a name="line.44"></a>
 <span class="sourceLineNo">045</span>    private static final long serialVersionUID = 1L;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    public final int status;<a name="line.46"></a>
+<span class="sourceLineNo">046</span>    private final int status;<a name="line.46"></a>
 <span class="sourceLineNo">047</span>    public ExitException(int status) {<a name="line.47"></a>
 <span class="sourceLineNo">048</span>      super("There is no escape!");<a name="line.48"></a>
 <span class="sourceLineNo">049</span>      this.status = status;<a name="line.49"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.html
index 415df10..2dca6fc 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.html
@@ -51,7 +51,7 @@
 <span class="sourceLineNo">043</span>  // http://stackoverflow.com/questions/309396/java-how-to-test-methods-that-call-system-exit<a name="line.43"></a>
 <span class="sourceLineNo">044</span>  protected static class ExitException extends SecurityException {<a name="line.44"></a>
 <span class="sourceLineNo">045</span>    private static final long serialVersionUID = 1L;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    public final int status;<a name="line.46"></a>
+<span class="sourceLineNo">046</span>    private final int status;<a name="line.46"></a>
 <span class="sourceLineNo">047</span>    public ExitException(int status) {<a name="line.47"></a>
 <span class="sourceLineNo">048</span>      super("There is no escape!");<a name="line.48"></a>
 <span class="sourceLineNo">049</span>      this.status = status;<a name="line.49"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMulti.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMulti.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMulti.html
index 777b9ad..2857e3d 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMulti.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKMulti.html
@@ -98,7 +98,7 @@
 <span class="sourceLineNo">090</span>    ZKUtil.multiOrSequential(zkw, new LinkedList&lt;&gt;(), false);<a name="line.90"></a>
 <span class="sourceLineNo">091</span><a name="line.91"></a>
 <span class="sourceLineNo">092</span>    // single create<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    String path = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testSimpleMulti");<a name="line.93"></a>
+<span class="sourceLineNo">093</span>    String path = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "testSimpleMulti");<a name="line.93"></a>
 <span class="sourceLineNo">094</span>    LinkedList&lt;ZKUtilOp&gt; singleCreate = new LinkedList&lt;&gt;();<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    singleCreate.add(ZKUtilOp.createAndFailSilent(path, new byte[0]));<a name="line.95"></a>
 <span class="sourceLineNo">096</span>    ZKUtil.multiOrSequential(zkw, singleCreate, false);<a name="line.96"></a>
@@ -120,12 +120,12 @@
 <span class="sourceLineNo">112</span><a name="line.112"></a>
 <span class="sourceLineNo">113</span>  @Test<a name="line.113"></a>
 <span class="sourceLineNo">114</span>  public void testComplexMulti() throws Exception {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    String path1 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti1");<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    String path2 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti2");<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    String path3 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti3");<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    String path4 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti4");<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    String path5 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti5");<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    String path6 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testComplexMulti6");<a name="line.120"></a>
+<span class="sourceLineNo">115</span>    String path1 = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "testComplexMulti1");<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    String path2 = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "testComplexMulti2");<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    String path3 = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "testComplexMulti3");<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    String path4 = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "testComplexMulti4");<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    String path5 = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "testComplexMulti5");<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    String path6 = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "testComplexMulti6");<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    // create 4 nodes that we'll setData on or delete later<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    LinkedList&lt;ZKUtilOp&gt; create4Nodes = new LinkedList&lt;&gt;();<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    create4Nodes.add(ZKUtilOp.createAndFailSilent(path1, Bytes.toBytes(path1)));<a name="line.123"></a>
@@ -164,7 +164,7 @@
 <span class="sourceLineNo">156</span>  public void testSingleFailure() throws Exception {<a name="line.156"></a>
 <span class="sourceLineNo">157</span>    // try to delete a node that doesn't exist<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    boolean caughtNoNode = false;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    String path = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testSingleFailureZ");<a name="line.159"></a>
+<span class="sourceLineNo">159</span>    String path = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "testSingleFailureZ");<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    LinkedList&lt;ZKUtilOp&gt; ops = new LinkedList&lt;&gt;();<a name="line.160"></a>
 <span class="sourceLineNo">161</span>    ops.add(ZKUtilOp.deleteNodeFailSilent(path));<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    try {<a name="line.162"></a>
@@ -201,9 +201,9 @@
 <span class="sourceLineNo">193</span>  @Test<a name="line.193"></a>
 <span class="sourceLineNo">194</span>  public void testSingleFailureInMulti() throws Exception {<a name="line.194"></a>
 <span class="sourceLineNo">195</span>    // try a multi where all but one operation succeeds<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    String pathA = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testSingleFailureInMultiA");<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    String pathB = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testSingleFailureInMultiB");<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    String pathC = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testSingleFailureInMultiC");<a name="line.198"></a>
+<span class="sourceLineNo">196</span>    String pathA = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "testSingleFailureInMultiA");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    String pathB = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "testSingleFailureInMultiB");<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    String pathC = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "testSingleFailureInMultiC");<a name="line.198"></a>
 <span class="sourceLineNo">199</span>    LinkedList&lt;ZKUtilOp&gt; ops = new LinkedList&lt;&gt;();<a name="line.199"></a>
 <span class="sourceLineNo">200</span>    ops.add(ZKUtilOp.createAndFailSilent(pathA, Bytes.toBytes(pathA)));<a name="line.200"></a>
 <span class="sourceLineNo">201</span>    ops.add(ZKUtilOp.createAndFailSilent(pathB, Bytes.toBytes(pathB)));<a name="line.201"></a>
@@ -223,17 +223,17 @@
 <span class="sourceLineNo">215</span><a name="line.215"></a>
 <span class="sourceLineNo">216</span>  @Test<a name="line.216"></a>
 <span class="sourceLineNo">217</span>  public void testMultiFailure() throws Exception {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    String pathX = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testMultiFailureX");<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    String pathY = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testMultiFailureY");<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    String pathZ = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testMultiFailureZ");<a name="line.220"></a>
+<span class="sourceLineNo">218</span>    String pathX = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "testMultiFailureX");<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    String pathY = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "testMultiFailureY");<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    String pathZ = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "testMultiFailureZ");<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    // create X that we will use to fail create later<a name="line.221"></a>
 <span class="sourceLineNo">222</span>    LinkedList&lt;ZKUtilOp&gt; ops = new LinkedList&lt;&gt;();<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    ops.add(ZKUtilOp.createAndFailSilent(pathX, Bytes.toBytes(pathX)));<a name="line.223"></a>
 <span class="sourceLineNo">224</span>    ZKUtil.multiOrSequential(zkw, ops, false);<a name="line.224"></a>
 <span class="sourceLineNo">225</span><a name="line.225"></a>
 <span class="sourceLineNo">226</span>    // fail one of each create ,setData, delete<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    String pathV = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testMultiFailureV");<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    String pathW = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "testMultiFailureW");<a name="line.228"></a>
+<span class="sourceLineNo">227</span>    String pathV = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "testMultiFailureV");<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    String pathW = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "testMultiFailureW");<a name="line.228"></a>
 <span class="sourceLineNo">229</span>    ops = new LinkedList&lt;&gt;();<a name="line.229"></a>
 <span class="sourceLineNo">230</span>    ops.add(ZKUtilOp.createAndFailSilent(pathX, Bytes.toBytes(pathX))); // fail  -- already exists<a name="line.230"></a>
 <span class="sourceLineNo">231</span>    ops.add(ZKUtilOp.setData(pathY, Bytes.toBytes(pathY))); // fail -- doesn't exist<a name="line.231"></a>
@@ -277,10 +277,10 @@
 <span class="sourceLineNo">269</span><a name="line.269"></a>
 <span class="sourceLineNo">270</span>  @Test<a name="line.270"></a>
 <span class="sourceLineNo">271</span>  public void testRunSequentialOnMultiFailure() throws Exception {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    String path1 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "runSequential1");<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    String path2 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "runSequential2");<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    String path3 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "runSequential3");<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    String path4 = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "runSequential4");<a name="line.275"></a>
+<span class="sourceLineNo">272</span>    String path1 = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "runSequential1");<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    String path2 = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "runSequential2");<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    String path3 = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "runSequential3");<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    String path4 = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "runSequential4");<a name="line.275"></a>
 <span class="sourceLineNo">276</span><a name="line.276"></a>
 <span class="sourceLineNo">277</span>    // create some nodes that we will use later<a name="line.277"></a>
 <span class="sourceLineNo">278</span>    LinkedList&lt;ZKUtilOp&gt; ops = new LinkedList&lt;&gt;();<a name="line.278"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.StubAbortable.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.StubAbortable.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.StubAbortable.html
index ac15f4a..789d29c 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.StubAbortable.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.StubAbortable.html
@@ -107,9 +107,9 @@
 <span class="sourceLineNo">099</span>    Abortable abortable = new StubAbortable();<a name="line.99"></a>
 <span class="sourceLineNo">100</span>    ZKWatcher zk = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.100"></a>
 <span class="sourceLineNo">101</span>        "testNodeTracker", abortable);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    ZKUtil.createAndFailSilent(zk, zk.znodePaths.baseZNode);<a name="line.102"></a>
+<span class="sourceLineNo">102</span>    ZKUtil.createAndFailSilent(zk, zk.getZNodePaths().baseZNode);<a name="line.102"></a>
 <span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    final String node = ZNodePaths.joinZNode(zk.znodePaths.baseZNode,<a name="line.104"></a>
+<span class="sourceLineNo">104</span>    final String node = ZNodePaths.joinZNode(zk.getZNodePaths().baseZNode,<a name="line.104"></a>
 <span class="sourceLineNo">105</span>      Long.toString(ThreadLocalRandom.current().nextLong()));<a name="line.105"></a>
 <span class="sourceLineNo">106</span><a name="line.106"></a>
 <span class="sourceLineNo">107</span>    final byte [] dataOne = Bytes.toBytes("dataOne");<a name="line.107"></a>
@@ -330,7 +330,7 @@
 <span class="sourceLineNo">322</span>        TEST_UTIL.getConfiguration().get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.322"></a>
 <span class="sourceLineNo">323</span>            HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT));<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    final String nodeName =  zkw.znodePaths.masterAddressZNode;<a name="line.325"></a>
+<span class="sourceLineNo">325</span>    final String nodeName =  zkw.getZNodePaths().masterAddressZNode;<a name="line.325"></a>
 <span class="sourceLineNo">326</span><a name="line.326"></a>
 <span class="sourceLineNo">327</span>    // Check that we manage the case when there is no data<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    ZKUtil.createAndFailSilent(zkw, nodeName);<a name="line.328"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.TestTracker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.TestTracker.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.TestTracker.html
index ac15f4a..789d29c 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.TestTracker.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.TestTracker.html
@@ -107,9 +107,9 @@
 <span class="sourceLineNo">099</span>    Abortable abortable = new StubAbortable();<a name="line.99"></a>
 <span class="sourceLineNo">100</span>    ZKWatcher zk = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.100"></a>
 <span class="sourceLineNo">101</span>        "testNodeTracker", abortable);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    ZKUtil.createAndFailSilent(zk, zk.znodePaths.baseZNode);<a name="line.102"></a>
+<span class="sourceLineNo">102</span>    ZKUtil.createAndFailSilent(zk, zk.getZNodePaths().baseZNode);<a name="line.102"></a>
 <span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    final String node = ZNodePaths.joinZNode(zk.znodePaths.baseZNode,<a name="line.104"></a>
+<span class="sourceLineNo">104</span>    final String node = ZNodePaths.joinZNode(zk.getZNodePaths().baseZNode,<a name="line.104"></a>
 <span class="sourceLineNo">105</span>      Long.toString(ThreadLocalRandom.current().nextLong()));<a name="line.105"></a>
 <span class="sourceLineNo">106</span><a name="line.106"></a>
 <span class="sourceLineNo">107</span>    final byte [] dataOne = Bytes.toBytes("dataOne");<a name="line.107"></a>
@@ -330,7 +330,7 @@
 <span class="sourceLineNo">322</span>        TEST_UTIL.getConfiguration().get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.322"></a>
 <span class="sourceLineNo">323</span>            HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT));<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    final String nodeName =  zkw.znodePaths.masterAddressZNode;<a name="line.325"></a>
+<span class="sourceLineNo">325</span>    final String nodeName =  zkw.getZNodePaths().masterAddressZNode;<a name="line.325"></a>
 <span class="sourceLineNo">326</span><a name="line.326"></a>
 <span class="sourceLineNo">327</span>    // Check that we manage the case when there is no data<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    ZKUtil.createAndFailSilent(zkw, nodeName);<a name="line.328"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.TestingZKListener.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.TestingZKListener.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.TestingZKListener.html
index ac15f4a..789d29c 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.TestingZKListener.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.TestingZKListener.html
@@ -107,9 +107,9 @@
 <span class="sourceLineNo">099</span>    Abortable abortable = new StubAbortable();<a name="line.99"></a>
 <span class="sourceLineNo">100</span>    ZKWatcher zk = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.100"></a>
 <span class="sourceLineNo">101</span>        "testNodeTracker", abortable);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    ZKUtil.createAndFailSilent(zk, zk.znodePaths.baseZNode);<a name="line.102"></a>
+<span class="sourceLineNo">102</span>    ZKUtil.createAndFailSilent(zk, zk.getZNodePaths().baseZNode);<a name="line.102"></a>
 <span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    final String node = ZNodePaths.joinZNode(zk.znodePaths.baseZNode,<a name="line.104"></a>
+<span class="sourceLineNo">104</span>    final String node = ZNodePaths.joinZNode(zk.getZNodePaths().baseZNode,<a name="line.104"></a>
 <span class="sourceLineNo">105</span>      Long.toString(ThreadLocalRandom.current().nextLong()));<a name="line.105"></a>
 <span class="sourceLineNo">106</span><a name="line.106"></a>
 <span class="sourceLineNo">107</span>    final byte [] dataOne = Bytes.toBytes("dataOne");<a name="line.107"></a>
@@ -330,7 +330,7 @@
 <span class="sourceLineNo">322</span>        TEST_UTIL.getConfiguration().get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.322"></a>
 <span class="sourceLineNo">323</span>            HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT));<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    final String nodeName =  zkw.znodePaths.masterAddressZNode;<a name="line.325"></a>
+<span class="sourceLineNo">325</span>    final String nodeName =  zkw.getZNodePaths().masterAddressZNode;<a name="line.325"></a>
 <span class="sourceLineNo">326</span><a name="line.326"></a>
 <span class="sourceLineNo">327</span>    // Check that we manage the case when there is no data<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    ZKUtil.createAndFailSilent(zkw, nodeName);<a name="line.328"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.WaitToGetDataThread.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.WaitToGetDataThread.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.WaitToGetDataThread.html
index ac15f4a..789d29c 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.WaitToGetDataThread.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.WaitToGetDataThread.html
@@ -107,9 +107,9 @@
 <span class="sourceLineNo">099</span>    Abortable abortable = new StubAbortable();<a name="line.99"></a>
 <span class="sourceLineNo">100</span>    ZKWatcher zk = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.100"></a>
 <span class="sourceLineNo">101</span>        "testNodeTracker", abortable);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    ZKUtil.createAndFailSilent(zk, zk.znodePaths.baseZNode);<a name="line.102"></a>
+<span class="sourceLineNo">102</span>    ZKUtil.createAndFailSilent(zk, zk.getZNodePaths().baseZNode);<a name="line.102"></a>
 <span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    final String node = ZNodePaths.joinZNode(zk.znodePaths.baseZNode,<a name="line.104"></a>
+<span class="sourceLineNo">104</span>    final String node = ZNodePaths.joinZNode(zk.getZNodePaths().baseZNode,<a name="line.104"></a>
 <span class="sourceLineNo">105</span>      Long.toString(ThreadLocalRandom.current().nextLong()));<a name="line.105"></a>
 <span class="sourceLineNo">106</span><a name="line.106"></a>
 <span class="sourceLineNo">107</span>    final byte [] dataOne = Bytes.toBytes("dataOne");<a name="line.107"></a>
@@ -330,7 +330,7 @@
 <span class="sourceLineNo">322</span>        TEST_UTIL.getConfiguration().get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.322"></a>
 <span class="sourceLineNo">323</span>            HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT));<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    final String nodeName =  zkw.znodePaths.masterAddressZNode;<a name="line.325"></a>
+<span class="sourceLineNo">325</span>    final String nodeName =  zkw.getZNodePaths().masterAddressZNode;<a name="line.325"></a>
 <span class="sourceLineNo">326</span><a name="line.326"></a>
 <span class="sourceLineNo">327</span>    // Check that we manage the case when there is no data<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    ZKUtil.createAndFailSilent(zkw, nodeName);<a name="line.328"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.html
index ac15f4a..789d29c 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKNodeTracker.html
@@ -107,9 +107,9 @@
 <span class="sourceLineNo">099</span>    Abortable abortable = new StubAbortable();<a name="line.99"></a>
 <span class="sourceLineNo">100</span>    ZKWatcher zk = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.100"></a>
 <span class="sourceLineNo">101</span>        "testNodeTracker", abortable);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    ZKUtil.createAndFailSilent(zk, zk.znodePaths.baseZNode);<a name="line.102"></a>
+<span class="sourceLineNo">102</span>    ZKUtil.createAndFailSilent(zk, zk.getZNodePaths().baseZNode);<a name="line.102"></a>
 <span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    final String node = ZNodePaths.joinZNode(zk.znodePaths.baseZNode,<a name="line.104"></a>
+<span class="sourceLineNo">104</span>    final String node = ZNodePaths.joinZNode(zk.getZNodePaths().baseZNode,<a name="line.104"></a>
 <span class="sourceLineNo">105</span>      Long.toString(ThreadLocalRandom.current().nextLong()));<a name="line.105"></a>
 <span class="sourceLineNo">106</span><a name="line.106"></a>
 <span class="sourceLineNo">107</span>    final byte [] dataOne = Bytes.toBytes("dataOne");<a name="line.107"></a>
@@ -330,7 +330,7 @@
 <span class="sourceLineNo">322</span>        TEST_UTIL.getConfiguration().get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.322"></a>
 <span class="sourceLineNo">323</span>            HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT));<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    final String nodeName =  zkw.znodePaths.masterAddressZNode;<a name="line.325"></a>
+<span class="sourceLineNo">325</span>    final String nodeName =  zkw.getZNodePaths().masterAddressZNode;<a name="line.325"></a>
 <span class="sourceLineNo">326</span><a name="line.326"></a>
 <span class="sourceLineNo">327</span>    // Check that we manage the case when there is no data<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    ZKUtil.createAndFailSilent(zkw, nodeName);<a name="line.328"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKUtilNoServer.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKUtilNoServer.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKUtilNoServer.html
index 5ee78dd..ec09ac1 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKUtilNoServer.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKUtilNoServer.html
@@ -120,8 +120,8 @@
 <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>    Mockito.doThrow(new InterruptedException()).when(recoverableZk)<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        .getChildren(zkw.znodePaths.baseZNode, null);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    ZKUtil.listChildrenNoWatch(zkw, zkw.znodePaths.baseZNode);<a name="line.116"></a>
+<span class="sourceLineNo">115</span>        .getChildren(zkw.getZNodePaths().baseZNode, null);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    ZKUtil.listChildrenNoWatch(zkw, zkw.getZNodePaths().baseZNode);<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>
 


[14/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html
index 6d59738..61e3cd8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html
@@ -116,20 +116,20 @@
 <span class="sourceLineNo">108</span>   * @throws IOException if unable to connect to zk or config problem<a name="line.108"></a>
 <span class="sourceLineNo">109</span>   */<a name="line.109"></a>
 <span class="sourceLineNo">110</span>  public static RecoverableZooKeeper connect(Configuration conf, Watcher watcher)<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  throws IOException {<a name="line.111"></a>
+<span class="sourceLineNo">111</span>    throws IOException {<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    String ensemble = ZKConfig.getZKQuorumServersString(conf);<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    return connect(conf, ensemble, watcher);<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>  public static RecoverableZooKeeper connect(Configuration conf, String ensemble,<a name="line.116"></a>
 <span class="sourceLineNo">117</span>      Watcher watcher)<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  throws IOException {<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    throws IOException {<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    return connect(conf, ensemble, watcher, null);<a name="line.119"></a>
 <span class="sourceLineNo">120</span>  }<a name="line.120"></a>
 <span class="sourceLineNo">121</span><a name="line.121"></a>
 <span class="sourceLineNo">122</span>  public static RecoverableZooKeeper connect(Configuration conf, String ensemble,<a name="line.122"></a>
 <span class="sourceLineNo">123</span>      Watcher watcher, final String identifier)<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  throws IOException {<a name="line.124"></a>
+<span class="sourceLineNo">124</span>    throws IOException {<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    if(ensemble == null) {<a name="line.125"></a>
 <span class="sourceLineNo">126</span>      throw new IOException("Unable to determine ZooKeeper ensemble");<a name="line.126"></a>
 <span class="sourceLineNo">127</span>    }<a name="line.127"></a>
@@ -355,7 +355,7 @@
 <span class="sourceLineNo">347</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.347"></a>
 <span class="sourceLineNo">348</span>   */<a name="line.348"></a>
 <span class="sourceLineNo">349</span>  public static boolean watchAndCheckExists(ZKWatcher zkw, String znode)<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  throws KeeperException {<a name="line.350"></a>
+<span class="sourceLineNo">350</span>    throws KeeperException {<a name="line.350"></a>
 <span class="sourceLineNo">351</span>    try {<a name="line.351"></a>
 <span class="sourceLineNo">352</span>      Stat s = zkw.getRecoverableZooKeeper().exists(znode, zkw);<a name="line.352"></a>
 <span class="sourceLineNo">353</span>      boolean exists = s != null ? true : false;<a name="line.353"></a>
@@ -409,7 +409,7 @@
 <span class="sourceLineNo">401</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.401"></a>
 <span class="sourceLineNo">402</span>   */<a name="line.402"></a>
 <span class="sourceLineNo">403</span>  public static int checkExists(ZKWatcher zkw, String znode)<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  throws KeeperException {<a name="line.404"></a>
+<span class="sourceLineNo">404</span>    throws KeeperException {<a name="line.404"></a>
 <span class="sourceLineNo">405</span>    try {<a name="line.405"></a>
 <span class="sourceLineNo">406</span>      Stat s = zkw.getRecoverableZooKeeper().exists(znode, null);<a name="line.406"></a>
 <span class="sourceLineNo">407</span>      return s != null ? s.getVersion() : -1;<a name="line.407"></a>
@@ -446,7 +446,7 @@
 <span class="sourceLineNo">438</span>   */<a name="line.438"></a>
 <span class="sourceLineNo">439</span>  public static List&lt;String&gt; listChildrenAndWatchForNewChildren(<a name="line.439"></a>
 <span class="sourceLineNo">440</span>          ZKWatcher zkw, String znode)<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  throws KeeperException {<a name="line.441"></a>
+<span class="sourceLineNo">441</span>    throws KeeperException {<a name="line.441"></a>
 <span class="sourceLineNo">442</span>    try {<a name="line.442"></a>
 <span class="sourceLineNo">443</span>      List&lt;String&gt; children = zkw.getRecoverableZooKeeper().getChildren(znode, zkw);<a name="line.443"></a>
 <span class="sourceLineNo">444</span>      return children;<a name="line.444"></a>
@@ -501,7 +501,7 @@
 <span class="sourceLineNo">493</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.493"></a>
 <span class="sourceLineNo">494</span>   */<a name="line.494"></a>
 <span class="sourceLineNo">495</span>  public static List&lt;String&gt; listChildrenNoWatch(ZKWatcher zkw, String znode)<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  throws KeeperException {<a name="line.496"></a>
+<span class="sourceLineNo">496</span>    throws KeeperException {<a name="line.496"></a>
 <span class="sourceLineNo">497</span>    List&lt;String&gt; children = null;<a name="line.497"></a>
 <span class="sourceLineNo">498</span>    try {<a name="line.498"></a>
 <span class="sourceLineNo">499</span>      // List the children without watching<a name="line.499"></a>
@@ -558,7 +558,7 @@
 <span class="sourceLineNo">550</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.550"></a>
 <span class="sourceLineNo">551</span>   */<a name="line.551"></a>
 <span class="sourceLineNo">552</span>  public static boolean nodeHasChildren(ZKWatcher zkw, String znode)<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  throws KeeperException {<a name="line.553"></a>
+<span class="sourceLineNo">553</span>    throws KeeperException {<a name="line.553"></a>
 <span class="sourceLineNo">554</span>    try {<a name="line.554"></a>
 <span class="sourceLineNo">555</span>      return !zkw.getRecoverableZooKeeper().getChildren(znode, null).isEmpty();<a name="line.555"></a>
 <span class="sourceLineNo">556</span>    } catch(KeeperException.NoNodeException ke) {<a name="line.556"></a>
@@ -590,7 +590,7 @@
 <span class="sourceLineNo">582</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.582"></a>
 <span class="sourceLineNo">583</span>   */<a name="line.583"></a>
 <span class="sourceLineNo">584</span>  public static int getNumberOfChildren(ZKWatcher zkw, String znode)<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  throws KeeperException {<a name="line.585"></a>
+<span class="sourceLineNo">585</span>    throws KeeperException {<a name="line.585"></a>
 <span class="sourceLineNo">586</span>    try {<a name="line.586"></a>
 <span class="sourceLineNo">587</span>      Stat stat = zkw.getRecoverableZooKeeper().exists(znode, null);<a name="line.587"></a>
 <span class="sourceLineNo">588</span>      return stat == null ? 0 : stat.getNumChildren();<a name="line.588"></a>
@@ -641,7 +641,7 @@
 <span class="sourceLineNo">633</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.633"></a>
 <span class="sourceLineNo">634</span>   */<a name="line.634"></a>
 <span class="sourceLineNo">635</span>  public static byte [] getDataAndWatch(ZKWatcher zkw, String znode)<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  throws KeeperException {<a name="line.636"></a>
+<span class="sourceLineNo">636</span>    throws KeeperException {<a name="line.636"></a>
 <span class="sourceLineNo">637</span>    return getDataInternal(zkw, znode, null, true);<a name="line.637"></a>
 <span class="sourceLineNo">638</span>  }<a name="line.638"></a>
 <span class="sourceLineNo">639</span><a name="line.639"></a>
@@ -703,7 +703,7 @@
 <span class="sourceLineNo">695</span>   */<a name="line.695"></a>
 <span class="sourceLineNo">696</span>  public static byte [] getDataNoWatch(ZKWatcher zkw, String znode,<a name="line.696"></a>
 <span class="sourceLineNo">697</span>                                       Stat stat)<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  throws KeeperException {<a name="line.698"></a>
+<span class="sourceLineNo">698</span>    throws KeeperException {<a name="line.698"></a>
 <span class="sourceLineNo">699</span>    try {<a name="line.699"></a>
 <span class="sourceLineNo">700</span>      byte [] data = zkw.getRecoverableZooKeeper().getData(znode, null, stat);<a name="line.700"></a>
 <span class="sourceLineNo">701</span>      logRetrievedMsg(zkw, znode, data, false);<a name="line.701"></a>
@@ -809,7 +809,7 @@
 <span class="sourceLineNo">801</span>   */<a name="line.801"></a>
 <span class="sourceLineNo">802</span>  public static boolean setData(ZKWatcher zkw, String znode,<a name="line.802"></a>
 <span class="sourceLineNo">803</span>                                byte [] data, int expectedVersion)<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.804"></a>
+<span class="sourceLineNo">804</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.804"></a>
 <span class="sourceLineNo">805</span>    try {<a name="line.805"></a>
 <span class="sourceLineNo">806</span>      return zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion) != null;<a name="line.806"></a>
 <span class="sourceLineNo">807</span>    } catch (InterruptedException e) {<a name="line.807"></a>
@@ -853,12 +853,12 @@
 <span class="sourceLineNo">845</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.845"></a>
 <span class="sourceLineNo">846</span>   */<a name="line.846"></a>
 <span class="sourceLineNo">847</span>  public static void setData(ZKWatcher zkw, String znode, byte [] data)<a name="line.847"></a>
-<span class="sourceLineNo">848</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.848"></a>
+<span class="sourceLineNo">848</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.848"></a>
 <span class="sourceLineNo">849</span>    setData(zkw, (SetData)ZKUtilOp.setData(znode, data));<a name="line.849"></a>
 <span class="sourceLineNo">850</span>  }<a name="line.850"></a>
 <span class="sourceLineNo">851</span><a name="line.851"></a>
 <span class="sourceLineNo">852</span>  private static void setData(ZKWatcher zkw, SetData setData)<a name="line.852"></a>
-<span class="sourceLineNo">853</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.853"></a>
+<span class="sourceLineNo">853</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.853"></a>
 <span class="sourceLineNo">854</span>    SetDataRequest sd = (SetDataRequest)toZooKeeperOp(zkw, setData).toRequestRecord();<a name="line.854"></a>
 <span class="sourceLineNo">855</span>    setData(zkw, sd.getPath(), sd.getData(), sd.getVersion());<a name="line.855"></a>
 <span class="sourceLineNo">856</span>  }<a name="line.856"></a>
@@ -899,7 +899,7 @@
 <span class="sourceLineNo">891</span><a name="line.891"></a>
 <span class="sourceLineNo">892</span>  public static ArrayList&lt;ACL&gt; createACL(ZKWatcher zkw, String node,<a name="line.892"></a>
 <span class="sourceLineNo">893</span>                                         boolean isSecureZooKeeper) {<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    if (!node.startsWith(zkw.znodePaths.baseZNode)) {<a name="line.894"></a>
+<span class="sourceLineNo">894</span>    if (!node.startsWith(zkw.getZNodePaths().baseZNode)) {<a name="line.894"></a>
 <span class="sourceLineNo">895</span>      return Ids.OPEN_ACL_UNSAFE;<a name="line.895"></a>
 <span class="sourceLineNo">896</span>    }<a name="line.896"></a>
 <span class="sourceLineNo">897</span>    if (isSecureZooKeeper) {<a name="line.897"></a>
@@ -931,7 +931,7 @@
 <span class="sourceLineNo">923</span>      }<a name="line.923"></a>
 <span class="sourceLineNo">924</span>      // Certain znodes are accessed directly by the client,<a name="line.924"></a>
 <span class="sourceLineNo">925</span>      // so they must be readable by non-authenticated clients<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      if (zkw.znodePaths.isClientReadable(node)) {<a name="line.926"></a>
+<span class="sourceLineNo">926</span>      if (zkw.getZNodePaths().isClientReadable(node)) {<a name="line.926"></a>
 <span class="sourceLineNo">927</span>        acls.addAll(Ids.CREATOR_ALL_ACL);<a name="line.927"></a>
 <span class="sourceLineNo">928</span>        acls.addAll(Ids.READ_ACL_UNSAFE);<a name="line.928"></a>
 <span class="sourceLineNo">929</span>      } else {<a name="line.929"></a>
@@ -967,7 +967,7 @@
 <span class="sourceLineNo">959</span>   */<a name="line.959"></a>
 <span class="sourceLineNo">960</span>  public static boolean createEphemeralNodeAndWatch(ZKWatcher zkw,<a name="line.960"></a>
 <span class="sourceLineNo">961</span>      String znode, byte [] data)<a name="line.961"></a>
-<span class="sourceLineNo">962</span>  throws KeeperException {<a name="line.962"></a>
+<span class="sourceLineNo">962</span>    throws KeeperException {<a name="line.962"></a>
 <span class="sourceLineNo">963</span>    boolean ret = true;<a name="line.963"></a>
 <span class="sourceLineNo">964</span>    try {<a name="line.964"></a>
 <span class="sourceLineNo">965</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.965"></a>
@@ -1007,7 +1007,7 @@
 <span class="sourceLineNo">999</span>   */<a name="line.999"></a>
 <span class="sourceLineNo">1000</span>  public static boolean createNodeIfNotExistsAndWatch(<a name="line.1000"></a>
 <span class="sourceLineNo">1001</span>          ZKWatcher zkw, String znode, byte [] data)<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>  throws KeeperException {<a name="line.1002"></a>
+<span class="sourceLineNo">1002</span>    throws KeeperException {<a name="line.1002"></a>
 <span class="sourceLineNo">1003</span>    boolean ret = true;<a name="line.1003"></a>
 <span class="sourceLineNo">1004</span>    try {<a name="line.1004"></a>
 <span class="sourceLineNo">1005</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1005"></a>
@@ -1074,7 +1074,7 @@
 <span class="sourceLineNo">1066</span>   */<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>  public static int createAndWatch(ZKWatcher zkw,<a name="line.1067"></a>
 <span class="sourceLineNo">1068</span>      String znode, byte [] data)<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>  throws KeeperException, KeeperException.NodeExistsException {<a name="line.1069"></a>
+<span class="sourceLineNo">1069</span>    throws KeeperException, KeeperException.NodeExistsException {<a name="line.1069"></a>
 <span class="sourceLineNo">1070</span>    try {<a name="line.1070"></a>
 <span class="sourceLineNo">1071</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1071"></a>
 <span class="sourceLineNo">1072</span>          CreateMode.PERSISTENT);<a name="line.1072"></a>
@@ -1140,13 +1140,13 @@
 <span class="sourceLineNo">1132</span>   */<a name="line.1132"></a>
 <span class="sourceLineNo">1133</span>  public static void createAndFailSilent(ZKWatcher zkw,<a name="line.1133"></a>
 <span class="sourceLineNo">1134</span>      String znode, byte[] data)<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>  throws KeeperException {<a name="line.1135"></a>
+<span class="sourceLineNo">1135</span>    throws KeeperException {<a name="line.1135"></a>
 <span class="sourceLineNo">1136</span>    createAndFailSilent(zkw,<a name="line.1136"></a>
 <span class="sourceLineNo">1137</span>        (CreateAndFailSilent)ZKUtilOp.createAndFailSilent(znode, data));<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>  }<a name="line.1138"></a>
 <span class="sourceLineNo">1139</span><a name="line.1139"></a>
 <span class="sourceLineNo">1140</span>  private static void createAndFailSilent(ZKWatcher zkw, CreateAndFailSilent cafs)<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>  throws KeeperException {<a name="line.1141"></a>
+<span class="sourceLineNo">1141</span>    throws KeeperException {<a name="line.1141"></a>
 <span class="sourceLineNo">1142</span>    CreateRequest create = (CreateRequest)toZooKeeperOp(zkw, cafs).toRequestRecord();<a name="line.1142"></a>
 <span class="sourceLineNo">1143</span>    String znode = create.getPath();<a name="line.1143"></a>
 <span class="sourceLineNo">1144</span>    try {<a name="line.1144"></a>
@@ -1181,7 +1181,7 @@
 <span class="sourceLineNo">1173</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1173"></a>
 <span class="sourceLineNo">1174</span>   */<a name="line.1174"></a>
 <span class="sourceLineNo">1175</span>  public static void createWithParents(ZKWatcher zkw, String znode)<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>  throws KeeperException {<a name="line.1176"></a>
+<span class="sourceLineNo">1176</span>    throws KeeperException {<a name="line.1176"></a>
 <span class="sourceLineNo">1177</span>    createWithParents(zkw, znode, new byte[0]);<a name="line.1177"></a>
 <span class="sourceLineNo">1178</span>  }<a name="line.1178"></a>
 <span class="sourceLineNo">1179</span><a name="line.1179"></a>
@@ -1199,7 +1199,7 @@
 <span class="sourceLineNo">1191</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1191"></a>
 <span class="sourceLineNo">1192</span>   */<a name="line.1192"></a>
 <span class="sourceLineNo">1193</span>  public static void createWithParents(ZKWatcher zkw, String znode, byte[] data)<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>  throws KeeperException {<a name="line.1194"></a>
+<span class="sourceLineNo">1194</span>    throws KeeperException {<a name="line.1194"></a>
 <span class="sourceLineNo">1195</span>    try {<a name="line.1195"></a>
 <span class="sourceLineNo">1196</span>      if(znode == null) {<a name="line.1196"></a>
 <span class="sourceLineNo">1197</span>        return;<a name="line.1197"></a>
@@ -1224,7 +1224,7 @@
 <span class="sourceLineNo">1216</span>   * Delete the specified node.  Sets no watches.  Throws all exceptions.<a name="line.1216"></a>
 <span class="sourceLineNo">1217</span>   */<a name="line.1217"></a>
 <span class="sourceLineNo">1218</span>  public static void deleteNode(ZKWatcher zkw, String node)<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  throws KeeperException {<a name="line.1219"></a>
+<span class="sourceLineNo">1219</span>    throws KeeperException {<a name="line.1219"></a>
 <span class="sourceLineNo">1220</span>    deleteNode(zkw, node, -1);<a name="line.1220"></a>
 <span class="sourceLineNo">1221</span>  }<a name="line.1221"></a>
 <span class="sourceLineNo">1222</span><a name="line.1222"></a>
@@ -1234,7 +1234,7 @@
 <span class="sourceLineNo">1226</span>   */<a name="line.1226"></a>
 <span class="sourceLineNo">1227</span>  public static boolean deleteNode(ZKWatcher zkw, String node,<a name="line.1227"></a>
 <span class="sourceLineNo">1228</span>                                   int version)<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>  throws KeeperException {<a name="line.1229"></a>
+<span class="sourceLineNo">1229</span>    throws KeeperException {<a name="line.1229"></a>
 <span class="sourceLineNo">1230</span>    try {<a name="line.1230"></a>
 <span class="sourceLineNo">1231</span>      zkw.getRecoverableZooKeeper().delete(node, version);<a name="line.1231"></a>
 <span class="sourceLineNo">1232</span>      return true;<a name="line.1232"></a>
@@ -1254,7 +1254,7 @@
 <span class="sourceLineNo">1246</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1246"></a>
 <span class="sourceLineNo">1247</span>   */<a name="line.1247"></a>
 <span class="sourceLineNo">1248</span>  public static void deleteNodeFailSilent(ZKWatcher zkw, String node)<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>  throws KeeperException {<a name="line.1249"></a>
+<span class="sourceLineNo">1249</span>    throws KeeperException {<a name="line.1249"></a>
 <span class="sourceLineNo">1250</span>    deleteNodeFailSilent(zkw,<a name="line.1250"></a>
 <span class="sourceLineNo">1251</span>      (DeleteNodeFailSilent)ZKUtilOp.deleteNodeFailSilent(node));<a name="line.1251"></a>
 <span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
@@ -1280,7 +1280,7 @@
 <span class="sourceLineNo">1272</span>   * children.<a name="line.1272"></a>
 <span class="sourceLineNo">1273</span>   */<a name="line.1273"></a>
 <span class="sourceLineNo">1274</span>  public static void deleteNodeRecursively(ZKWatcher zkw, String node)<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>  throws KeeperException {<a name="line.1275"></a>
+<span class="sourceLineNo">1275</span>    throws KeeperException {<a name="line.1275"></a>
 <span class="sourceLineNo">1276</span>    deleteNodeRecursivelyMultiOrSequential(zkw, true, node);<a name="line.1276"></a>
 <span class="sourceLineNo">1277</span>  }<a name="line.1277"></a>
 <span class="sourceLineNo">1278</span><a name="line.1278"></a>
@@ -1743,7 +1743,7 @@
 <span class="sourceLineNo">1735</span>  public static String dump(ZKWatcher zkw) {<a name="line.1735"></a>
 <span class="sourceLineNo">1736</span>    StringBuilder sb = new StringBuilder();<a name="line.1736"></a>
 <span class="sourceLineNo">1737</span>    try {<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>      sb.append("HBase is rooted at ").append(zkw.znodePaths.baseZNode);<a name="line.1738"></a>
+<span class="sourceLineNo">1738</span>      sb.append("HBase is rooted at ").append(zkw.getZNodePaths().baseZNode);<a name="line.1738"></a>
 <span class="sourceLineNo">1739</span>      sb.append("\nActive master address: ");<a name="line.1739"></a>
 <span class="sourceLineNo">1740</span>      try {<a name="line.1740"></a>
 <span class="sourceLineNo">1741</span>        sb.append(MasterAddressTracker.getMasterAddress(zkw));<a name="line.1741"></a>
@@ -1751,400 +1751,401 @@
 <span class="sourceLineNo">1743</span>        sb.append("&lt;&lt;FAILED LOOKUP: " + e.getMessage() + "&gt;&gt;");<a name="line.1743"></a>
 <span class="sourceLineNo">1744</span>      }<a name="line.1744"></a>
 <span class="sourceLineNo">1745</span>      sb.append("\nBackup master addresses:");<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      for (String child : listChildrenNoWatch(zkw, zkw.znodePaths.backupMasterAddressesZNode)) {<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        sb.append("\n ").append(child);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      }<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        + new MetaTableLocator().getMetaRegionLocation(zkw));<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>                    + new MetaTableLocator().getMetaRegionLocation(zkw, i));<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      }<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      sb.append("\nRegion servers:");<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>      for (String child : listChildrenNoWatch(zkw, zkw.znodePaths.rsZNode)) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        sb.append("\n ").append(child);<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      try {<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      } catch (KeeperException ke) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>      }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>      for (String server : servers) {<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>        sb.append("\n ").append(server);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        try {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          if (stat == null) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>            break;<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>          }<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span><a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>          for (String s : stat) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            sb.append("\n  ").append(s);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>          }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>        } catch (Exception e) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>        }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    } catch (KeeperException ke) {<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      sb.append("\n" + ke.getMessage());<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    return sb.toString();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>  }<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span><a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>  /**<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>   *<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>   */<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>      throws KeeperException {<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    String replicationZnode = zkw.znodePaths.replicationZNode;<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span><a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>      return;<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>    }<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span><a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>    // do a ls -r on this znode<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    for (String child : children) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      String znode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (znode.equals(zkw.znodePaths.peersZNode)) {<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>        appendPeersZnodes(zkw, znode, sb);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      } else if (znode.equals(zkw.znodePaths.queuesZNode)) {<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        appendRSZnodes(zkw, znode, sb);<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      } else if (znode.equals(zkw.znodePaths.hfileRefsZNode)) {<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>        appendHFileRefsZnodes(zkw, znode, sb);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>      }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>    }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>  }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span><a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>  private static void appendHFileRefsZnodes(ZKWatcher zkw, String hfileRefsZnode,<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    sb.append("\n").append(hfileRefsZnode).append(": ");<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, hfileRefsZnode)) {<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      String znodeToProcess = ZNodePaths.joinZNode(hfileRefsZnode, peerIdZnode);<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>      List&lt;String&gt; peerHFileRefsZnodes = ZKUtil.listChildrenNoWatch(zkw, znodeToProcess);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      int size = peerHFileRefsZnodes.size();<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      for (int i = 0; i &lt; size; i++) {<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        sb.append(peerHFileRefsZnodes.get(i));<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        if (i != size - 1) {<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          sb.append(", ");<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>        }<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>      }<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    }<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>  }<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span><a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>  /**<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>   * @return aq string of replication znodes and log positions<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>   */<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>    StringBuilder sb = new StringBuilder();<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>    return sb.toString();<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>  }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span><a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>      throws KeeperException {<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>    stack.add(znode);<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>    do {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      byte[] data;<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      try {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      } catch (InterruptedException e) {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>        zkw.interruptedException(e);<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>        return;<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      }<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        long position = 0;<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        try {<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>          sb.append(position);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        } catch (DeserializationException ignored) {<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>        } catch (InterruptedException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>          zkw.interruptedException(e);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>          return;<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>        }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>      }<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>    } while (stack.size() &gt; 0);<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>  }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span><a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      byte[] data;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>      try {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      } catch (InterruptedException e) {<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>        zkw.interruptedException(e);<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        return;<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>      }<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>      // parse the data of the above peer znode.<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      try {<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>        String clusterKey = builder.getClusterkey();<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        // add the peer-state.<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>      } catch (IOException ipbe) {<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>  }<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span><a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      "peer-state");<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>      if (!child.equals(peerState)) {<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>        continue;<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span><a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      byte[] peerStateData;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>      try {<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>        sb.append(builder.getState().name());<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      } catch (IOException ipbe) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      } catch (InterruptedException e) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>        zkw.interruptedException(e);<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>        return;<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  }<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span><a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>  /**<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>   * Gets the statistics from the given server.<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>   *<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * @param server  The server to get the statistics from.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param timeout  The socket timeout to use.<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @return The array of response strings.<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   * @throws IOException When the socket communication fails.<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>   */<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>  public static String[] getServerStats(String server, int timeout)<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>  throws IOException {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    String[] sp = server.split(":");<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    if (sp == null || sp.length == 0) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>      return null;<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    }<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span><a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>    String host = sp[0];<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span><a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    try (Socket socket = new Socket()) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      socket.connect(sockAddr, timeout);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span><a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      socket.setSoTimeout(timeout);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          BufferedReader in = new BufferedReader(<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>        out.println("stat");<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>        out.flush();<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>        while (true) {<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>          String line = in.readLine();<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>          if (line != null) {<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>            res.add(line);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>          } else {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>            break;<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        }<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        return res.toArray(new String[res.size()]);<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>      }<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    }<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>  }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    if (!LOG.isTraceEnabled()) {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>      return;<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    }<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span><a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      " byte(s) of data from znode " + znode +<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>          znode.startsWith(zkw.znodePaths.metaZNodePrefix)?<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>            getServerNameOrEmptyString(data):<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>          znode.startsWith(zkw.znodePaths.backupMasterAddressesZNode)?<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>            getServerNameOrEmptyString(data):<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>  }<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    try {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    } catch (DeserializationException e) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>      return "";<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    }<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>  }<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span><a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>  /**<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>   * @throws IOException on ZK errors<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>   */<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>  public static void waitForBaseZNode(Configuration conf) throws IOException {<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    LOG.info("Waiting until the base znode is available");<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>    String parentZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>        HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>    ZooKeeper zk = new ZooKeeper(ZKConfig.getZKQuorumServersString(conf),<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>        conf.getInt(HConstants.ZK_SESSION_TIMEOUT,<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>        HConstants.DEFAULT_ZK_SESSION_TIMEOUT), EmptyWatcher.instance);<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span><a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final int maxTimeMs = 10000;<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span><a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>    KeeperException keeperEx = null;<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    try {<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      try {<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>        for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>          try {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>            if (zk.exists(parentZNode, false) != null) {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>              LOG.info("Parent znode exists: " + parentZNode);<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>              keeperEx = null;<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>              break;<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>            }<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          } catch (KeeperException e) {<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>            keeperEx = e;<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          }<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>          Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>        }<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>      } finally {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>        zk.close();<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>      }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    } catch (InterruptedException ex) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>      Thread.currentThread().interrupt();<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    if (keeperEx != null) {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>      throw new IOException(keeperEx);<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span><a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>  /**<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>   * Convert a {@link DeserializationException} to a more palatable {@link KeeperException}.<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>   * Used when can't let a {@link DeserializationException} out w/o changing public API.<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>   * @param e Exception to convert<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>   * @return Converted exception<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>   */<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>  public static KeeperException convert(final DeserializationException e) {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    KeeperException ke = new KeeperException.DataInconsistencyException();<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>    ke.initCause(e);<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>    return ke;<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>  }<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span><a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>  /**<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>   * Recursively print the current state of ZK (non-transactional)<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>   * @param root name of the root directory in zk to print<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>   */<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>  public static void logZKTree(ZKWatcher zkw, String root) {<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    if (!LOG.isDebugEnabled()) {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      return;<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    }<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span><a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>    LOG.debug("Current zk system:");<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>    String prefix = "|-";<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>    LOG.debug(prefix + root);<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    try {<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      logZKTree(zkw, root, prefix);<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>    } catch (KeeperException e) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      throw new RuntimeException(e);<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    }<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>  }<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span><a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>  /**<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>   * Helper method to print the current state of the ZK tree.<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * @see #logZKTree(ZKWatcher, String)<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * @throws KeeperException if an unexpected exception occurs<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   */<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>  protected static void logZKTree(ZKWatcher zkw, String root, String prefix)<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      throws KeeperException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, root);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span><a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>    if (children == null) {<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      return;<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>    }<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span><a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    for (String child : children) {<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>      LOG.debug(prefix + child);<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      String node = ZNodePaths.joinZNode(root.equals("/") ? "" : root, child);<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      logZKTree(zkw, node, prefix + "---");<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span><a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  /**<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>   * @param position the position to serialize<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>   * @return Serialized protobuf of &lt;code&gt;position&lt;/code&gt; with pb magic prefix prepended suitable<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>   *         for use as content of an wal position in a replication queue.<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>   */<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>  public static byte[] positionToByteArray(final long position) {<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>    byte[] bytes = ReplicationProtos.ReplicationHLogPosition.newBuilder().setPosition(position)<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>        .build().toByteArray();<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    return ProtobufUtil.prependPBMagic(bytes);<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>  }<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span><a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  /**<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>   * @param bytes - Content of a WAL position znode.<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>   * @return long - The current WAL position.<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>   * @throws DeserializationException if the WAL position cannot be parsed<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>   */<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>  public static long parseWALPositionFrom(final byte[] bytes) throws DeserializationException {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>    if (bytes == null) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      throw new DeserializationException("Unable to parse null WAL position.");<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>    }<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    if (ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      ReplicationProtos.ReplicationHLogPosition.Builder builder =<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          ReplicationProtos.ReplicationHLogPosition.newBuilder();<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>      ReplicationProtos.ReplicationHLogPosition position;<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>      try {<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        position = builder.build();<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      } catch (IOException e) {<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>        throw new DeserializationException(e);<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      return position.getPosition();<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    } else {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>      if (bytes.length &gt; 0) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>        return Bytes.toLong(bytes);<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>      return 0;<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  }<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>}<a name="line.2139"></a>
+<span class="sourceLineNo">1746</span>      for (String child : listChildrenNoWatch(zkw,<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>              zkw.getZNodePaths().backupMasterAddressesZNode)) {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        sb.append("\n ").append(child);<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>      }<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        + new MetaTableLocator().getMetaRegionLocation(zkw));<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>                    + new MetaTableLocator().getMetaRegionLocation(zkw, i));<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      }<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      sb.append("\nRegion servers:");<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      for (String child : listChildrenNoWatch(zkw, zkw.getZNodePaths().rsZNode)) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>        sb.append("\n ").append(child);<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>      }<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>      try {<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      } catch (KeeperException ke) {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>      for (String server : servers) {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>        sb.append("\n ").append(server);<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        try {<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>          if (stat == null) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>            break;<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>          }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span><a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          for (String s : stat) {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>            sb.append("\n  ").append(s);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          }<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>        } catch (Exception e) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        }<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>      }<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    } catch (KeeperException ke) {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      sb.append("\n" + ke.getMessage());<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>    }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    return sb.toString();<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  /**<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>   *<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>   */<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      throws KeeperException {<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>    String replicationZnode = zkw.getZNodePaths().replicationZNode;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span><a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>      return;<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    }<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span><a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // do a ls -r on this znode<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>    for (String child : children) {<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      String znode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>      if (znode.equals(zkw.getZNodePaths().peersZNode)) {<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>        appendPeersZnodes(zkw, znode, sb);<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>      } else if (znode.equals(zkw.getZNodePaths().queuesZNode)) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        appendRSZnodes(zkw, znode, sb);<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      } else if (znode.equals(zkw.getZNodePaths().hfileRefsZNode)) {<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>        appendHFileRefsZnodes(zkw, znode, sb);<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      }<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>    }<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>  }<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span><a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>  private static void appendHFileRefsZnodes(ZKWatcher zkw, String hfileRefsZnode,<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>    sb.append("\n").append(hfileRefsZnode).append(": ");<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, hfileRefsZnode)) {<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      String znodeToProcess = ZNodePaths.joinZNode(hfileRefsZnode, peerIdZnode);<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>      List&lt;String&gt; peerHFileRefsZnodes = ZKUtil.listChildrenNoWatch(zkw, znodeToProcess);<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>      int size = peerHFileRefsZnodes.size();<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>      for (int i = 0; i &lt; size; i++) {<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>        sb.append(peerHFileRefsZnodes.get(i));<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (i != size - 1) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          sb.append(", ");<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>      }<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    }<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>  }<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span><a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>  /**<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>   * @return aq string of replication znodes and log positions<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>   */<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>    StringBuilder sb = new StringBuilder();<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    return sb.toString();<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>  }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span><a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>      throws KeeperException {<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    stack.add(znode);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>    do {<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      byte[] data;<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      try {<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      } catch (InterruptedException e) {<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>        zkw.interruptedException(e);<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>        return;<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      }<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>        long position = 0;<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>        try {<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>          sb.append(position);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        } catch (DeserializationException ignored) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        } catch (InterruptedException e) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>          zkw.interruptedException(e);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>          return;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      }<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    } while (stack.size() &gt; 0);<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>  }<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span><a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>      byte[] data;<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>      try {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>      } catch (InterruptedException e) {<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>        zkw.interruptedException(e);<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>        return;<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>      }<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // parse the data of the above peer znode.<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      try {<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>        String clusterKey = builder.getClusterkey();<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        // add the peer-state.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>      } catch (IOException ipbe) {<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>      }<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>    }<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>  }<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span><a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      "peer-state");<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (!child.equals(peerState)) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        continue;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span><a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>      byte[] peerStateData;<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>      try {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        sb.append(builder.getState().name());<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>      } catch (IOException ipbe) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      } catch (InterruptedException e) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>        zkw.interruptedException(e);<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>    }<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>  }<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span><a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>  /**<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>   * Gets the statistics from the given server.<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>   *<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>   * @param server  The server to get the statistics from.<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>   * @param timeout  The socket timeout to use.<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>   * @return The array of response strings.<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>   * @throws IOException When the socket communication fails.<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   */<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>  public static String[] getServerStats(String server, int timeout)<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>    throws IOException {<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>    String[] sp = server.split(":");<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>    if (sp == null || sp.length == 0) {<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>      return null;<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>    }<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span><a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    String host = sp[0];<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span><a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    try (Socket socket = new Socket()) {<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>      socket.connect(sockAddr, timeout);<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span><a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>      socket.setSoTimeout(timeout);<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>          BufferedReader in = new BufferedReader(<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        out.println("stat");<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>        out.flush();<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>        while (true) {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>          String line = in.readLine();<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>          if (line != null) {<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            res.add(line);<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          } else {<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>            break;<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>          }<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>        }<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>        return res.toArray(new String[res.size()]);<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>      }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    }<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>  }<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>    if (!LOG.isTraceEnabled()) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      return;<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>    }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span><a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>      " byte(s) of data from znode " + znode +<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>          znode.startsWith(zkw.getZNodePaths().metaZNodePrefix)?<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>            getServerNameOrEmptyString(data):<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>          znode.startsWith(zkw.getZNodePaths().backupMasterAddressesZNode)?<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>            getServerNameOrEmptyString(data):<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>  }<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span><a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    try {<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>    } catch (DeserializationException e) {<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>      return "";<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    }<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>  }<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span><a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>  /**<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>   * @throws IOException on ZK errors<a name="lin

<TRUNCATED>

[12/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html
index d74aa78..bbbd959 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html
@@ -84,14 +84,14 @@
 <span class="sourceLineNo">076</span>  // Used if abortable is null<a name="line.76"></a>
 <span class="sourceLineNo">077</span>  private boolean aborted = false;<a name="line.77"></a>
 <span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public final ZNodePaths znodePaths;<a name="line.79"></a>
+<span class="sourceLineNo">079</span>  private final ZNodePaths znodePaths;<a name="line.79"></a>
 <span class="sourceLineNo">080</span><a name="line.80"></a>
 <span class="sourceLineNo">081</span>  // listeners to be notified<a name="line.81"></a>
 <span class="sourceLineNo">082</span>  private final List&lt;ZKListener&gt; listeners = new CopyOnWriteArrayList&lt;&gt;();<a name="line.82"></a>
 <span class="sourceLineNo">083</span><a name="line.83"></a>
 <span class="sourceLineNo">084</span>  // Used by ZKUtil:waitForZKConnectionIfAuthenticating to wait for SASL<a name="line.84"></a>
 <span class="sourceLineNo">085</span>  // negotiation to complete<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  public CountDownLatch saslLatch = new CountDownLatch(1);<a name="line.86"></a>
+<span class="sourceLineNo">086</span>  private CountDownLatch saslLatch = new CountDownLatch(1);<a name="line.86"></a>
 <span class="sourceLineNo">087</span><a name="line.87"></a>
 <span class="sourceLineNo">088</span>  private final Configuration conf;<a name="line.88"></a>
 <span class="sourceLineNo">089</span><a name="line.89"></a>
@@ -103,7 +103,7 @@
 <span class="sourceLineNo">095</span>   * @param identifier string that is passed to RecoverableZookeeper to be used as<a name="line.95"></a>
 <span class="sourceLineNo">096</span>   *                   identifier for this instance. Use null for default.<a name="line.96"></a>
 <span class="sourceLineNo">097</span>   * @throws IOException if the connection to ZooKeeper fails<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * @throws ZooKeeperConnectionException<a name="line.98"></a>
+<span class="sourceLineNo">098</span>   * @throws ZooKeeperConnectionException if the client can't connect to ZooKeeper<a name="line.98"></a>
 <span class="sourceLineNo">099</span>   */<a name="line.99"></a>
 <span class="sourceLineNo">100</span>  public ZKWatcher(Configuration conf, String identifier,<a name="line.100"></a>
 <span class="sourceLineNo">101</span>                   Abortable abortable) throws ZooKeeperConnectionException, IOException {<a name="line.101"></a>
@@ -119,11 +119,11 @@
 <span class="sourceLineNo">111</span>   *          context.<a name="line.111"></a>
 <span class="sourceLineNo">112</span>   * @param canCreateBaseZNode true if a base ZNode can be created<a name="line.112"></a>
 <span class="sourceLineNo">113</span>   * @throws IOException if the connection to ZooKeeper fails<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * @throws ZooKeeperConnectionException<a name="line.114"></a>
+<span class="sourceLineNo">114</span>   * @throws ZooKeeperConnectionException if the client can't connect to ZooKeeper<a name="line.114"></a>
 <span class="sourceLineNo">115</span>   */<a name="line.115"></a>
 <span class="sourceLineNo">116</span>  public ZKWatcher(Configuration conf, String identifier,<a name="line.116"></a>
 <span class="sourceLineNo">117</span>                   Abortable abortable, boolean canCreateBaseZNode)<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  throws IOException, ZooKeeperConnectionException {<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    throws IOException, ZooKeeperConnectionException {<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    this(conf, identifier, abortable, canCreateBaseZNode, false);<a name="line.119"></a>
 <span class="sourceLineNo">120</span>  }<a name="line.120"></a>
 <span class="sourceLineNo">121</span><a name="line.121"></a>
@@ -525,141 +525,143 @@
 <span class="sourceLineNo">517</span>        }<a name="line.517"></a>
 <span class="sourceLineNo">518</span>        break;<a name="line.518"></a>
 <span class="sourceLineNo">519</span>      }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>  }<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>  // Connection management<a name="line.523"></a>
+<span class="sourceLineNo">520</span>      default:<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        throw new IllegalStateException("Received event is not valid: " + event.getState());<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  }<a name="line.523"></a>
 <span class="sourceLineNo">524</span><a name="line.524"></a>
-<span class="sourceLineNo">525</span>  /**<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   * Called when there is a connection-related event via the Watcher callback.<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   * &lt;p&gt;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * If Disconnected or Expired, this should shutdown the cluster. But, since<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * we send a KeeperException.SessionExpiredException along with the abort<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * call, it's possible for the Abortable to catch it and try to create a new<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * session with ZooKeeper. This is what the client does in HCM.<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * &lt;p&gt;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * @param event the connection-related event<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   */<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  private void connectionEvent(WatchedEvent event) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    switch(event.getState()) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      case SyncConnected:<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        this.identifier = this.prefix + "-0x" +<a name="line.538"></a>
-<span class="sourceLineNo">539</span>          Long.toHexString(this.recoverableZooKeeper.getSessionId());<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        // Update our identifier.  Otherwise ignore.<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.debug(this.identifier + " connected");<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        break;<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>      // Abort the server if Disconnected or Expired<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      case Disconnected:<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        LOG.debug(prefix("Received Disconnected from ZooKeeper, ignoring"));<a name="line.546"></a>
-<span class="sourceLineNo">547</span>        break;<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>      case Expired:<a name="line.549"></a>
-<span class="sourceLineNo">550</span>        String msg = prefix(this.identifier + " received expired from " +<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          "ZooKeeper, aborting");<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        // TODO: One thought is to add call to ZKListener so say,<a name="line.552"></a>
-<span class="sourceLineNo">553</span>        // ZKNodeTracker can zero out its data values.<a name="line.553"></a>
-<span class="sourceLineNo">554</span>        if (this.abortable != null) {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>          this.abortable.abort(msg, new KeeperException.SessionExpiredException());<a name="line.555"></a>
-<span class="sourceLineNo">556</span>        }<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        break;<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>      case ConnectedReadOnly:<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      case SaslAuthenticated:<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      case AuthFailed:<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        break;<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>      default:<a name="line.564"></a>
-<span class="sourceLineNo">565</span>        throw new IllegalStateException("Received event is not valid: " + event.getState());<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    }<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>  /**<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   * Forces a synchronization of this ZooKeeper client connection.<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * &lt;p&gt;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   * Executing this method before running other methods will ensure that the<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   * subsequent operations are up-to-date and consistent as of the time that<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   * the sync is complete.<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * &lt;p&gt;<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * This is used for compareAndSwap type operations where we need to read the<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   * data of an existing node and delete or transition that node, utilizing the<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * previously read version and data.  We want to ensure that the version read<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * is up-to-date from when we begin the operation.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  public void sync(String path) throws KeeperException {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    this.recoverableZooKeeper.sync(path, null, null);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>  /**<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   * Handles KeeperExceptions in client calls.<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * &lt;p&gt;<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   * This may be temporary but for now this gives one place to deal with these.<a name="line.588"></a>
+<span class="sourceLineNo">525</span>  // Connection management<a name="line.525"></a>
+<span class="sourceLineNo">526</span><a name="line.526"></a>
+<span class="sourceLineNo">527</span>  /**<a name="line.527"></a>
+<span class="sourceLineNo">528</span>   * Called when there is a connection-related event via the Watcher callback.<a name="line.528"></a>
+<span class="sourceLineNo">529</span>   * &lt;p&gt;<a name="line.529"></a>
+<span class="sourceLineNo">530</span>   * If Disconnected or Expired, this should shutdown the cluster. But, since<a name="line.530"></a>
+<span class="sourceLineNo">531</span>   * we send a KeeperException.SessionExpiredException along with the abort<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   * call, it's possible for the Abortable to catch it and try to create a new<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   * session with ZooKeeper. This is what the client does in HCM.<a name="line.533"></a>
+<span class="sourceLineNo">534</span>   * &lt;p&gt;<a name="line.534"></a>
+<span class="sourceLineNo">535</span>   * @param event the connection-related event<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   */<a name="line.536"></a>
+<span class="sourceLineNo">537</span>  private void connectionEvent(WatchedEvent event) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    switch(event.getState()) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      case SyncConnected:<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        this.identifier = this.prefix + "-0x" +<a name="line.540"></a>
+<span class="sourceLineNo">541</span>          Long.toHexString(this.recoverableZooKeeper.getSessionId());<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        // Update our identifier.  Otherwise ignore.<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        LOG.debug(this.identifier + " connected");<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        break;<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>      // Abort the server if Disconnected or Expired<a name="line.546"></a>
+<span class="sourceLineNo">547</span>      case Disconnected:<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        LOG.debug(prefix("Received Disconnected from ZooKeeper, ignoring"));<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        break;<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>      case Expired:<a name="line.551"></a>
+<span class="sourceLineNo">552</span>        String msg = prefix(this.identifier + " received expired from " +<a name="line.552"></a>
+<span class="sourceLineNo">553</span>          "ZooKeeper, aborting");<a name="line.553"></a>
+<span class="sourceLineNo">554</span>        // TODO: One thought is to add call to ZKListener so say,<a name="line.554"></a>
+<span class="sourceLineNo">555</span>        // ZKNodeTracker can zero out its data values.<a name="line.555"></a>
+<span class="sourceLineNo">556</span>        if (this.abortable != null) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>          this.abortable.abort(msg, new KeeperException.SessionExpiredException());<a name="line.557"></a>
+<span class="sourceLineNo">558</span>        }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>        break;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>      case ConnectedReadOnly:<a name="line.561"></a>
+<span class="sourceLineNo">562</span>      case SaslAuthenticated:<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      case AuthFailed:<a name="line.563"></a>
+<span class="sourceLineNo">564</span>        break;<a name="line.564"></a>
+<span class="sourceLineNo">565</span><a name="line.565"></a>
+<span class="sourceLineNo">566</span>      default:<a name="line.566"></a>
+<span class="sourceLineNo">567</span>        throw new IllegalStateException("Received event is not valid: " + event.getState());<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    }<a name="line.568"></a>
+<span class="sourceLineNo">569</span>  }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span>  /**<a name="line.571"></a>
+<span class="sourceLineNo">572</span>   * Forces a synchronization of this ZooKeeper client connection.<a name="line.572"></a>
+<span class="sourceLineNo">573</span>   * &lt;p&gt;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>   * Executing this method before running other methods will ensure that the<a name="line.574"></a>
+<span class="sourceLineNo">575</span>   * subsequent operations are up-to-date and consistent as of the time that<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * the sync is complete.<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   * &lt;p&gt;<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * This is used for compareAndSwap type operations where we need to read the<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   * data of an existing node and delete or transition that node, utilizing the<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   * previously read version and data.  We want to ensure that the version read<a name="line.580"></a>
+<span class="sourceLineNo">581</span>   * is up-to-date from when we begin the operation.<a name="line.581"></a>
+<span class="sourceLineNo">582</span>   */<a name="line.582"></a>
+<span class="sourceLineNo">583</span>  public void sync(String path) throws KeeperException {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    this.recoverableZooKeeper.sync(path, null, null);<a name="line.584"></a>
+<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span>  /**<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * Handles KeeperExceptions in client calls.<a name="line.588"></a>
 <span class="sourceLineNo">589</span>   * &lt;p&gt;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>   * TODO: Currently this method rethrows the exception to let the caller handle<a name="line.590"></a>
+<span class="sourceLineNo">590</span>   * This may be temporary but for now this gives one place to deal with these.<a name="line.590"></a>
 <span class="sourceLineNo">591</span>   * &lt;p&gt;<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * @param ke the exception to rethrow<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   */<a name="line.594"></a>
-<span class="sourceLineNo">595</span>  public void keeperException(KeeperException ke) throws KeeperException {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    LOG.error(prefix("Received unexpected KeeperException, re-throwing exception"), ke);<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    throw ke;<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>  /**<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   * Handles InterruptedExceptions in client calls.<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * @param ie the InterruptedException instance thrown<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * @throws KeeperException the exception to throw, transformed from the InterruptedException<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
-<span class="sourceLineNo">605</span>  public void interruptedException(InterruptedException ie) throws KeeperException {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    interruptedExceptionNoThrow(ie, true);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    // Throw a system error exception to let upper level handle it<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    throw new KeeperException.SystemErrorException();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>  }<a name="line.609"></a>
-<span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span>  /**<a name="line.611"></a>
-<span class="sourceLineNo">612</span>   * Log the InterruptedException and interrupt current thread<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * @param ie The IterruptedException to log<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * @param throwLater Whether we will throw the exception latter<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   */<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  public void interruptedExceptionNoThrow(InterruptedException ie, boolean throwLater) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    LOG.debug(prefix("Received InterruptedException, will interrupt current thread"<a name="line.617"></a>
-<span class="sourceLineNo">618</span>        + (throwLater ? " and rethrow a SystemErrorException" : "")),<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      ie);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    // At least preserve interrupt.<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    Thread.currentThread().interrupt();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>  }<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>  /**<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * Close the connection to ZooKeeper.<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   *<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   */<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  @Override<a name="line.628"></a>
-<span class="sourceLineNo">629</span>  public void close() {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    try {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      recoverableZooKeeper.close();<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    } catch (InterruptedException e) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      Thread.currentThread().interrupt();<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    }<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  }<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>  public Configuration getConfiguration() {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    return conf;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>  }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>  @Override<a name="line.641"></a>
-<span class="sourceLineNo">642</span>  public void abort(String why, Throwable e) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    if (this.abortable != null) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      this.abortable.abort(why, e);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    } else {<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      this.aborted = true;<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>  }<a name="line.648"></a>
-<span class="sourceLineNo">649</span><a name="line.649"></a>
-<span class="sourceLineNo">650</span>  @Override<a name="line.650"></a>
-<span class="sourceLineNo">651</span>  public boolean isAborted() {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    return this.abortable == null? this.aborted: this.abortable.isAborted();<a name="line.652"></a>
-<span class="sourceLineNo">653</span>  }<a name="line.653"></a>
-<span class="sourceLineNo">654</span>}<a name="line.654"></a>
+<span class="sourceLineNo">592</span>   * TODO: Currently this method rethrows the exception to let the caller handle<a name="line.592"></a>
+<span class="sourceLineNo">593</span>   * &lt;p&gt;<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @param ke the exception to rethrow<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.595"></a>
+<span class="sourceLineNo">596</span>   */<a name="line.596"></a>
+<span class="sourceLineNo">597</span>  public void keeperException(KeeperException ke) throws KeeperException {<a name="line.597"></a>
+<span class="sourceLineNo">598</span>    LOG.error(prefix("Received unexpected KeeperException, re-throwing exception"), ke);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    throw ke;<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
+<span class="sourceLineNo">603</span>   * Handles InterruptedExceptions in client calls.<a name="line.603"></a>
+<span class="sourceLineNo">604</span>   * @param ie the InterruptedException instance thrown<a name="line.604"></a>
+<span class="sourceLineNo">605</span>   * @throws KeeperException the exception to throw, transformed from the InterruptedException<a name="line.605"></a>
+<span class="sourceLineNo">606</span>   */<a name="line.606"></a>
+<span class="sourceLineNo">607</span>  public void interruptedException(InterruptedException ie) throws KeeperException {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    interruptedExceptionNoThrow(ie, true);<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    // Throw a system error exception to let upper level handle it<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    throw new KeeperException.SystemErrorException();<a name="line.610"></a>
+<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
+<span class="sourceLineNo">612</span><a name="line.612"></a>
+<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
+<span class="sourceLineNo">614</span>   * Log the InterruptedException and interrupt current thread<a name="line.614"></a>
+<span class="sourceLineNo">615</span>   * @param ie The IterruptedException to log<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   * @param throwLater Whether we will throw the exception latter<a name="line.616"></a>
+<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
+<span class="sourceLineNo">618</span>  public void interruptedExceptionNoThrow(InterruptedException ie, boolean throwLater) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    LOG.debug(prefix("Received InterruptedException, will interrupt current thread"<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        + (throwLater ? " and rethrow a SystemErrorException" : "")),<a name="line.620"></a>
+<span class="sourceLineNo">621</span>      ie);<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    // At least preserve interrupt.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>    Thread.currentThread().interrupt();<a name="line.623"></a>
+<span class="sourceLineNo">624</span>  }<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>  /**<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   * Close the connection to ZooKeeper.<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   *<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   */<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  @Override<a name="line.630"></a>
+<span class="sourceLineNo">631</span>  public void close() {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    try {<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      recoverableZooKeeper.close();<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    } catch (InterruptedException e) {<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      Thread.currentThread().interrupt();<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
+<span class="sourceLineNo">637</span>  }<a name="line.637"></a>
+<span class="sourceLineNo">638</span><a name="line.638"></a>
+<span class="sourceLineNo">639</span>  public Configuration getConfiguration() {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>    return conf;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>  }<a name="line.641"></a>
+<span class="sourceLineNo">642</span><a name="line.642"></a>
+<span class="sourceLineNo">643</span>  @Override<a name="line.643"></a>
+<span class="sourceLineNo">644</span>  public void abort(String why, Throwable e) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>    if (this.abortable != null) {<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      this.abortable.abort(why, e);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>    } else {<a name="line.647"></a>
+<span class="sourceLineNo">648</span>      this.aborted = true;<a name="line.648"></a>
+<span class="sourceLineNo">649</span>    }<a name="line.649"></a>
+<span class="sourceLineNo">650</span>  }<a name="line.650"></a>
+<span class="sourceLineNo">651</span><a name="line.651"></a>
+<span class="sourceLineNo">652</span>  @Override<a name="line.652"></a>
+<span class="sourceLineNo">653</span>  public boolean isAborted() {<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    return this.abortable == null? this.aborted: this.abortable.isAborted();<a name="line.654"></a>
+<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
+<span class="sourceLineNo">656</span>}<a name="line.656"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index 585d6ee..2ff64e1 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="20180601" />
+    <meta name="Date-Revision-yyyymmdd" content="20180602" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase Downloads</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -366,7 +366,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-06-01</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-06-02</li>
             </p>
                 </div>
 

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index ef67c06..89592be 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="20180601" />
+    <meta name="Date-Revision-yyyymmdd" content="20180602" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -411,7 +411,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-06-01</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-06-02</li>
             </p>
                 </div>
 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index df2acfd..a5e68de 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="20180601" />
+    <meta name="Date-Revision-yyyymmdd" content="20180602" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -730,7 +730,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-06-01</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-06-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index c0a968c..576eff2 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -1130,7 +1130,7 @@
 <li><a href="org/apache/hadoop/hbase/http/TestGlobalFilter.RecordingFilter.Initializer.html" title="class in org.apache.hadoop.hbase.http" target="classFrame">TestGlobalFilter.RecordingFilter.Initializer</a></li>
 <li><a href="org/apache/hadoop/hbase/TestGlobalMemStoreSize.html" title="class in org.apache.hadoop.hbase" target="classFrame">TestGlobalMemStoreSize</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/TestGlobalQuotaSettingsImpl.html" title="class in org.apache.hadoop.hbase.quotas" target="classFrame">TestGlobalQuotaSettingsImpl</a></li>
-<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestGlobalThrottler</a></li>
+<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestGlobalReplicationThrottler</a></li>
 <li><a href="org/apache/hadoop/hbase/mapred/TestGroupingTableMap.html" title="class in org.apache.hadoop.hbase.mapred" target="classFrame">TestGroupingTableMap</a></li>
 <li><a href="org/apache/hadoop/hbase/mapreduce/TestGroupingTableMapper.html" title="class in org.apache.hadoop.hbase.mapreduce" target="classFrame">TestGroupingTableMapper</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/TestGzipFilter.html" title="class in org.apache.hadoop.hbase.rest" target="classFrame">TestGzipFilter</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index 3408603..0bb511d 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -1130,7 +1130,7 @@
 <li><a href="org/apache/hadoop/hbase/http/TestGlobalFilter.RecordingFilter.Initializer.html" title="class in org.apache.hadoop.hbase.http">TestGlobalFilter.RecordingFilter.Initializer</a></li>
 <li><a href="org/apache/hadoop/hbase/TestGlobalMemStoreSize.html" title="class in org.apache.hadoop.hbase">TestGlobalMemStoreSize</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/TestGlobalQuotaSettingsImpl.html" title="class in org.apache.hadoop.hbase.quotas">TestGlobalQuotaSettingsImpl</a></li>
-<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></li>
+<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></li>
 <li><a href="org/apache/hadoop/hbase/mapred/TestGroupingTableMap.html" title="class in org.apache.hadoop.hbase.mapred">TestGroupingTableMap</a></li>
 <li><a href="org/apache/hadoop/hbase/mapreduce/TestGroupingTableMapper.html" title="class in org.apache.hadoop.hbase.mapreduce">TestGroupingTableMapper</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/TestGzipFilter.html" title="class in org.apache.hadoop.hbase.rest">TestGzipFilter</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/constant-values.html b/testdevapidocs/constant-values.html
index 47425b3..ead06e5 100644
--- a/testdevapidocs/constant-values.html
+++ b/testdevapidocs/constant-values.html
@@ -10963,6 +10963,25 @@
 <ul class="blockList">
 <li class="blockList">
 <table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
+<caption><span>org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th scope="col">Constant Field</th>
+<th class="colLast" scope="col">Value</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.replication.regionserver.TestGlobalReplicationThrottler.REPLICATION_SOURCE_QUOTA">
+<!--   -->
+</a><code>private&nbsp;static&nbsp;final&nbsp;int</code></td>
+<td><code><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#REPLICATION_SOURCE_QUOTA">REPLICATION_SOURCE_QUOTA</a></code></td>
+<td class="colLast"><code>200</code></td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRegionReplicaReplicationEndpoint</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>


[07/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html
index fa90598..620c427 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html
@@ -87,8 +87,8 @@
 <span class="sourceLineNo">079</span>    ZKWatcher zk = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.79"></a>
 <span class="sourceLineNo">080</span>      "testActiveMasterManagerFromZK", null, true);<a name="line.80"></a>
 <span class="sourceLineNo">081</span>    try {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      ZKUtil.deleteNode(zk, zk.znodePaths.masterAddressZNode);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      ZKUtil.deleteNode(zk, zk.znodePaths.clusterStateZNode);<a name="line.83"></a>
+<span class="sourceLineNo">082</span>      ZKUtil.deleteNode(zk, zk.getZNodePaths().masterAddressZNode);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      ZKUtil.deleteNode(zk, zk.getZNodePaths().clusterStateZNode);<a name="line.83"></a>
 <span class="sourceLineNo">084</span>    } catch(KeeperException.NoNodeException nne) {}<a name="line.84"></a>
 <span class="sourceLineNo">085</span><a name="line.85"></a>
 <span class="sourceLineNo">086</span>    // Create the master node with a dummy address<a name="line.86"></a>
@@ -129,8 +129,8 @@
 <span class="sourceLineNo">121</span>    ZKWatcher zk = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.121"></a>
 <span class="sourceLineNo">122</span>      "testActiveMasterManagerFromZK", null, true);<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    try {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      ZKUtil.deleteNode(zk, zk.znodePaths.masterAddressZNode);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      ZKUtil.deleteNode(zk, zk.znodePaths.clusterStateZNode);<a name="line.125"></a>
+<span class="sourceLineNo">124</span>      ZKUtil.deleteNode(zk, zk.getZNodePaths().masterAddressZNode);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      ZKUtil.deleteNode(zk, zk.getZNodePaths().clusterStateZNode);<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    } catch(KeeperException.NoNodeException nne) {}<a name="line.126"></a>
 <span class="sourceLineNo">127</span><a name="line.127"></a>
 <span class="sourceLineNo">128</span>    // Create the master node with a dummy address<a name="line.128"></a>
@@ -175,195 +175,196 @@
 <span class="sourceLineNo">167</span>    ms1.stop("stopping first server");<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
 <span class="sourceLineNo">169</span>    // Use a listener to capture when the node is actually deleted<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    NodeDeletionListener listener = new NodeDeletionListener(zk, zk.znodePaths.masterAddressZNode);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    zk.registerListener(listener);<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>    LOG.info("Deleting master node");<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    ZKUtil.deleteNode(zk, zk.znodePaths.masterAddressZNode);<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    // Wait for the node to be deleted<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    LOG.info("Waiting for active master manager to be notified");<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    listener.waitForDeletion();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    LOG.info("Master node deleted");<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // Now we expect the secondary manager to have and be the active master<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    // Wait for 1 second at most<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    sleeps = 0;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    while(!t.isActiveMaster &amp;&amp; sleeps &lt; 100) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      Thread.sleep(10);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      sleeps++;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    LOG.debug("Slept " + sleeps + " times");<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>    assertTrue(t.manager.clusterHasActiveMaster.get());<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    assertTrue(t.isActiveMaster);<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    LOG.info("Deleting master node");<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    ZKUtil.deleteNode(zk, zk.znodePaths.masterAddressZNode);<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>  /**<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * Assert there is an active master and that it has the specified address.<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   * @param zk<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * @param thisMasterAddress<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * @throws KeeperException<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * @throws IOException<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  private void assertMaster(ZKWatcher zk,<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      ServerName expectedAddress)<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  throws KeeperException, IOException {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    ServerName readAddress = MasterAddressTracker.getMasterAddress(zk);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    assertNotNull(readAddress);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    assertTrue(expectedAddress.equals(readAddress));<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>  public static class WaitToBeMasterThread extends Thread {<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    ActiveMasterManager manager;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    DummyMaster dummyMaster;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    boolean isActiveMaster;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    public WaitToBeMasterThread(ZKWatcher zk, ServerName address) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      this.dummyMaster = new DummyMaster(zk,address);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      this.manager = this.dummyMaster.getActiveMasterManager();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      isActiveMaster = false;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    @Override<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public void run() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      manager.blockUntilBecomingActiveMaster(100,<a name="line.226"></a>
-<span class="sourceLineNo">227</span>          Mockito.mock(MonitoredTask.class));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      LOG.info("Second master has become the active master!");<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      isActiveMaster = true;<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>  public static class NodeDeletionListener extends ZKListener {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    private static final Logger LOG = LoggerFactory.getLogger(NodeDeletionListener.class);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>    private Semaphore lock;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    private String node;<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>    public NodeDeletionListener(ZKWatcher watcher, String node) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      super(watcher);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      lock = new Semaphore(0);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      this.node = node;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span>    @Override<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    public void nodeDeleted(String path) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      if(path.equals(node)) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        LOG.debug("nodeDeleted(" + path + ")");<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        lock.release();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    public void waitForDeletion() throws InterruptedException {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      lock.acquire();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * Dummy Master Implementation.<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  public static class DummyMaster implements Server {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    private volatile boolean stopped;<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private ClusterStatusTracker clusterStatusTracker;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    private ActiveMasterManager activeMasterManager;<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>    public DummyMaster(ZKWatcher zk, ServerName master) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      this.clusterStatusTracker =<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        new ClusterStatusTracker(zk, this);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      clusterStatusTracker.start();<a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span>      this.activeMasterManager =<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        new ActiveMasterManager(zk, master, this);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      zk.registerListener(activeMasterManager);<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 void abort(final String msg, final Throwable t) {}<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>    @Override<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    public boolean isAborted() {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      return false;<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>    @Override<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    public Configuration getConfiguration() {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      return null;<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>    @Override<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    public ZKWatcher getZooKeeper() {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      return null;<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>    @Override<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      return null;<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>    @Override<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    public ServerName getServerName() {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      return null;<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>    @Override<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    public boolean isStopped() {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      return this.stopped;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    }<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>    @Override<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    public void stop(String why) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      this.stopped = true;<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>    @Override<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    public ClusterConnection getConnection() {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      return null;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    @Override<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    public MetaTableLocator getMetaTableLocator() {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      return null;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    public ClusterStatusTracker getClusterStatusTracker() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      return clusterStatusTracker;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>    public ActiveMasterManager getActiveMasterManager() {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      return activeMasterManager;<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>    @Override<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    public ChoreService getChoreService() {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      return null;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>    @Override<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    public ClusterConnection getClusterConnection() {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      // TODO Auto-generated method stub<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      return null;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>    @Override<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public FileSystem getFileSystem() {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      return null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>    @Override<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    public boolean isStopping() {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      return false;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>    @Override<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    public Connection createConnection(Configuration conf) throws IOException {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      return null;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>}<a name="line.358"></a>
+<span class="sourceLineNo">170</span>    NodeDeletionListener listener = new NodeDeletionListener(zk,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>            zk.getZNodePaths().masterAddressZNode);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    zk.registerListener(listener);<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>    LOG.info("Deleting master node");<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    ZKUtil.deleteNode(zk, zk.getZNodePaths().masterAddressZNode);<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>    // Wait for the node to be deleted<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    LOG.info("Waiting for active master manager to be notified");<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    listener.waitForDeletion();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    LOG.info("Master node deleted");<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>    // Now we expect the secondary manager to have and be the active master<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    // Wait for 1 second at most<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    sleeps = 0;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    while(!t.isActiveMaster &amp;&amp; sleeps &lt; 100) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      Thread.sleep(10);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      sleeps++;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    LOG.debug("Slept " + sleeps + " times");<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    assertTrue(t.manager.clusterHasActiveMaster.get());<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    assertTrue(t.isActiveMaster);<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>    LOG.info("Deleting master node");<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    ZKUtil.deleteNode(zk, zk.getZNodePaths().masterAddressZNode);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>  /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * Assert there is an active master and that it has the specified address.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * @param zk<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * @param thisMasterAddress<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * @throws KeeperException<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * @throws IOException<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  private void assertMaster(ZKWatcher zk,<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      ServerName expectedAddress)<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  throws KeeperException, IOException {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    ServerName readAddress = MasterAddressTracker.getMasterAddress(zk);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    assertNotNull(readAddress);<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    assertTrue(expectedAddress.equals(readAddress));<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  public static class WaitToBeMasterThread extends Thread {<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    ActiveMasterManager manager;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    DummyMaster dummyMaster;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    boolean isActiveMaster;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>    public WaitToBeMasterThread(ZKWatcher zk, ServerName address) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      this.dummyMaster = new DummyMaster(zk,address);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      this.manager = this.dummyMaster.getActiveMasterManager();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      isActiveMaster = false;<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>    @Override<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    public void run() {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      manager.blockUntilBecomingActiveMaster(100,<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          Mockito.mock(MonitoredTask.class));<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      LOG.info("Second master has become the active master!");<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      isActiveMaster = true;<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><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  public static class NodeDeletionListener extends ZKListener {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    private static final Logger LOG = LoggerFactory.getLogger(NodeDeletionListener.class);<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>    private Semaphore lock;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    private String node;<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>    public NodeDeletionListener(ZKWatcher watcher, String node) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      super(watcher);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      lock = new Semaphore(0);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      this.node = node;<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>    @Override<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    public void nodeDeleted(String path) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if(path.equals(node)) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        LOG.debug("nodeDeleted(" + path + ")");<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        lock.release();<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>    public void waitForDeletion() throws InterruptedException {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      lock.acquire();<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>  /**<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * Dummy Master Implementation.<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   */<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  public static class DummyMaster implements Server {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    private volatile boolean stopped;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    private ClusterStatusTracker clusterStatusTracker;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    private ActiveMasterManager activeMasterManager;<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>    public DummyMaster(ZKWatcher zk, ServerName master) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      this.clusterStatusTracker =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        new ClusterStatusTracker(zk, this);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      clusterStatusTracker.start();<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>      this.activeMasterManager =<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        new ActiveMasterManager(zk, master, this);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      zk.registerListener(activeMasterManager);<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>    @Override<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    public void abort(final String msg, final Throwable t) {}<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>    @Override<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    public boolean isAborted() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      return false;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>    @Override<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public Configuration getConfiguration() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      return null;<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>    @Override<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    public ZKWatcher getZooKeeper() {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      return null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    @Override<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      return null;<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    }<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    public ServerName getServerName() {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      return null;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    public boolean isStopped() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      return this.stopped;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>    @Override<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    public void stop(String why) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      this.stopped = 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>    @Override<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    public ClusterConnection getConnection() {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      return null;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>    @Override<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    public MetaTableLocator getMetaTableLocator() {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return null;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    public ClusterStatusTracker getClusterStatusTracker() {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      return clusterStatusTracker;<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>    public ActiveMasterManager getActiveMasterManager() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      return activeMasterManager;<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>    @Override<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    public ChoreService getChoreService() {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      return null;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>    @Override<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    public ClusterConnection getClusterConnection() {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      // TODO Auto-generated method stub<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      return null;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    @Override<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    public FileSystem getFileSystem() {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      return null;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    public boolean isStopping() {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      return false;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>    @Override<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public Connection createConnection(Configuration conf) throws IOException {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      return null;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>}<a name="line.359"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.html
index fa90598..620c427 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.html
@@ -87,8 +87,8 @@
 <span class="sourceLineNo">079</span>    ZKWatcher zk = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.79"></a>
 <span class="sourceLineNo">080</span>      "testActiveMasterManagerFromZK", null, true);<a name="line.80"></a>
 <span class="sourceLineNo">081</span>    try {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      ZKUtil.deleteNode(zk, zk.znodePaths.masterAddressZNode);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      ZKUtil.deleteNode(zk, zk.znodePaths.clusterStateZNode);<a name="line.83"></a>
+<span class="sourceLineNo">082</span>      ZKUtil.deleteNode(zk, zk.getZNodePaths().masterAddressZNode);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      ZKUtil.deleteNode(zk, zk.getZNodePaths().clusterStateZNode);<a name="line.83"></a>
 <span class="sourceLineNo">084</span>    } catch(KeeperException.NoNodeException nne) {}<a name="line.84"></a>
 <span class="sourceLineNo">085</span><a name="line.85"></a>
 <span class="sourceLineNo">086</span>    // Create the master node with a dummy address<a name="line.86"></a>
@@ -129,8 +129,8 @@
 <span class="sourceLineNo">121</span>    ZKWatcher zk = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.121"></a>
 <span class="sourceLineNo">122</span>      "testActiveMasterManagerFromZK", null, true);<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    try {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      ZKUtil.deleteNode(zk, zk.znodePaths.masterAddressZNode);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      ZKUtil.deleteNode(zk, zk.znodePaths.clusterStateZNode);<a name="line.125"></a>
+<span class="sourceLineNo">124</span>      ZKUtil.deleteNode(zk, zk.getZNodePaths().masterAddressZNode);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      ZKUtil.deleteNode(zk, zk.getZNodePaths().clusterStateZNode);<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    } catch(KeeperException.NoNodeException nne) {}<a name="line.126"></a>
 <span class="sourceLineNo">127</span><a name="line.127"></a>
 <span class="sourceLineNo">128</span>    // Create the master node with a dummy address<a name="line.128"></a>
@@ -175,195 +175,196 @@
 <span class="sourceLineNo">167</span>    ms1.stop("stopping first server");<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
 <span class="sourceLineNo">169</span>    // Use a listener to capture when the node is actually deleted<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    NodeDeletionListener listener = new NodeDeletionListener(zk, zk.znodePaths.masterAddressZNode);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    zk.registerListener(listener);<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>    LOG.info("Deleting master node");<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    ZKUtil.deleteNode(zk, zk.znodePaths.masterAddressZNode);<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    // Wait for the node to be deleted<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    LOG.info("Waiting for active master manager to be notified");<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    listener.waitForDeletion();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    LOG.info("Master node deleted");<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // Now we expect the secondary manager to have and be the active master<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    // Wait for 1 second at most<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    sleeps = 0;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    while(!t.isActiveMaster &amp;&amp; sleeps &lt; 100) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      Thread.sleep(10);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      sleeps++;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    LOG.debug("Slept " + sleeps + " times");<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>    assertTrue(t.manager.clusterHasActiveMaster.get());<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    assertTrue(t.isActiveMaster);<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    LOG.info("Deleting master node");<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    ZKUtil.deleteNode(zk, zk.znodePaths.masterAddressZNode);<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>  /**<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * Assert there is an active master and that it has the specified address.<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   * @param zk<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * @param thisMasterAddress<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * @throws KeeperException<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * @throws IOException<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  private void assertMaster(ZKWatcher zk,<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      ServerName expectedAddress)<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  throws KeeperException, IOException {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    ServerName readAddress = MasterAddressTracker.getMasterAddress(zk);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    assertNotNull(readAddress);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    assertTrue(expectedAddress.equals(readAddress));<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>  public static class WaitToBeMasterThread extends Thread {<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    ActiveMasterManager manager;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    DummyMaster dummyMaster;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    boolean isActiveMaster;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    public WaitToBeMasterThread(ZKWatcher zk, ServerName address) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      this.dummyMaster = new DummyMaster(zk,address);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      this.manager = this.dummyMaster.getActiveMasterManager();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      isActiveMaster = false;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    @Override<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public void run() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      manager.blockUntilBecomingActiveMaster(100,<a name="line.226"></a>
-<span class="sourceLineNo">227</span>          Mockito.mock(MonitoredTask.class));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      LOG.info("Second master has become the active master!");<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      isActiveMaster = true;<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>  public static class NodeDeletionListener extends ZKListener {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    private static final Logger LOG = LoggerFactory.getLogger(NodeDeletionListener.class);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>    private Semaphore lock;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    private String node;<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>    public NodeDeletionListener(ZKWatcher watcher, String node) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      super(watcher);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      lock = new Semaphore(0);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      this.node = node;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span>    @Override<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    public void nodeDeleted(String path) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      if(path.equals(node)) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        LOG.debug("nodeDeleted(" + path + ")");<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        lock.release();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    public void waitForDeletion() throws InterruptedException {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      lock.acquire();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * Dummy Master Implementation.<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  public static class DummyMaster implements Server {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    private volatile boolean stopped;<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private ClusterStatusTracker clusterStatusTracker;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    private ActiveMasterManager activeMasterManager;<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>    public DummyMaster(ZKWatcher zk, ServerName master) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      this.clusterStatusTracker =<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        new ClusterStatusTracker(zk, this);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      clusterStatusTracker.start();<a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span>      this.activeMasterManager =<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        new ActiveMasterManager(zk, master, this);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      zk.registerListener(activeMasterManager);<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 void abort(final String msg, final Throwable t) {}<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>    @Override<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    public boolean isAborted() {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      return false;<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>    @Override<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    public Configuration getConfiguration() {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      return null;<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>    @Override<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    public ZKWatcher getZooKeeper() {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      return null;<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>    @Override<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      return null;<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>    @Override<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    public ServerName getServerName() {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      return null;<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>    @Override<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    public boolean isStopped() {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      return this.stopped;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    }<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>    @Override<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    public void stop(String why) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      this.stopped = true;<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>    @Override<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    public ClusterConnection getConnection() {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      return null;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    @Override<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    public MetaTableLocator getMetaTableLocator() {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      return null;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    public ClusterStatusTracker getClusterStatusTracker() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      return clusterStatusTracker;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>    public ActiveMasterManager getActiveMasterManager() {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      return activeMasterManager;<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>    @Override<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    public ChoreService getChoreService() {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      return null;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>    @Override<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    public ClusterConnection getClusterConnection() {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      // TODO Auto-generated method stub<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      return null;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>    @Override<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public FileSystem getFileSystem() {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      return null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>    @Override<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    public boolean isStopping() {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      return false;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>    @Override<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    public Connection createConnection(Configuration conf) throws IOException {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      return null;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>}<a name="line.358"></a>
+<span class="sourceLineNo">170</span>    NodeDeletionListener listener = new NodeDeletionListener(zk,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>            zk.getZNodePaths().masterAddressZNode);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    zk.registerListener(listener);<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>    LOG.info("Deleting master node");<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    ZKUtil.deleteNode(zk, zk.getZNodePaths().masterAddressZNode);<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>    // Wait for the node to be deleted<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    LOG.info("Waiting for active master manager to be notified");<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    listener.waitForDeletion();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    LOG.info("Master node deleted");<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>    // Now we expect the secondary manager to have and be the active master<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    // Wait for 1 second at most<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    sleeps = 0;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    while(!t.isActiveMaster &amp;&amp; sleeps &lt; 100) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      Thread.sleep(10);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      sleeps++;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    LOG.debug("Slept " + sleeps + " times");<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    assertTrue(t.manager.clusterHasActiveMaster.get());<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    assertTrue(t.isActiveMaster);<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>    LOG.info("Deleting master node");<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    ZKUtil.deleteNode(zk, zk.getZNodePaths().masterAddressZNode);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>  /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * Assert there is an active master and that it has the specified address.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * @param zk<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * @param thisMasterAddress<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * @throws KeeperException<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * @throws IOException<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  private void assertMaster(ZKWatcher zk,<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      ServerName expectedAddress)<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  throws KeeperException, IOException {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    ServerName readAddress = MasterAddressTracker.getMasterAddress(zk);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    assertNotNull(readAddress);<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    assertTrue(expectedAddress.equals(readAddress));<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  public static class WaitToBeMasterThread extends Thread {<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    ActiveMasterManager manager;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    DummyMaster dummyMaster;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    boolean isActiveMaster;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>    public WaitToBeMasterThread(ZKWatcher zk, ServerName address) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      this.dummyMaster = new DummyMaster(zk,address);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      this.manager = this.dummyMaster.getActiveMasterManager();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      isActiveMaster = false;<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>    @Override<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    public void run() {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      manager.blockUntilBecomingActiveMaster(100,<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          Mockito.mock(MonitoredTask.class));<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      LOG.info("Second master has become the active master!");<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      isActiveMaster = true;<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><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  public static class NodeDeletionListener extends ZKListener {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    private static final Logger LOG = LoggerFactory.getLogger(NodeDeletionListener.class);<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>    private Semaphore lock;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    private String node;<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>    public NodeDeletionListener(ZKWatcher watcher, String node) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      super(watcher);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      lock = new Semaphore(0);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      this.node = node;<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>    @Override<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    public void nodeDeleted(String path) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if(path.equals(node)) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        LOG.debug("nodeDeleted(" + path + ")");<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        lock.release();<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>    public void waitForDeletion() throws InterruptedException {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      lock.acquire();<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>  /**<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * Dummy Master Implementation.<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   */<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  public static class DummyMaster implements Server {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    private volatile boolean stopped;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    private ClusterStatusTracker clusterStatusTracker;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    private ActiveMasterManager activeMasterManager;<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>    public DummyMaster(ZKWatcher zk, ServerName master) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      this.clusterStatusTracker =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        new ClusterStatusTracker(zk, this);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      clusterStatusTracker.start();<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>      this.activeMasterManager =<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        new ActiveMasterManager(zk, master, this);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      zk.registerListener(activeMasterManager);<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>    @Override<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    public void abort(final String msg, final Throwable t) {}<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>    @Override<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    public boolean isAborted() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      return false;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>    @Override<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public Configuration getConfiguration() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      return null;<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>    @Override<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    public ZKWatcher getZooKeeper() {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      return null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    @Override<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      return null;<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    }<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    public ServerName getServerName() {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      return null;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    public boolean isStopped() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      return this.stopped;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>    @Override<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    public void stop(String why) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      this.stopped = 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>    @Override<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    public ClusterConnection getConnection() {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      return null;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>    @Override<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    public MetaTableLocator getMetaTableLocator() {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return null;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    public ClusterStatusTracker getClusterStatusTracker() {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      return clusterStatusTracker;<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>    public ActiveMasterManager getActiveMasterManager() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      return activeMasterManager;<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>    @Override<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    public ChoreService getChoreService() {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      return null;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>    @Override<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    public ClusterConnection getClusterConnection() {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      // TODO Auto-generated method stub<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      return null;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    @Override<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    public FileSystem getFileSystem() {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      return null;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    public boolean isStopping() {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      return false;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>    @Override<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public Connection createConnection(Configuration conf) throws IOException {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      return null;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>}<a name="line.359"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestHMasterRPCException.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestHMasterRPCException.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestHMasterRPCException.html
index 7018e55..b65786b 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestHMasterRPCException.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestHMasterRPCException.html
@@ -80,51 +80,52 @@
 <span class="sourceLineNo">072</span>    testUtil.startMiniZKCluster();<a name="line.72"></a>
 <span class="sourceLineNo">073</span><a name="line.73"></a>
 <span class="sourceLineNo">074</span>    ZKWatcher watcher = testUtil.getZooKeeperWatcher();<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    ZKUtil.createWithParents(watcher, watcher.znodePaths.masterAddressZNode, Bytes.toBytes("fake:123"));<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    master = new HMaster(conf);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    rpcClient = RpcClientFactory.createClient(conf, HConstants.CLUSTER_ID_DEFAULT);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  @After<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public void tearDown() throws IOException {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    if (rpcClient != null) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      rpcClient.close();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    if (master != null) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      master.stopMaster();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    testUtil.shutdownMiniZKCluster();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  @Test<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  public void testRPCException() throws IOException, InterruptedException, KeeperException {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    ServerName sm = master.getServerName();<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    boolean fakeZNodeDelete = false;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    for (int i = 0; i &lt; 20; i++) {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      try {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>        BlockingRpcChannel channel = rpcClient.createBlockingRpcChannel(sm, User.getCurrent(), 0);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        MasterProtos.MasterService.BlockingInterface stub =<a name="line.98"></a>
-<span class="sourceLineNo">099</span>            MasterProtos.MasterService.newBlockingStub(channel);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        assertTrue(stub.isMasterRunning(null, IsMasterRunningRequest.getDefaultInstance())<a name="line.100"></a>
-<span class="sourceLineNo">101</span>            .getIsMasterRunning());<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        return;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      } catch (ServiceException ex) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>        IOException ie = ProtobufUtil.handleRemoteException(ex);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        // No SocketTimeoutException here. RpcServer is already started after the construction of<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        // HMaster.<a name="line.106"></a>
-<span class="sourceLineNo">107</span>        assertTrue(ie.getMessage().startsWith(<a name="line.107"></a>
-<span class="sourceLineNo">108</span>          "org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet"));<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        LOG.info("Expected exception: ", ie);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        if (!fakeZNodeDelete) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>          testUtil.getZooKeeperWatcher().getRecoverableZooKeeper()<a name="line.111"></a>
-<span class="sourceLineNo">112</span>              .delete(testUtil.getZooKeeperWatcher().znodePaths.masterAddressZNode, -1);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>          fakeZNodeDelete = true;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      }<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      Thread.sleep(1000);<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>}<a name="line.119"></a>
+<span class="sourceLineNo">075</span>    ZKUtil.createWithParents(watcher, watcher.getZNodePaths().masterAddressZNode,<a name="line.75"></a>
+<span class="sourceLineNo">076</span>            Bytes.toBytes("fake:123"));<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    master = new HMaster(conf);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    rpcClient = RpcClientFactory.createClient(conf, HConstants.CLUSTER_ID_DEFAULT);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  @After<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  public void tearDown() throws IOException {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    if (rpcClient != null) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      rpcClient.close();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    }<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    if (master != null) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      master.stopMaster();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    }<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    testUtil.shutdownMiniZKCluster();<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Test<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public void testRPCException() throws IOException, InterruptedException, KeeperException {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    ServerName sm = master.getServerName();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    boolean fakeZNodeDelete = false;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    for (int i = 0; i &lt; 20; i++) {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      try {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        BlockingRpcChannel channel = rpcClient.createBlockingRpcChannel(sm, User.getCurrent(), 0);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>        MasterProtos.MasterService.BlockingInterface stub =<a name="line.99"></a>
+<span class="sourceLineNo">100</span>            MasterProtos.MasterService.newBlockingStub(channel);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        assertTrue(stub.isMasterRunning(null, IsMasterRunningRequest.getDefaultInstance())<a name="line.101"></a>
+<span class="sourceLineNo">102</span>            .getIsMasterRunning());<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        return;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      } catch (ServiceException ex) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        IOException ie = ProtobufUtil.handleRemoteException(ex);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        // No SocketTimeoutException here. RpcServer is already started after the construction of<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        // HMaster.<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        assertTrue(ie.getMessage().startsWith(<a name="line.108"></a>
+<span class="sourceLineNo">109</span>          "org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet"));<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        LOG.info("Expected exception: ", ie);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        if (!fakeZNodeDelete) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>          testUtil.getZooKeeperWatcher().getRecoverableZooKeeper()<a name="line.112"></a>
+<span class="sourceLineNo">113</span>              .delete(testUtil.getZooKeeperWatcher().getZNodePaths().masterAddressZNode, -1);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>          fakeZNodeDelete = true;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      Thread.sleep(1000);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    }<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMasterNoCluster.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMasterNoCluster.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMasterNoCluster.html
index f779e13..2077223 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMasterNoCluster.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMasterNoCluster.html
@@ -128,7 +128,7 @@
 <span class="sourceLineNo">120</span>        return 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>    ZKUtil.deleteNodeRecursively(zkw, zkw.znodePaths.baseZNode);<a name="line.123"></a>
+<span class="sourceLineNo">123</span>    ZKUtil.deleteNodeRecursively(zkw, zkw.getZNodePaths().baseZNode);<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    zkw.close();<a name="line.124"></a>
 <span class="sourceLineNo">125</span>  }<a name="line.125"></a>
 <span class="sourceLineNo">126</span><a name="line.126"></a>


[16/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html
index 6d59738..61e3cd8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html
@@ -116,20 +116,20 @@
 <span class="sourceLineNo">108</span>   * @throws IOException if unable to connect to zk or config problem<a name="line.108"></a>
 <span class="sourceLineNo">109</span>   */<a name="line.109"></a>
 <span class="sourceLineNo">110</span>  public static RecoverableZooKeeper connect(Configuration conf, Watcher watcher)<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  throws IOException {<a name="line.111"></a>
+<span class="sourceLineNo">111</span>    throws IOException {<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    String ensemble = ZKConfig.getZKQuorumServersString(conf);<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    return connect(conf, ensemble, watcher);<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>  public static RecoverableZooKeeper connect(Configuration conf, String ensemble,<a name="line.116"></a>
 <span class="sourceLineNo">117</span>      Watcher watcher)<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  throws IOException {<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    throws IOException {<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    return connect(conf, ensemble, watcher, null);<a name="line.119"></a>
 <span class="sourceLineNo">120</span>  }<a name="line.120"></a>
 <span class="sourceLineNo">121</span><a name="line.121"></a>
 <span class="sourceLineNo">122</span>  public static RecoverableZooKeeper connect(Configuration conf, String ensemble,<a name="line.122"></a>
 <span class="sourceLineNo">123</span>      Watcher watcher, final String identifier)<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  throws IOException {<a name="line.124"></a>
+<span class="sourceLineNo">124</span>    throws IOException {<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    if(ensemble == null) {<a name="line.125"></a>
 <span class="sourceLineNo">126</span>      throw new IOException("Unable to determine ZooKeeper ensemble");<a name="line.126"></a>
 <span class="sourceLineNo">127</span>    }<a name="line.127"></a>
@@ -355,7 +355,7 @@
 <span class="sourceLineNo">347</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.347"></a>
 <span class="sourceLineNo">348</span>   */<a name="line.348"></a>
 <span class="sourceLineNo">349</span>  public static boolean watchAndCheckExists(ZKWatcher zkw, String znode)<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  throws KeeperException {<a name="line.350"></a>
+<span class="sourceLineNo">350</span>    throws KeeperException {<a name="line.350"></a>
 <span class="sourceLineNo">351</span>    try {<a name="line.351"></a>
 <span class="sourceLineNo">352</span>      Stat s = zkw.getRecoverableZooKeeper().exists(znode, zkw);<a name="line.352"></a>
 <span class="sourceLineNo">353</span>      boolean exists = s != null ? true : false;<a name="line.353"></a>
@@ -409,7 +409,7 @@
 <span class="sourceLineNo">401</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.401"></a>
 <span class="sourceLineNo">402</span>   */<a name="line.402"></a>
 <span class="sourceLineNo">403</span>  public static int checkExists(ZKWatcher zkw, String znode)<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  throws KeeperException {<a name="line.404"></a>
+<span class="sourceLineNo">404</span>    throws KeeperException {<a name="line.404"></a>
 <span class="sourceLineNo">405</span>    try {<a name="line.405"></a>
 <span class="sourceLineNo">406</span>      Stat s = zkw.getRecoverableZooKeeper().exists(znode, null);<a name="line.406"></a>
 <span class="sourceLineNo">407</span>      return s != null ? s.getVersion() : -1;<a name="line.407"></a>
@@ -446,7 +446,7 @@
 <span class="sourceLineNo">438</span>   */<a name="line.438"></a>
 <span class="sourceLineNo">439</span>  public static List&lt;String&gt; listChildrenAndWatchForNewChildren(<a name="line.439"></a>
 <span class="sourceLineNo">440</span>          ZKWatcher zkw, String znode)<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  throws KeeperException {<a name="line.441"></a>
+<span class="sourceLineNo">441</span>    throws KeeperException {<a name="line.441"></a>
 <span class="sourceLineNo">442</span>    try {<a name="line.442"></a>
 <span class="sourceLineNo">443</span>      List&lt;String&gt; children = zkw.getRecoverableZooKeeper().getChildren(znode, zkw);<a name="line.443"></a>
 <span class="sourceLineNo">444</span>      return children;<a name="line.444"></a>
@@ -501,7 +501,7 @@
 <span class="sourceLineNo">493</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.493"></a>
 <span class="sourceLineNo">494</span>   */<a name="line.494"></a>
 <span class="sourceLineNo">495</span>  public static List&lt;String&gt; listChildrenNoWatch(ZKWatcher zkw, String znode)<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  throws KeeperException {<a name="line.496"></a>
+<span class="sourceLineNo">496</span>    throws KeeperException {<a name="line.496"></a>
 <span class="sourceLineNo">497</span>    List&lt;String&gt; children = null;<a name="line.497"></a>
 <span class="sourceLineNo">498</span>    try {<a name="line.498"></a>
 <span class="sourceLineNo">499</span>      // List the children without watching<a name="line.499"></a>
@@ -558,7 +558,7 @@
 <span class="sourceLineNo">550</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.550"></a>
 <span class="sourceLineNo">551</span>   */<a name="line.551"></a>
 <span class="sourceLineNo">552</span>  public static boolean nodeHasChildren(ZKWatcher zkw, String znode)<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  throws KeeperException {<a name="line.553"></a>
+<span class="sourceLineNo">553</span>    throws KeeperException {<a name="line.553"></a>
 <span class="sourceLineNo">554</span>    try {<a name="line.554"></a>
 <span class="sourceLineNo">555</span>      return !zkw.getRecoverableZooKeeper().getChildren(znode, null).isEmpty();<a name="line.555"></a>
 <span class="sourceLineNo">556</span>    } catch(KeeperException.NoNodeException ke) {<a name="line.556"></a>
@@ -590,7 +590,7 @@
 <span class="sourceLineNo">582</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.582"></a>
 <span class="sourceLineNo">583</span>   */<a name="line.583"></a>
 <span class="sourceLineNo">584</span>  public static int getNumberOfChildren(ZKWatcher zkw, String znode)<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  throws KeeperException {<a name="line.585"></a>
+<span class="sourceLineNo">585</span>    throws KeeperException {<a name="line.585"></a>
 <span class="sourceLineNo">586</span>    try {<a name="line.586"></a>
 <span class="sourceLineNo">587</span>      Stat stat = zkw.getRecoverableZooKeeper().exists(znode, null);<a name="line.587"></a>
 <span class="sourceLineNo">588</span>      return stat == null ? 0 : stat.getNumChildren();<a name="line.588"></a>
@@ -641,7 +641,7 @@
 <span class="sourceLineNo">633</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.633"></a>
 <span class="sourceLineNo">634</span>   */<a name="line.634"></a>
 <span class="sourceLineNo">635</span>  public static byte [] getDataAndWatch(ZKWatcher zkw, String znode)<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  throws KeeperException {<a name="line.636"></a>
+<span class="sourceLineNo">636</span>    throws KeeperException {<a name="line.636"></a>
 <span class="sourceLineNo">637</span>    return getDataInternal(zkw, znode, null, true);<a name="line.637"></a>
 <span class="sourceLineNo">638</span>  }<a name="line.638"></a>
 <span class="sourceLineNo">639</span><a name="line.639"></a>
@@ -703,7 +703,7 @@
 <span class="sourceLineNo">695</span>   */<a name="line.695"></a>
 <span class="sourceLineNo">696</span>  public static byte [] getDataNoWatch(ZKWatcher zkw, String znode,<a name="line.696"></a>
 <span class="sourceLineNo">697</span>                                       Stat stat)<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  throws KeeperException {<a name="line.698"></a>
+<span class="sourceLineNo">698</span>    throws KeeperException {<a name="line.698"></a>
 <span class="sourceLineNo">699</span>    try {<a name="line.699"></a>
 <span class="sourceLineNo">700</span>      byte [] data = zkw.getRecoverableZooKeeper().getData(znode, null, stat);<a name="line.700"></a>
 <span class="sourceLineNo">701</span>      logRetrievedMsg(zkw, znode, data, false);<a name="line.701"></a>
@@ -809,7 +809,7 @@
 <span class="sourceLineNo">801</span>   */<a name="line.801"></a>
 <span class="sourceLineNo">802</span>  public static boolean setData(ZKWatcher zkw, String znode,<a name="line.802"></a>
 <span class="sourceLineNo">803</span>                                byte [] data, int expectedVersion)<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.804"></a>
+<span class="sourceLineNo">804</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.804"></a>
 <span class="sourceLineNo">805</span>    try {<a name="line.805"></a>
 <span class="sourceLineNo">806</span>      return zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion) != null;<a name="line.806"></a>
 <span class="sourceLineNo">807</span>    } catch (InterruptedException e) {<a name="line.807"></a>
@@ -853,12 +853,12 @@
 <span class="sourceLineNo">845</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.845"></a>
 <span class="sourceLineNo">846</span>   */<a name="line.846"></a>
 <span class="sourceLineNo">847</span>  public static void setData(ZKWatcher zkw, String znode, byte [] data)<a name="line.847"></a>
-<span class="sourceLineNo">848</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.848"></a>
+<span class="sourceLineNo">848</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.848"></a>
 <span class="sourceLineNo">849</span>    setData(zkw, (SetData)ZKUtilOp.setData(znode, data));<a name="line.849"></a>
 <span class="sourceLineNo">850</span>  }<a name="line.850"></a>
 <span class="sourceLineNo">851</span><a name="line.851"></a>
 <span class="sourceLineNo">852</span>  private static void setData(ZKWatcher zkw, SetData setData)<a name="line.852"></a>
-<span class="sourceLineNo">853</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.853"></a>
+<span class="sourceLineNo">853</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.853"></a>
 <span class="sourceLineNo">854</span>    SetDataRequest sd = (SetDataRequest)toZooKeeperOp(zkw, setData).toRequestRecord();<a name="line.854"></a>
 <span class="sourceLineNo">855</span>    setData(zkw, sd.getPath(), sd.getData(), sd.getVersion());<a name="line.855"></a>
 <span class="sourceLineNo">856</span>  }<a name="line.856"></a>
@@ -899,7 +899,7 @@
 <span class="sourceLineNo">891</span><a name="line.891"></a>
 <span class="sourceLineNo">892</span>  public static ArrayList&lt;ACL&gt; createACL(ZKWatcher zkw, String node,<a name="line.892"></a>
 <span class="sourceLineNo">893</span>                                         boolean isSecureZooKeeper) {<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    if (!node.startsWith(zkw.znodePaths.baseZNode)) {<a name="line.894"></a>
+<span class="sourceLineNo">894</span>    if (!node.startsWith(zkw.getZNodePaths().baseZNode)) {<a name="line.894"></a>
 <span class="sourceLineNo">895</span>      return Ids.OPEN_ACL_UNSAFE;<a name="line.895"></a>
 <span class="sourceLineNo">896</span>    }<a name="line.896"></a>
 <span class="sourceLineNo">897</span>    if (isSecureZooKeeper) {<a name="line.897"></a>
@@ -931,7 +931,7 @@
 <span class="sourceLineNo">923</span>      }<a name="line.923"></a>
 <span class="sourceLineNo">924</span>      // Certain znodes are accessed directly by the client,<a name="line.924"></a>
 <span class="sourceLineNo">925</span>      // so they must be readable by non-authenticated clients<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      if (zkw.znodePaths.isClientReadable(node)) {<a name="line.926"></a>
+<span class="sourceLineNo">926</span>      if (zkw.getZNodePaths().isClientReadable(node)) {<a name="line.926"></a>
 <span class="sourceLineNo">927</span>        acls.addAll(Ids.CREATOR_ALL_ACL);<a name="line.927"></a>
 <span class="sourceLineNo">928</span>        acls.addAll(Ids.READ_ACL_UNSAFE);<a name="line.928"></a>
 <span class="sourceLineNo">929</span>      } else {<a name="line.929"></a>
@@ -967,7 +967,7 @@
 <span class="sourceLineNo">959</span>   */<a name="line.959"></a>
 <span class="sourceLineNo">960</span>  public static boolean createEphemeralNodeAndWatch(ZKWatcher zkw,<a name="line.960"></a>
 <span class="sourceLineNo">961</span>      String znode, byte [] data)<a name="line.961"></a>
-<span class="sourceLineNo">962</span>  throws KeeperException {<a name="line.962"></a>
+<span class="sourceLineNo">962</span>    throws KeeperException {<a name="line.962"></a>
 <span class="sourceLineNo">963</span>    boolean ret = true;<a name="line.963"></a>
 <span class="sourceLineNo">964</span>    try {<a name="line.964"></a>
 <span class="sourceLineNo">965</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.965"></a>
@@ -1007,7 +1007,7 @@
 <span class="sourceLineNo">999</span>   */<a name="line.999"></a>
 <span class="sourceLineNo">1000</span>  public static boolean createNodeIfNotExistsAndWatch(<a name="line.1000"></a>
 <span class="sourceLineNo">1001</span>          ZKWatcher zkw, String znode, byte [] data)<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>  throws KeeperException {<a name="line.1002"></a>
+<span class="sourceLineNo">1002</span>    throws KeeperException {<a name="line.1002"></a>
 <span class="sourceLineNo">1003</span>    boolean ret = true;<a name="line.1003"></a>
 <span class="sourceLineNo">1004</span>    try {<a name="line.1004"></a>
 <span class="sourceLineNo">1005</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1005"></a>
@@ -1074,7 +1074,7 @@
 <span class="sourceLineNo">1066</span>   */<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>  public static int createAndWatch(ZKWatcher zkw,<a name="line.1067"></a>
 <span class="sourceLineNo">1068</span>      String znode, byte [] data)<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>  throws KeeperException, KeeperException.NodeExistsException {<a name="line.1069"></a>
+<span class="sourceLineNo">1069</span>    throws KeeperException, KeeperException.NodeExistsException {<a name="line.1069"></a>
 <span class="sourceLineNo">1070</span>    try {<a name="line.1070"></a>
 <span class="sourceLineNo">1071</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1071"></a>
 <span class="sourceLineNo">1072</span>          CreateMode.PERSISTENT);<a name="line.1072"></a>
@@ -1140,13 +1140,13 @@
 <span class="sourceLineNo">1132</span>   */<a name="line.1132"></a>
 <span class="sourceLineNo">1133</span>  public static void createAndFailSilent(ZKWatcher zkw,<a name="line.1133"></a>
 <span class="sourceLineNo">1134</span>      String znode, byte[] data)<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>  throws KeeperException {<a name="line.1135"></a>
+<span class="sourceLineNo">1135</span>    throws KeeperException {<a name="line.1135"></a>
 <span class="sourceLineNo">1136</span>    createAndFailSilent(zkw,<a name="line.1136"></a>
 <span class="sourceLineNo">1137</span>        (CreateAndFailSilent)ZKUtilOp.createAndFailSilent(znode, data));<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>  }<a name="line.1138"></a>
 <span class="sourceLineNo">1139</span><a name="line.1139"></a>
 <span class="sourceLineNo">1140</span>  private static void createAndFailSilent(ZKWatcher zkw, CreateAndFailSilent cafs)<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>  throws KeeperException {<a name="line.1141"></a>
+<span class="sourceLineNo">1141</span>    throws KeeperException {<a name="line.1141"></a>
 <span class="sourceLineNo">1142</span>    CreateRequest create = (CreateRequest)toZooKeeperOp(zkw, cafs).toRequestRecord();<a name="line.1142"></a>
 <span class="sourceLineNo">1143</span>    String znode = create.getPath();<a name="line.1143"></a>
 <span class="sourceLineNo">1144</span>    try {<a name="line.1144"></a>
@@ -1181,7 +1181,7 @@
 <span class="sourceLineNo">1173</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1173"></a>
 <span class="sourceLineNo">1174</span>   */<a name="line.1174"></a>
 <span class="sourceLineNo">1175</span>  public static void createWithParents(ZKWatcher zkw, String znode)<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>  throws KeeperException {<a name="line.1176"></a>
+<span class="sourceLineNo">1176</span>    throws KeeperException {<a name="line.1176"></a>
 <span class="sourceLineNo">1177</span>    createWithParents(zkw, znode, new byte[0]);<a name="line.1177"></a>
 <span class="sourceLineNo">1178</span>  }<a name="line.1178"></a>
 <span class="sourceLineNo">1179</span><a name="line.1179"></a>
@@ -1199,7 +1199,7 @@
 <span class="sourceLineNo">1191</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1191"></a>
 <span class="sourceLineNo">1192</span>   */<a name="line.1192"></a>
 <span class="sourceLineNo">1193</span>  public static void createWithParents(ZKWatcher zkw, String znode, byte[] data)<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>  throws KeeperException {<a name="line.1194"></a>
+<span class="sourceLineNo">1194</span>    throws KeeperException {<a name="line.1194"></a>
 <span class="sourceLineNo">1195</span>    try {<a name="line.1195"></a>
 <span class="sourceLineNo">1196</span>      if(znode == null) {<a name="line.1196"></a>
 <span class="sourceLineNo">1197</span>        return;<a name="line.1197"></a>
@@ -1224,7 +1224,7 @@
 <span class="sourceLineNo">1216</span>   * Delete the specified node.  Sets no watches.  Throws all exceptions.<a name="line.1216"></a>
 <span class="sourceLineNo">1217</span>   */<a name="line.1217"></a>
 <span class="sourceLineNo">1218</span>  public static void deleteNode(ZKWatcher zkw, String node)<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  throws KeeperException {<a name="line.1219"></a>
+<span class="sourceLineNo">1219</span>    throws KeeperException {<a name="line.1219"></a>
 <span class="sourceLineNo">1220</span>    deleteNode(zkw, node, -1);<a name="line.1220"></a>
 <span class="sourceLineNo">1221</span>  }<a name="line.1221"></a>
 <span class="sourceLineNo">1222</span><a name="line.1222"></a>
@@ -1234,7 +1234,7 @@
 <span class="sourceLineNo">1226</span>   */<a name="line.1226"></a>
 <span class="sourceLineNo">1227</span>  public static boolean deleteNode(ZKWatcher zkw, String node,<a name="line.1227"></a>
 <span class="sourceLineNo">1228</span>                                   int version)<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>  throws KeeperException {<a name="line.1229"></a>
+<span class="sourceLineNo">1229</span>    throws KeeperException {<a name="line.1229"></a>
 <span class="sourceLineNo">1230</span>    try {<a name="line.1230"></a>
 <span class="sourceLineNo">1231</span>      zkw.getRecoverableZooKeeper().delete(node, version);<a name="line.1231"></a>
 <span class="sourceLineNo">1232</span>      return true;<a name="line.1232"></a>
@@ -1254,7 +1254,7 @@
 <span class="sourceLineNo">1246</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1246"></a>
 <span class="sourceLineNo">1247</span>   */<a name="line.1247"></a>
 <span class="sourceLineNo">1248</span>  public static void deleteNodeFailSilent(ZKWatcher zkw, String node)<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>  throws KeeperException {<a name="line.1249"></a>
+<span class="sourceLineNo">1249</span>    throws KeeperException {<a name="line.1249"></a>
 <span class="sourceLineNo">1250</span>    deleteNodeFailSilent(zkw,<a name="line.1250"></a>
 <span class="sourceLineNo">1251</span>      (DeleteNodeFailSilent)ZKUtilOp.deleteNodeFailSilent(node));<a name="line.1251"></a>
 <span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
@@ -1280,7 +1280,7 @@
 <span class="sourceLineNo">1272</span>   * children.<a name="line.1272"></a>
 <span class="sourceLineNo">1273</span>   */<a name="line.1273"></a>
 <span class="sourceLineNo">1274</span>  public static void deleteNodeRecursively(ZKWatcher zkw, String node)<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>  throws KeeperException {<a name="line.1275"></a>
+<span class="sourceLineNo">1275</span>    throws KeeperException {<a name="line.1275"></a>
 <span class="sourceLineNo">1276</span>    deleteNodeRecursivelyMultiOrSequential(zkw, true, node);<a name="line.1276"></a>
 <span class="sourceLineNo">1277</span>  }<a name="line.1277"></a>
 <span class="sourceLineNo">1278</span><a name="line.1278"></a>
@@ -1743,7 +1743,7 @@
 <span class="sourceLineNo">1735</span>  public static String dump(ZKWatcher zkw) {<a name="line.1735"></a>
 <span class="sourceLineNo">1736</span>    StringBuilder sb = new StringBuilder();<a name="line.1736"></a>
 <span class="sourceLineNo">1737</span>    try {<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>      sb.append("HBase is rooted at ").append(zkw.znodePaths.baseZNode);<a name="line.1738"></a>
+<span class="sourceLineNo">1738</span>      sb.append("HBase is rooted at ").append(zkw.getZNodePaths().baseZNode);<a name="line.1738"></a>
 <span class="sourceLineNo">1739</span>      sb.append("\nActive master address: ");<a name="line.1739"></a>
 <span class="sourceLineNo">1740</span>      try {<a name="line.1740"></a>
 <span class="sourceLineNo">1741</span>        sb.append(MasterAddressTracker.getMasterAddress(zkw));<a name="line.1741"></a>
@@ -1751,400 +1751,401 @@
 <span class="sourceLineNo">1743</span>        sb.append("&lt;&lt;FAILED LOOKUP: " + e.getMessage() + "&gt;&gt;");<a name="line.1743"></a>
 <span class="sourceLineNo">1744</span>      }<a name="line.1744"></a>
 <span class="sourceLineNo">1745</span>      sb.append("\nBackup master addresses:");<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      for (String child : listChildrenNoWatch(zkw, zkw.znodePaths.backupMasterAddressesZNode)) {<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        sb.append("\n ").append(child);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      }<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        + new MetaTableLocator().getMetaRegionLocation(zkw));<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>                    + new MetaTableLocator().getMetaRegionLocation(zkw, i));<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      }<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      sb.append("\nRegion servers:");<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>      for (String child : listChildrenNoWatch(zkw, zkw.znodePaths.rsZNode)) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        sb.append("\n ").append(child);<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      try {<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      } catch (KeeperException ke) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>      }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>      for (String server : servers) {<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>        sb.append("\n ").append(server);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        try {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          if (stat == null) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>            break;<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>          }<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span><a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>          for (String s : stat) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            sb.append("\n  ").append(s);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>          }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>        } catch (Exception e) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>        }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    } catch (KeeperException ke) {<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      sb.append("\n" + ke.getMessage());<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    return sb.toString();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>  }<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span><a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>  /**<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>   *<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>   */<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>      throws KeeperException {<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    String replicationZnode = zkw.znodePaths.replicationZNode;<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span><a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>      return;<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>    }<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span><a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>    // do a ls -r on this znode<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    for (String child : children) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      String znode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (znode.equals(zkw.znodePaths.peersZNode)) {<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>        appendPeersZnodes(zkw, znode, sb);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      } else if (znode.equals(zkw.znodePaths.queuesZNode)) {<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        appendRSZnodes(zkw, znode, sb);<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      } else if (znode.equals(zkw.znodePaths.hfileRefsZNode)) {<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>        appendHFileRefsZnodes(zkw, znode, sb);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>      }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>    }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>  }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span><a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>  private static void appendHFileRefsZnodes(ZKWatcher zkw, String hfileRefsZnode,<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    sb.append("\n").append(hfileRefsZnode).append(": ");<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, hfileRefsZnode)) {<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      String znodeToProcess = ZNodePaths.joinZNode(hfileRefsZnode, peerIdZnode);<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>      List&lt;String&gt; peerHFileRefsZnodes = ZKUtil.listChildrenNoWatch(zkw, znodeToProcess);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      int size = peerHFileRefsZnodes.size();<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      for (int i = 0; i &lt; size; i++) {<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        sb.append(peerHFileRefsZnodes.get(i));<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        if (i != size - 1) {<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          sb.append(", ");<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>        }<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>      }<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    }<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>  }<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span><a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>  /**<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>   * @return aq string of replication znodes and log positions<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>   */<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>    StringBuilder sb = new StringBuilder();<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>    return sb.toString();<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>  }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span><a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>      throws KeeperException {<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>    stack.add(znode);<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>    do {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      byte[] data;<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      try {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      } catch (InterruptedException e) {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>        zkw.interruptedException(e);<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>        return;<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      }<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        long position = 0;<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        try {<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>          sb.append(position);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        } catch (DeserializationException ignored) {<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>        } catch (InterruptedException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>          zkw.interruptedException(e);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>          return;<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>        }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>      }<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>    } while (stack.size() &gt; 0);<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>  }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span><a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      byte[] data;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>      try {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      } catch (InterruptedException e) {<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>        zkw.interruptedException(e);<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        return;<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>      }<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>      // parse the data of the above peer znode.<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      try {<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>        String clusterKey = builder.getClusterkey();<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        // add the peer-state.<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>      } catch (IOException ipbe) {<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>  }<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span><a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      "peer-state");<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>      if (!child.equals(peerState)) {<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>        continue;<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span><a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      byte[] peerStateData;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>      try {<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>        sb.append(builder.getState().name());<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      } catch (IOException ipbe) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      } catch (InterruptedException e) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>        zkw.interruptedException(e);<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>        return;<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  }<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span><a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>  /**<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>   * Gets the statistics from the given server.<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>   *<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * @param server  The server to get the statistics from.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param timeout  The socket timeout to use.<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @return The array of response strings.<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   * @throws IOException When the socket communication fails.<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>   */<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>  public static String[] getServerStats(String server, int timeout)<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>  throws IOException {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    String[] sp = server.split(":");<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    if (sp == null || sp.length == 0) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>      return null;<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    }<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span><a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>    String host = sp[0];<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span><a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    try (Socket socket = new Socket()) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      socket.connect(sockAddr, timeout);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span><a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      socket.setSoTimeout(timeout);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          BufferedReader in = new BufferedReader(<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>        out.println("stat");<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>        out.flush();<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>        while (true) {<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>          String line = in.readLine();<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>          if (line != null) {<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>            res.add(line);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>          } else {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>            break;<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        }<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        return res.toArray(new String[res.size()]);<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>      }<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    }<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>  }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    if (!LOG.isTraceEnabled()) {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>      return;<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    }<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span><a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      " byte(s) of data from znode " + znode +<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>          znode.startsWith(zkw.znodePaths.metaZNodePrefix)?<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>            getServerNameOrEmptyString(data):<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>          znode.startsWith(zkw.znodePaths.backupMasterAddressesZNode)?<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>            getServerNameOrEmptyString(data):<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>  }<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    try {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    } catch (DeserializationException e) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>      return "";<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    }<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>  }<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span><a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>  /**<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>   * @throws IOException on ZK errors<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>   */<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>  public static void waitForBaseZNode(Configuration conf) throws IOException {<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    LOG.info("Waiting until the base znode is available");<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>    String parentZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>        HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>    ZooKeeper zk = new ZooKeeper(ZKConfig.getZKQuorumServersString(conf),<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>        conf.getInt(HConstants.ZK_SESSION_TIMEOUT,<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>        HConstants.DEFAULT_ZK_SESSION_TIMEOUT), EmptyWatcher.instance);<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span><a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final int maxTimeMs = 10000;<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span><a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>    KeeperException keeperEx = null;<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    try {<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      try {<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>        for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>          try {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>            if (zk.exists(parentZNode, false) != null) {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>              LOG.info("Parent znode exists: " + parentZNode);<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>              keeperEx = null;<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>              break;<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>            }<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          } catch (KeeperException e) {<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>            keeperEx = e;<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          }<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>          Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>        }<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>      } finally {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>        zk.close();<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>      }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    } catch (InterruptedException ex) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>      Thread.currentThread().interrupt();<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    if (keeperEx != null) {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>      throw new IOException(keeperEx);<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span><a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>  /**<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>   * Convert a {@link DeserializationException} to a more palatable {@link KeeperException}.<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>   * Used when can't let a {@link DeserializationException} out w/o changing public API.<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>   * @param e Exception to convert<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>   * @return Converted exception<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>   */<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>  public static KeeperException convert(final DeserializationException e) {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    KeeperException ke = new KeeperException.DataInconsistencyException();<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>    ke.initCause(e);<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>    return ke;<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>  }<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span><a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>  /**<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>   * Recursively print the current state of ZK (non-transactional)<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>   * @param root name of the root directory in zk to print<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>   */<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>  public static void logZKTree(ZKWatcher zkw, String root) {<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    if (!LOG.isDebugEnabled()) {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      return;<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    }<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span><a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>    LOG.debug("Current zk system:");<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>    String prefix = "|-";<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>    LOG.debug(prefix + root);<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    try {<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      logZKTree(zkw, root, prefix);<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>    } catch (KeeperException e) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      throw new RuntimeException(e);<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    }<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>  }<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span><a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>  /**<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>   * Helper method to print the current state of the ZK tree.<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * @see #logZKTree(ZKWatcher, String)<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * @throws KeeperException if an unexpected exception occurs<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   */<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>  protected static void logZKTree(ZKWatcher zkw, String root, String prefix)<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      throws KeeperException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, root);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span><a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>    if (children == null) {<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      return;<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>    }<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span><a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    for (String child : children) {<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>      LOG.debug(prefix + child);<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      String node = ZNodePaths.joinZNode(root.equals("/") ? "" : root, child);<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      logZKTree(zkw, node, prefix + "---");<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span><a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  /**<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>   * @param position the position to serialize<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>   * @return Serialized protobuf of &lt;code&gt;position&lt;/code&gt; with pb magic prefix prepended suitable<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>   *         for use as content of an wal position in a replication queue.<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>   */<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>  public static byte[] positionToByteArray(final long position) {<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>    byte[] bytes = ReplicationProtos.ReplicationHLogPosition.newBuilder().setPosition(position)<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>        .build().toByteArray();<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    return ProtobufUtil.prependPBMagic(bytes);<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>  }<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span><a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  /**<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>   * @param bytes - Content of a WAL position znode.<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>   * @return long - The current WAL position.<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>   * @throws DeserializationException if the WAL position cannot be parsed<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>   */<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>  public static long parseWALPositionFrom(final byte[] bytes) throws DeserializationException {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>    if (bytes == null) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      throw new DeserializationException("Unable to parse null WAL position.");<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>    }<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    if (ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      ReplicationProtos.ReplicationHLogPosition.Builder builder =<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          ReplicationProtos.ReplicationHLogPosition.newBuilder();<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>      ReplicationProtos.ReplicationHLogPosition position;<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>      try {<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        position = builder.build();<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      } catch (IOException e) {<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>        throw new DeserializationException(e);<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      return position.getPosition();<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    } else {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>      if (bytes.length &gt; 0) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>        return Bytes.toLong(bytes);<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>      return 0;<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  }<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>}<a name="line.2139"></a>
+<span class="sourceLineNo">1746</span>      for (String child : listChildrenNoWatch(zkw,<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>              zkw.getZNodePaths().backupMasterAddressesZNode)) {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        sb.append("\n ").append(child);<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>      }<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        + new MetaTableLocator().getMetaRegionLocation(zkw));<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>                    + new MetaTableLocator().getMetaRegionLocation(zkw, i));<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      }<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      sb.append("\nRegion servers:");<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      for (String child : listChildrenNoWatch(zkw, zkw.getZNodePaths().rsZNode)) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>        sb.append("\n ").append(child);<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>      }<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>      try {<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      } catch (KeeperException ke) {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>      for (String server : servers) {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>        sb.append("\n ").append(server);<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        try {<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>          if (stat == null) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>            break;<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>          }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span><a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          for (String s : stat) {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>            sb.append("\n  ").append(s);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          }<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>        } catch (Exception e) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        }<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>      }<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    } catch (KeeperException ke) {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      sb.append("\n" + ke.getMessage());<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>    }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    return sb.toString();<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  /**<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>   *<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>   */<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      throws KeeperException {<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>    String replicationZnode = zkw.getZNodePaths().replicationZNode;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span><a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>      return;<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    }<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span><a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // do a ls -r on this znode<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>    for (String child : children) {<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      String znode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>      if (znode.equals(zkw.getZNodePaths().peersZNode)) {<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>        appendPeersZnodes(zkw, znode, sb);<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>      } else if (znode.equals(zkw.getZNodePaths().queuesZNode)) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        appendRSZnodes(zkw, znode, sb);<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      } else if (znode.equals(zkw.getZNodePaths().hfileRefsZNode)) {<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>        appendHFileRefsZnodes(zkw, znode, sb);<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      }<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>    }<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>  }<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span><a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>  private static void appendHFileRefsZnodes(ZKWatcher zkw, String hfileRefsZnode,<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>    sb.append("\n").append(hfileRefsZnode).append(": ");<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, hfileRefsZnode)) {<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      String znodeToProcess = ZNodePaths.joinZNode(hfileRefsZnode, peerIdZnode);<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>      List&lt;String&gt; peerHFileRefsZnodes = ZKUtil.listChildrenNoWatch(zkw, znodeToProcess);<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>      int size = peerHFileRefsZnodes.size();<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>      for (int i = 0; i &lt; size; i++) {<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>        sb.append(peerHFileRefsZnodes.get(i));<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (i != size - 1) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          sb.append(", ");<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>      }<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    }<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>  }<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span><a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>  /**<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>   * @return aq string of replication znodes and log positions<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>   */<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>    StringBuilder sb = new StringBuilder();<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    return sb.toString();<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>  }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span><a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>      throws KeeperException {<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    stack.add(znode);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>    do {<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      byte[] data;<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      try {<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      } catch (InterruptedException e) {<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>        zkw.interruptedException(e);<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>        return;<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      }<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>        long position = 0;<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>        try {<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>          sb.append(position);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        } catch (DeserializationException ignored) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        } catch (InterruptedException e) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>          zkw.interruptedException(e);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>          return;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      }<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    } while (stack.size() &gt; 0);<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>  }<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span><a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>      byte[] data;<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>      try {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>      } catch (InterruptedException e) {<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>        zkw.interruptedException(e);<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>        return;<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>      }<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // parse the data of the above peer znode.<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      try {<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>        String clusterKey = builder.getClusterkey();<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        // add the peer-state.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>      } catch (IOException ipbe) {<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>      }<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>    }<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>  }<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span><a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      "peer-state");<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (!child.equals(peerState)) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        continue;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span><a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>      byte[] peerStateData;<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>      try {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        sb.append(builder.getState().name());<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>      } catch (IOException ipbe) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      } catch (InterruptedException e) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>        zkw.interruptedException(e);<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>    }<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>  }<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span><a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>  /**<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>   * Gets the statistics from the given server.<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>   *<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>   * @param server  The server to get the statistics from.<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>   * @param timeout  The socket timeout to use.<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>   * @return The array of response strings.<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>   * @throws IOException When the socket communication fails.<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   */<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>  public static String[] getServerStats(String server, int timeout)<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>    throws IOException {<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>    String[] sp = server.split(":");<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>    if (sp == null || sp.length == 0) {<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>      return null;<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>    }<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span><a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    String host = sp[0];<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span><a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    try (Socket socket = new Socket()) {<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>      socket.connect(sockAddr, timeout);<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span><a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>      socket.setSoTimeout(timeout);<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>          BufferedReader in = new BufferedReader(<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        out.println("stat");<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>        out.flush();<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>        while (true) {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>          String line = in.readLine();<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>          if (line != null) {<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            res.add(line);<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          } else {<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>            break;<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>          }<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>        }<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>        return res.toArray(new String[res.size()]);<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>      }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    }<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>  }<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>    if (!LOG.isTraceEnabled()) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      return;<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>    }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span><a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>      " byte(s) of data from znode " + znode +<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>          znode.startsWith(zkw.getZNodePaths().metaZNodePrefix)?<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>            getServerNameOrEmptyString(data):<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>          znode.startsWith(zkw.getZNodePaths().backupMasterAddressesZNode)?<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>            getServerNameOrEmptyString(data):<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>  }<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span><a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    try {<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>    } catch (DeserializationException e) {<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>      return "";<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    }<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>  }<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span><a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>  /**<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>   * Waits for HBase installation's base (parent) znode to become available.<a name=

<TRUNCATED>

[41/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 4ad1078..064c3e5 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="20180601" />
+    <meta name="Date-Revision-yyyymmdd" content="20180602" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -281,10 +281,10 @@
 <th><img src="images/icon_warning_sml.gif" alt="" />&#160;Warnings</th>
 <th><img src="images/icon_error_sml.gif" alt="" />&#160;Errors</th></tr>
 <tr class="b">
-<td>3619</td>
+<td>3620</td>
 <td>0</td>
 <td>0</td>
-<td>16325</td></tr></table></div>
+<td>16262</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -4844,3135 +4844,3135 @@
 <td>0</td>
 <td>1</td></tr>
 <tr class="b">
-<td><a href="#org.apache.hadoop.hbase.master.TestHMasterRPCException.java">org/apache/hadoop/hbase/master/TestHMasterRPCException.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>1</td></tr>
-<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TestMaster.java">org/apache/hadoop/hbase/master/TestMaster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TestMasterFailoverBalancerPersistence.java">org/apache/hadoop/hbase/master/TestMasterFailoverBalancerPersistence.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TestMasterFileSystem.java">org/apache/hadoop/hbase/master/TestMasterFileSystem.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TestMasterFileSystemWithWALDir.java">org/apache/hadoop/hbase/master/TestMasterFileSystemWithWALDir.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TestMasterMetrics.java">org/apache/hadoop/hbase/master/TestMasterMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TestMasterMetricsWrapper.java">org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TestMasterNoCluster.java">org/apache/hadoop/hbase/master/TestMasterNoCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TestMasterOperationsForRegionReplicas.java">org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TestMasterStatusServlet.java">org/apache/hadoop/hbase/master/TestMasterStatusServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TestMasterTransitions.java">org/apache/hadoop/hbase/master/TestMasterTransitions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TestMirroringTableStateManager.java">org/apache/hadoop/hbase/master/TestMirroringTableStateManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TestRegionPlacement.java">org/apache/hadoop/hbase/master/TestRegionPlacement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TestRegionPlacement2.java">org/apache/hadoop/hbase/master/TestRegionPlacement2.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TestRollingRestart.java">org/apache/hadoop/hbase/master/TestRollingRestart.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TestSplitLogManager.java">org/apache/hadoop/hbase/master/TestSplitLogManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TestTableStateManager.java">org/apache/hadoop/hbase/master/TestTableStateManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TestWarmupRegion.java">org/apache/hadoop/hbase/master/TestWarmupRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.AssignProcedure.java">org/apache/hadoop/hbase/master/assignment/AssignProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.AssignmentManager.java">org/apache/hadoop/hbase/master/assignment/AssignmentManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>34</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.GCMergedRegionsProcedure.java">org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.GCRegionProcedure.java">org/apache/hadoop/hbase/master/assignment/GCRegionProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>32</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure.java">org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.MockMasterServices.java">org/apache/hadoop/hbase/master/assignment/MockMasterServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.MoveRegionProcedure.java">org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.RegionStateStore.java">org/apache/hadoop/hbase/master/assignment/RegionStateStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.RegionStates.java">org/apache/hadoop/hbase/master/assignment/RegionStates.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>26</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.RegionTransitionProcedure.java">org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.java">org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.TestAssignmentManager.java">org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.TestAssignmentOnRSCrash.java">org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.TestRegionStates.java">org/apache/hadoop/hbase/master/assignment/TestRegionStates.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.TestSplitTableRegionProcedure.java">org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.TestUnexpectedStateException.java">org/apache/hadoop/hbase/master/assignment/TestUnexpectedStateException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.UnassignProcedure.java">org/apache/hadoop/hbase/master/assignment/UnassignProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.Util.java">org/apache/hadoop/hbase/master/assignment/Util.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.BalancerChore.java">org/apache/hadoop/hbase/master/balancer/BalancerChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.BalancerTestBase.java">org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>75</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>60</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.ClusterLoadState.java">org/apache/hadoop/hbase/master/balancer/ClusterLoadState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.ClusterStatusChore.java">org/apache/hadoop/hbase/master/balancer/ClusterStatusChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.FavoredStochasticBalancer.java">org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory.java">org/apache/hadoop/hbase/master/balancer/LoadBalancerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.LoadBalancerPerformanceEvaluation.java">org/apache/hadoop/hbase/master/balancer/LoadBalancerPerformanceEvaluation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.RegionInfoComparator.java">org/apache/hadoop/hbase/master/balancer/RegionInfoComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.RegionLocationFinder.java">org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.ServerAndLoad.java">org/apache/hadoop/hbase/master/balancer/ServerAndLoad.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.SimpleLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>33</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.StochasticLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>32</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.TestBaseLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.TestDefaultLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/TestDefaultLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>48</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.TestFavoredNodeTableImport.java">org/apache/hadoop/hbase/master/balancer/TestFavoredNodeTableImport.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.TestFavoredStochasticBalancerPickers.java">org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.TestRegionsOnMasterOptions.java">org/apache/hadoop/hbase/master/balancer/TestRegionsOnMasterOptions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.TestServerAndLoad.java">org/apache/hadoop/hbase/master/balancer/TestServerAndLoad.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.TestStochasticLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>33</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.BaseFileCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.BaseLogCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/BaseLogCleanerDelegate.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.CleanerChore.java">org/apache/hadoop/hbase/master/cleaner/CleanerChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.FileCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.HFileLinkCleaner.java">org/apache/hadoop/hbase/master/cleaner/HFileLinkCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.TestCleanerChore.java">org/apache/hadoop/hbase/master/cleaner/TestCleanerChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.TestHFileCleaner.java">org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.TestHFileLinkCleaner.java">org/apache/hadoop/hbase/master/cleaner/TestHFileLinkCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.TestSnapshotFromMaster.java">org/apache/hadoop/hbase/master/cleaner/TestSnapshotFromMaster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.TimeToLiveHFileCleaner.java">org/apache/hadoop/hbase/master/cleaner/TimeToLiveHFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.TimeToLiveLogCleaner.java">org/apache/hadoop/hbase/master/cleaner/TimeToLiveLogCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.locking.LockManager.java">org/apache/hadoop/hbase/master/locking/LockManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.locking.LockProcedure.java">org/apache/hadoop/hbase/master/locking/LockProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.normalizer.EmptyNormalizationPlan.java">org/apache/hadoop/hbase/master/normalizer/EmptyNormalizationPlan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.java">org/apache/hadoop/hbase/master/normalizer/NormalizationPlan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore.java">org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory.java">org/apache/hadoop/hbase/master/normalizer/RegionNormalizerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.normalizer.TestSimpleRegionNormalizerOnCluster.java">org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizerOnCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.AbstractStateMachineNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/AbstractStateMachineNamespaceProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.AbstractStateMachineRegionProcedure.java">org/apache/hadoop/hbase/master/procedure/AbstractStateMachineRegionProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.AbstractStateMachineTableProcedure.java">org/apache/hadoop/hbase/master/procedure/AbstractStateMachineTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.CloneSnapshotProcedure.java">org/apache/hadoop/hbase/master/procedure/CloneSnapshotProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.CreateNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>31</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.CreateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/DeleteNamespaceProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>34</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure.java">org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.DisableTableProcedure.java">org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.EnableTableProcedure.java">org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>72</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.MasterProcedureSchedulerPerformanceEvaluation.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.MasterProcedureTestingUtility.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ModifyNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/ModifyNamespaceProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>21</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure.java">org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>47</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ProcedureDescriber.java">org/apache/hadoop/hbase/master/procedure/ProcedureDescriber.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch.java">org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait.java">org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>47</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure.java">org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.RestoreSnapshotProcedure.java">org/apache/hadoop/hbase/master/procedure/RestoreSnapshotProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure.java">org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestCreateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestDeleteColumnFamilyProcedureFromClient.java">org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedureFromClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestDeleteNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/TestDeleteNamespaceProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestMasterObserverPostCalls.java">org/apache/hadoop/hbase/master/procedure/TestMasterObserverPostCalls.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestMasterProcedureEvents.java">org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestMasterProcedureScheduler.java">org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestMasterProcedureSchedulerConcurrency.java">org/apache/hadoop/hbase/master/procedure/TestMasterProcedureSchedulerConcurrency.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestMasterProcedureWalLease.java">org/apache/hadoop/hbase/master/procedure/TestMasterProcedureWalLease.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestRecoverMetaProcedure.java">org/apache/hadoop/hbase/master/procedure/TestRecoverMetaProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestSafemodeBringsDownMaster.java">org/apache/hadoop/hbase/master/procedure/TestSafemodeBringsDownMaster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestServerCrashProcedure.java">org/apache/hadoop/hbase/master/procedure/TestServerCrashProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestTableDDLProcedureBase.java">org/apache/hadoop/hbase/master/procedure/TestTableDDLProcedureBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestTableDescriptorModificationFromClient.java">org/apache/hadoop/hbase/master/procedure/TestTableDescriptorModificationFromClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestWALProcedureStoreOnHDFS.java">org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.EnabledTableSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.MasterSnapshotVerifier.java">org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache.java">org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotHFileCleaner.java">org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotManager.java">org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.TakeSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.TestAssignProcedure.java">org/apache/hadoop/hbase/master/snapshot/TestAssignProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.TestSnapshotHFileCleaner.java">org/apache/hadoop/hbase/master/snapshot/TestSnapshotHFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.TestSnapshotManager.java">org/apache/hadoop/hbase/master/snapshot/TestSnapshotManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.CachedMobFile.java">org/apache/hadoop/hbase/mob/CachedMobFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.DefaultMobStoreCompactor.java">org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.DefaultMobStoreFlusher.java">org/apache/hadoop/hbase/mob/DefaultMobStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.ExpiredMobFileCleaner.java">org/apache/hadoop/hbase/mob/ExpiredMobFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.MobCacheConfig.java">org/apache/hadoop/hbase/mob/MobCacheConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.MobConstants.java">org/apache/hadoop/hbase/mob/MobConstants.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.MobFile.java">org/apache/hadoop/hbase/mob/MobFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.MobFileCache.java">org/apache/hadoop/hbase/mob/MobFileCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.MobFileName.java">org/apache/hadoop/hbase/mob/MobFileName.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.MobTestUtil.java">org/apache/hadoop/hbase/mob/MobTestUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.MobUtils.java">org/apache/hadoop/hbase/mob/MobUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.TestDefaultMobStoreFlusher.java">org/apache/hadoop/hbase/mob/TestDefaultMobStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>35</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.TestExpiredMobFileCleaner.java">org/apache/hadoop/hbase/mob/TestExpiredMobFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.compactions.MobCompactor.java">org/apache/hadoop/hbase/mob/compactions/MobCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.compactions.PartitionedMobCompactionRequest.java">org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactionRequest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.compactions.PartitionedMobCompactor.java">org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.compactions.TestMobCompactor.java">org/apache/hadoop/hbase/mob/compactions/TestMobCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.compactions.TestPartitionedMobCompactor.java">org/apache/hadoop/hbase/mob/compactions/TestPartitionedMobCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.LogMonitoring.java">org/apache/hadoop/hbase/monitoring/LogMonitoring.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer.java">org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.MonitoredRPCHandlerImpl.java">org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.MonitoredTaskImpl.java">org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.StateDumpServlet.java">org/apache/hadoop/hbase/monitoring/StateDumpServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.TaskMonitor.java">org/apache/hadoop/hbase/monitoring/TaskMonitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.TestTaskMonitor.java">org/apache/hadoop/hbase/monitoring/TestTaskMonitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.ThreadMonitoring.java">org/apache/hadoop/hbase/monitoring/ThreadMonitoring.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mttr.IntegrationTestMTTR.java">org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.namespace.NamespaceStateManager.java">org/apache/hadoop/hbase/namespace/NamespaceStateManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.namespace.NamespaceTableAndRegionInfo.java">org/apache/hadoop/hbase/namespace/NamespaceTableAndRegionInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.namespace.TestNamespaceAuditor.java">org/apache/hadoop/hbase/namespace/TestNamespaceAuditor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.net.Address.java">org/apache/hadoop/hbase/net/Address.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.net.TestAddress.java">org/apache/hadoop/hbase/net/TestAddress.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.nio.ByteBuff.java">org/apache/hadoop/hbase/nio/ByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>24</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.nio.MultiByteBuff.java">org/apache/hadoop/hbase/nio/MultiByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.nio.SingleByteBuff.java">org/apache/hadoop/hbase/nio/SingleByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.MasterProcedureManager.java">org/apache/hadoop/hbase/procedure/MasterProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.Procedure.java">org/apache/hadoop/hbase/procedure/Procedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureCoordinatorRpcs.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinatorRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureManagerHost.java">org/apache/hadoop/hbase/procedure/ProcedureManagerHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureMember.java">org/apache/hadoop/hbase/procedure/ProcedureMember.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureMemberRpcs.java">org/apache/hadoop/hbase/procedure/ProcedureMemberRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.RegionServerProcedureManager.java">org/apache/hadoop/hbase/procedure/RegionServerProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.SimpleMasterProcedureManager.java">org/apache/hadoop/hbase/procedure/SimpleMasterProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.SimpleRSProcedureManager.java">org/apache/hadoop/hbase/procedure/SimpleRSProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.Subprocedure.java">org/apache/hadoop/hbase/procedure/Subprocedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.TestProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/TestProcedureCoordinator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.TestProcedureDescriber.java">org/apache/hadoop/hbase/procedure/TestProcedureDescriber.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.TestProcedureMember.java">org/apache/hadoop/hbase/procedure/TestProcedureMember.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.TestZKProcedure.java">org/apache/hadoop/hbase/procedure/TestZKProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.TestZKProcedureControllers.java">org/apache/hadoop/hbase/procedure/TestZKProcedureControllers.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/ZKProcedureCoordinator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureMemberRpcs.java">org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureUtil.java">org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.flush.FlushTableSubprocedure.java">org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager.java">org/apache/hadoop/hbase/procedure/flush/MasterFlushTableProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.flush.RegionServerFlushTableProcedureManager.java">org/apache/hadoop/hbase/procedure/flush/RegionServerFlushTableProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.AbstractProcedureScheduler.java">org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.BadProcedureException.java">org/apache/hadoop/hbase/procedure2/BadProcedureException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.LockAndQueue.java">org/apache/hadoop/hbase/procedure2/LockAndQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.LockedResource.java">org/apache/hadoop/hbase/procedure2/LockedResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.Procedure.java">org/apache/hadoop/hbase/procedure2/Procedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureDeque.java">org/apache/hadoop/hbase/procedure2/ProcedureDeque.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureException.java">org/apache/hadoop/hbase/procedure2/ProcedureException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.java">org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureScheduler.java">org/apache/hadoop/hbase/procedure2/ProcedureScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.java">org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureUtil.java">org/apache/hadoop/hbase/procedure2/ProcedureUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.RemoteProcedureException.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.RootProcedureState.java">org/apache/hadoop/hbase/procedure2/RootProcedureState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.StateMachineProcedure.java">org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureExecution.java">org/apache/hadoop/hbase/procedure2/TestProcedureExecution.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureExecutor.java">org/apache/hadoop/hbase/procedure2/TestProcedureExecutor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureMetrics.java">org/apache/hadoop/hbase/procedure2/TestProcedureMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureNonce.java">org/apache/hadoop/hbase/procedure2/TestProcedureNonce.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureRecovery.java">org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureReplayOrder.java">org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureSchedulerConcurrency.java">org/apache/hadoop/hbase/procedure2/TestProcedureSchedulerConcurrency.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureSuspended.java">org/apache/hadoop/hbase/procedure2/TestProcedureSuspended.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureToString.java">org/apache/hadoop/hbase/procedure2/TestProcedureToString.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestStateMachineProcedure.java">org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestYieldProcedures.java">org/apache/hadoop/hbase/procedure2/TestYieldProcedures.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.ProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.ProcedureStoreBase.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.TestProcedureStoreTracker.java">org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFile.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALLoaderPerformanceEvaluation.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALPerformanceEvaluation.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPerformanceEvaluation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALPrettyPrinter.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.TestStressWALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/TestStressWALProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.TestWALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.util.DelayedUtil.java">org/apache/hadoop/hbase/procedure2/util/DelayedUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.util.StringUtils.java">org/apache/hadoop/hbase/procedure2/util/StringUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufMagic.java">org/apache/hadoop/hbase/protobuf/ProtobufMagic.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufMessageConverter.java">org/apache/hadoop/hbase/protobuf/ProtobufMessageConverter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufUtil.java">org/apache/hadoop/hbase/protobuf/ProtobufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>115</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ReplicationProtbufUtil.java">org/apache/hadoop/hbase/protobuf/ReplicationProtbufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.TestProtobufUtil.java">org/apache/hadoop/hbase/protobuf/TestProtobufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.TestReplicationProtobuf.java">org/apache/hadoop/hbase/protobuf/TestReplicationProtobuf.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement.java">org/apache/hadoop/hbase/quotas/ActivePolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.AverageIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/AverageIntervalRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.DefaultOperationQuota.java">org/apache/hadoop/hbase/quotas/DefaultOperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.FileSystemUtilizationChore.java">org/apache/hadoop/hbase/quotas/FileSystemUtilizationChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.FixedIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/FixedIntervalRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.GlobalQuotaSettings.java">org/apache/hadoop/hbase/quotas/GlobalQuotaSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.GlobalQuotaSettingsImpl.java">org/apache/hadoop/hbase/quotas/GlobalQuotaSettingsImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.MasterSpaceQuotaObserver.java">org/apache/hadoop/hbase/quotas/MasterSpaceQuotaObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.NamespaceQuotaSnapshotStore.java">org/apache/hadoop/hbase/quotas/NamespaceQuotaSnapshotStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.NoopOperationQuota.java">org/apache/hadoop/hbase/quotas/NoopOperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.NoopQuotaLimiter.java">org/apache/hadoop/hbase/quotas/NoopQuotaLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.OperationQuota.java">org/apache/hadoop/hbase/quotas/OperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaCache.java">org/apache/hadoop/hbase/quotas/QuotaCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaLimiter.java">org/apache/hadoop/hbase/quotas/QuotaLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaLimiterFactory.java">org/apache/hadoop/hbase/quotas/QuotaLimiterFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaObserverChore.java">org/apache/hadoop/hbase/quotas/QuotaObserverChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaRetriever.java">org/apache/hadoop/hbase/quotas/QuotaRetriever.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaSettings.java">org/apache/hadoop/hbase/quotas/QuotaSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaSettingsFactory.java">org/apache/hadoop/hbase/quotas/QuotaSettingsFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaState.java">org/apache/hadoop/hbase/quotas/QuotaState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaTableUtil.java">org/apache/hadoop/hbase/quotas/QuotaTableUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaUtil.java">org/apache/hadoop/hbase/quotas/QuotaUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.RateLimiter.java">org/apache/hadoop/hbase/quotas/RateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager.java">org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager.java">org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore.java">org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceLimitSettings.java">org/apache/hadoop/hbase/quotas/SpaceLimitSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaRefresherChore.java">org/apache/hadoop/hbase/quotas/SpaceQuotaRefresherChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshot.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifierFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierForTest.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifierForTest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/SpaceViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcementFactory.java">org/apache/hadoop/hbase/quotas/SpaceViolationPolicyEnforcementFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TableQuotaSnapshotStore.java">org/apache/hadoop/hbase/quotas/TableQuotaSnapshotStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestFileSystemUtilizationChore.java">org/apache/hadoop/hbase/quotas/TestFileSystemUtilizationChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestMasterSpaceQuotaObserver.java">org/apache/hadoop/hbase/quotas/TestMasterSpaceQuotaObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestNamespaceQuotaViolationStore.java">org/apache/hadoop/hbase/quotas/TestNamespaceQuotaViolationStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaFilter.java">org/apache/hadoop/hbase/quotas/TestQuotaFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaObserverChoreWithMiniCluster.java">org/apache/hadoop/hbase/quotas/TestQuotaObserverChoreWithMiniCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaSettingsFactory.java">org/apache/hadoop/hbase/quotas/TestQuotaSettingsFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaStatusRPCs.java">org/apache/hadoop/hbase/quotas/TestQuotaStatusRPCs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaThrottle.java">org/apache/hadoop/hbase/quotas/TestQuotaThrottle.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestRateLimiter.java">org/apache/hadoop/hbase/quotas/TestRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestSpaceQuotas.java">org/apache/hadoop/hbase/quotas/TestSpaceQuotas.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestTableQuotaViolationStore.java">org/apache/hadoop/hbase/quotas/TestTableQuotaViolationStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestTablesWithQuotas.java">org/apache/hadoop/hbase/quotas/TestTablesWithQuotas.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.ThrottleSettings.java">org/apache/hadoop/hbase/quotas/ThrottleSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TimeBasedLimiter.java">org/apache/hadoop/hbase/quotas/TimeBasedLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.UserQuotaState.java">org/apache/hadoop/hbase/quotas/UserQuotaState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.BaseViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/BaseViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.DefaultViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/DefaultViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.DisableTableViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/DisableTableViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.NoInsertsViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/NoInsertsViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.NoWritesCompactionsViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/NoWritesCompactionsViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.NoWritesViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/NoWritesViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.TestBulkLoadCheckingViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/TestBulkLoadCheckingViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AbstractMemStore.java">org/apache/hadoop/hbase/regionserver/AbstractMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AbstractMultiFileWriter.java">org/apache/hadoop/hbase/regionserver/AbstractMultiFileWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AbstractTestDateTieredCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/AbstractTestDateTieredCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AnnotationReadingPriorityFunction.java">org/apache/hadoop/hbase/regionserver/AnnotationReadingPriorityFunction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.BaseRowProcessor.java">org/apache/hadoop/hbase/regionserver/BaseRowProcessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.BusyRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/BusyRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ByteBufferChunkKeyValue.java">org/apache/hadoop/hbase/regionserver/ByteBufferChunkKeyValue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CSLMImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CSLMImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellArrayImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CellArrayImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellArrayMap.java">org/apache/hadoop/hbase/regionserver/CellArrayMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellChunkMap.java">org/apache/hadoop/hbase/regionserver/CellChunkMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellFlatMap.java">org/apache/hadoop/hbase/regionserver/CellFlatMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellSet.java">org/apache/hadoop/hbase/regionserver/CellSet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellSink.java">org/apache/hadoop/hbase/regionserver/CellSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ChangedReadersObserver.java">org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Chunk.java">org/apache/hadoop/hbase/regionserver/Chunk.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ChunkCreator.java">org/apache/hadoop/hbase/regionserver/ChunkCreator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactSplit.java">org/apache/hadoop/hbase/regionserver/CompactSplit.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactedHFilesDischargeHandler.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischargeHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactedHFilesDischarger.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactingMemStore.java">org/apache/hadoop/hbase/regionserver/CompactingMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactionPipeline.java">org/apache/hadoop/hbase/regionserver/CompactionPipeline.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactionTool.java">org/apache/hadoop/hbase/regionserver/CompactionTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompositeImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/ConstantSizeRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CreateRandomStoreFile.java">org/apache/hadoop/hbase/regionserver/CreateRandomStoreFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DataBlockEncodingTool.java">org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DateTieredStoreEngine.java">org/apache/hadoop/hbase/regionserver/DateTieredStoreEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultHeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>31</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultMemStore.java">org/apache/hadoop/hbase/regionserver/DefaultMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher.java">org/apache/hadoop/hbase/regionserver/DefaultStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DelegatingKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/DelegatingKeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DelimitedKeyPrefixRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/DelimitedKeyPrefixRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/DisabledRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FavoredNodesForRegion.java">org/apache/hadoop/hbase/regionserver/FavoredNodesForRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FifoRpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/FifoRpcSchedulerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushPolicyFactory.java">org/apache/hadoop/hbase/regionserver/FlushPolicyFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushRequestListener.java">org/apache/hadoop/hbase/regionserver/FlushRequestListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushRequester.java">org/apache/hadoop/hbase/regionserver/FlushRequester.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HMobStore.java">org/apache/hadoop/hbase/regionserver/HMobStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegion.java">org/apache/hadoop/hbase/regionserver/HRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>220</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionFileSystem.java">org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>47</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionServer.java">org/apache/hadoop/hbase/regionserver/HRegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>88</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.java">org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HStore.java">org/apache/hadoop/hbase/regionserver/HStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>43</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HStoreFile.java">org/apache/hadoop/hbase/regionserver/HStoreFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HeapMemoryManager.java">org/apache/hadoop/hbase/regionserver/HeapMemoryManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/HeapMemoryTuner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ImmutableSegment.java">org/apache/hadoop/hbase/regionserver/ImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.InternalScan.java">org/apache/hadoop/hbase/regionserver/InternalScan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.InternalScanner.java">org/apache/hadoop/hbase/regionserver/InternalScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/KeyPrefixRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyValueHeap.java">org/apache/hadoop/hbase/regionserver/KeyValueHeap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyValueScanner.java">org/apache/hadoop/hbase/regionserver/KeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.LeaseException.java">org/apache/hadoop/hbase/regionserver/LeaseException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Leases.java">org/apache/hadoop/hbase/regionserver/Leases.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.LogRoller.java">org/apache/hadoop/hbase/regionserver/LogRoller.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStore.java">org/apache/hadoop/hbase/regionserver/MemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreCompactor.java">org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreFlusher.java">org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreLAB.java">org/apache/hadoop/hbase/regionserver/MemStoreLAB.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreLABImpl.java">org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreMergerSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreMergerSegmentsIterator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreSegmentsIterator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreSnapshot.java">org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegion.java">org/apache/hadoop/hbase/regionserver/MetricsRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServer.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapperImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapperStub.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTable.java">org/apache/hadoop/hbase/regionserver/MetricsTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTableWrapperAggregateImpl.java">org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress.java">org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MobReferenceOnlyFilter.java">org/apache/hadoop/hbase/regionserver/MobReferenceOnlyFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MutableOnlineRegions.java">org/apache/hadoop/hbase/regionserver/MutableOnlineRegions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MutableSegment.java">org/apache/hadoop/hbase/regionserver/MutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NoTagByteBufferChunkKeyValue.java">org/apache/hadoop/hbase/regionserver/NoTagByteBufferChunkKeyValue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NonReversedNonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.OOMERegionServer.java">org/apache/hadoop/hbase/regionserver/OOMERegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.OnlineRegions.java">org/apache/hadoop/hbase/regionserver/OnlineRegions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.OperationStatus.java">org/apache/hadoop/hbase/regionserver/OperationStatus.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RSDumpServlet.java">org/apache/hadoop/hbase/regionserver/RSDumpServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RSRpcServices.java">org/apache/hadoop/hbase/regionserver/RSRpcServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>66</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RSStatusServlet.java">org/apache/hadoop/hbase/regionserver/RSStatusServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Region.java">org/apache/hadoop/hbase/regionserver/Region.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionAsTable.java">org/apache/hadoop/hbase/regionserver/RegionAsTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>41</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>79</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionScanner.java">org/apache/hadoop/hbase/regionserver/RegionScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServerAccounting.java">org/apache/hadoop/hbase/regionserver/RegionServerAccounting.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServerCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServerServices.java">org/apache/hadoop/hbase/regionserver/RegionServerServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServicesForStores.java">org/apache/hadoop/hbase/regionserver/RegionServicesForStores.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReplicationSinkService.java">org/apache/hadoop/hbase/regionserver/ReplicationSinkService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedKeyValueHeap.java">org/apache/hadoop/hbase/regionserver/ReversedKeyValueHeap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedRegionScannerImpl.java">org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedStoreScanner.java">org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RowProcessor.java">org/apache/hadoop/hbase/regionserver/RowProcessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/RpcSchedulerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScanInfo.java">org/apache/hadoop/hbase/regionserver/ScanInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScanOptions.java">org/apache/hadoop/hbase/regionserver/ScanOptions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScannerContext.java">org/apache/hadoop/hbase/regionserver/ScannerContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScannerIdGenerator.java">org/apache/hadoop/hbase/regionserver/ScannerIdGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SecureBulkLoadEndpointClient.java">org/apache/hadoop/hbase/regionserver/SecureBulkLoadEndpointClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SecureBulkLoadManager.java">org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Segment.java">org/apache/hadoop/hbase/regionserver/Segment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SegmentFactory.java">org/apache/hadoop/hbase/regionserver/SegmentFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SegmentScanner.java">org/apache/hadoop/hbase/regionserver/SegmentScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ServerNonceManager.java">org/apache/hadoop/hbase/regionserver/ServerNonceManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ShipperListener.java">org/apache/hadoop/hbase/regionserver/Shipp

<TRUNCATED>

[22/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.Options.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.Options.html b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.Options.html
index b77fb8a..4c0b9a7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.Options.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.Options.html
@@ -1035,116 +1035,120 @@
 <span class="sourceLineNo">1027</span>    // The snapshot references must be copied before the hfiles otherwise the cleaner<a name="line.1027"></a>
 <span class="sourceLineNo">1028</span>    // will remove them because they are unreferenced.<a name="line.1028"></a>
 <span class="sourceLineNo">1029</span>    List&lt;Path&gt; travesedPaths = new ArrayList&lt;&gt;();<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    try {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      LOG.info("Copy Snapshot Manifest");<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      travesedPaths =<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    } catch (IOException e) {<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    } finally {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      if (filesUser != null || filesGroup != null) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>        LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>            + filesUser)<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            + filesGroup));<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>        setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      }<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>      if (filesMode &gt; 0) {<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    if (!targetName.equals(snapshotName)) {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      SnapshotDescription snapshotDesc =<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>          .toBuilder()<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>          .setName(targetName)<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>          .build();<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      if (filesUser != null || filesGroup != null) {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      }<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>      if (filesMode &gt; 0) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1066"></a>
+<span class="sourceLineNo">1030</span>    boolean copySucceeded = false;<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    try {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      LOG.info("Copy Snapshot Manifest from " + snapshotDir + " to " + initialOutputSnapshotDir);<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>      travesedPaths =<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      copySucceeded = true;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>    } catch (IOException e) {<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>    } finally {<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      if (copySucceeded) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>        if (filesUser != null || filesGroup != null) {<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>          LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>              + filesUser)<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>              + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>                  + filesGroup));<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>          setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>        }<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        if (filesMode &gt; 0) {<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>          setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>        }<a name="line.1052"></a>
+<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>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    if (!targetName.equals(snapshotName)) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>      SnapshotDescription snapshotDesc =<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>          .toBuilder()<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>          .setName(targetName)<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>          .build();<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      if (filesUser != null || filesGroup != null) {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>      }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span><a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    // Step 2 - Start MR Job to copy files<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // by the HFileArchiver, since they have no references.<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    try {<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span><a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>      if (!skipTmp) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<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><a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      // Step 4 - Verify snapshot integrity<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      if (verifyTarget) {<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>        LOG.info("Verify snapshot integrity");<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>      }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      LOG.info("Export Completed: " + targetName);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      return 0;<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    } catch (Exception e) {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      LOG.error("Snapshot export failed", e);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      if (!skipTmp) {<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      }<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      return 1;<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    } finally {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      IOUtils.closeStream(inputFs);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      IOUtils.closeStream(outputFs);<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>
-<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>  @Override<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>  protected void printUsage() {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>    super.printUsage();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    System.out.println("\n"<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>        + "Examples:\n"<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        + "  hbase snapshot export \\\n"<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        + "\n"<a name="line.1115"></a>
+<span class="sourceLineNo">1068</span>      if (filesMode &gt; 0) {<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    }<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span><a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // Step 2 - Start MR Job to copy files<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // by the HFileArchiver, since they have no references.<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    try {<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span><a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      if (!skipTmp) {<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>        }<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      }<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span><a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      // Step 4 - Verify snapshot integrity<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      if (verifyTarget) {<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>        LOG.info("Verify snapshot integrity");<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      LOG.info("Export Completed: " + targetName);<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      return 0;<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } catch (Exception e) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      LOG.error("Snapshot export failed", e);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>      if (!skipTmp) {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>      }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      return 1;<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    } finally {<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      IOUtils.closeStream(inputFs);<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>      IOUtils.closeStream(outputFs);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>  }<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span><a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>  @Override<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>  protected void printUsage() {<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    super.printUsage();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    System.out.println("\n"<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>        + "Examples:\n"<a name="line.1115"></a>
 <span class="sourceLineNo">1116</span>        + "  hbase snapshot export \\\n"<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  }<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span><a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>  @Override protected void addOptions() {<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    addOption(Options.COPY_TO);<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    addOption(Options.COPY_FROM);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    addOption(Options.TARGET_NAME);<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    addOption(Options.OVERWRITE);<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    addOption(Options.CHUSER);<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    addOption(Options.CHGROUP);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    addOption(Options.CHMOD);<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    addOption(Options.MAPPERS);<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    addOption(Options.BANDWIDTH);<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>  }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span><a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>  public static void main(String[] args) {<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1137"></a>
+<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>        + "\n"<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        + "  hbase snapshot export \\\n"<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>  }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>  @Override protected void addOptions() {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>    addOption(Options.COPY_TO);<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    addOption(Options.COPY_FROM);<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    addOption(Options.TARGET_NAME);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    addOption(Options.OVERWRITE);<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    addOption(Options.CHUSER);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    addOption(Options.CHGROUP);<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    addOption(Options.CHMOD);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    addOption(Options.MAPPERS);<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    addOption(Options.BANDWIDTH);<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>  }<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>}<a name="line.1139"></a>
+<span class="sourceLineNo">1139</span><a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>  public static void main(String[] args) {<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>  }<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>}<a name="line.1143"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.Testing.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.Testing.html b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.Testing.html
index b77fb8a..4c0b9a7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.Testing.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.Testing.html
@@ -1035,116 +1035,120 @@
 <span class="sourceLineNo">1027</span>    // The snapshot references must be copied before the hfiles otherwise the cleaner<a name="line.1027"></a>
 <span class="sourceLineNo">1028</span>    // will remove them because they are unreferenced.<a name="line.1028"></a>
 <span class="sourceLineNo">1029</span>    List&lt;Path&gt; travesedPaths = new ArrayList&lt;&gt;();<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    try {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      LOG.info("Copy Snapshot Manifest");<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      travesedPaths =<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    } catch (IOException e) {<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    } finally {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      if (filesUser != null || filesGroup != null) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>        LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>            + filesUser)<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            + filesGroup));<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>        setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      }<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>      if (filesMode &gt; 0) {<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    if (!targetName.equals(snapshotName)) {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      SnapshotDescription snapshotDesc =<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>          .toBuilder()<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>          .setName(targetName)<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>          .build();<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      if (filesUser != null || filesGroup != null) {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      }<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>      if (filesMode &gt; 0) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1066"></a>
+<span class="sourceLineNo">1030</span>    boolean copySucceeded = false;<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    try {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      LOG.info("Copy Snapshot Manifest from " + snapshotDir + " to " + initialOutputSnapshotDir);<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>      travesedPaths =<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      copySucceeded = true;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>    } catch (IOException e) {<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>    } finally {<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      if (copySucceeded) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>        if (filesUser != null || filesGroup != null) {<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>          LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>              + filesUser)<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>              + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>                  + filesGroup));<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>          setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>        }<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        if (filesMode &gt; 0) {<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>          setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>        }<a name="line.1052"></a>
+<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>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    if (!targetName.equals(snapshotName)) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>      SnapshotDescription snapshotDesc =<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>          .toBuilder()<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>          .setName(targetName)<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>          .build();<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      if (filesUser != null || filesGroup != null) {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>      }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span><a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    // Step 2 - Start MR Job to copy files<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // by the HFileArchiver, since they have no references.<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    try {<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span><a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>      if (!skipTmp) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<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><a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      // Step 4 - Verify snapshot integrity<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      if (verifyTarget) {<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>        LOG.info("Verify snapshot integrity");<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>      }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      LOG.info("Export Completed: " + targetName);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      return 0;<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    } catch (Exception e) {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      LOG.error("Snapshot export failed", e);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      if (!skipTmp) {<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      }<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      return 1;<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    } finally {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      IOUtils.closeStream(inputFs);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      IOUtils.closeStream(outputFs);<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>
-<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>  @Override<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>  protected void printUsage() {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>    super.printUsage();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    System.out.println("\n"<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>        + "Examples:\n"<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        + "  hbase snapshot export \\\n"<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        + "\n"<a name="line.1115"></a>
+<span class="sourceLineNo">1068</span>      if (filesMode &gt; 0) {<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    }<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span><a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // Step 2 - Start MR Job to copy files<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // by the HFileArchiver, since they have no references.<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    try {<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span><a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      if (!skipTmp) {<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>        }<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      }<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span><a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      // Step 4 - Verify snapshot integrity<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      if (verifyTarget) {<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>        LOG.info("Verify snapshot integrity");<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      LOG.info("Export Completed: " + targetName);<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      return 0;<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } catch (Exception e) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      LOG.error("Snapshot export failed", e);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>      if (!skipTmp) {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>      }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      return 1;<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    } finally {<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      IOUtils.closeStream(inputFs);<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>      IOUtils.closeStream(outputFs);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>  }<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span><a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>  @Override<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>  protected void printUsage() {<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    super.printUsage();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    System.out.println("\n"<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>        + "Examples:\n"<a name="line.1115"></a>
 <span class="sourceLineNo">1116</span>        + "  hbase snapshot export \\\n"<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  }<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span><a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>  @Override protected void addOptions() {<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    addOption(Options.COPY_TO);<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    addOption(Options.COPY_FROM);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    addOption(Options.TARGET_NAME);<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    addOption(Options.OVERWRITE);<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    addOption(Options.CHUSER);<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    addOption(Options.CHGROUP);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    addOption(Options.CHMOD);<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    addOption(Options.MAPPERS);<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    addOption(Options.BANDWIDTH);<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>  }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span><a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>  public static void main(String[] args) {<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1137"></a>
+<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>        + "\n"<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        + "  hbase snapshot export \\\n"<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>  }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>  @Override protected void addOptions() {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>    addOption(Options.COPY_TO);<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    addOption(Options.COPY_FROM);<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    addOption(Options.TARGET_NAME);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    addOption(Options.OVERWRITE);<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    addOption(Options.CHUSER);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    addOption(Options.CHGROUP);<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    addOption(Options.CHMOD);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    addOption(Options.MAPPERS);<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    addOption(Options.BANDWIDTH);<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>  }<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>}<a name="line.1139"></a>
+<span class="sourceLineNo">1139</span><a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>  public static void main(String[] args) {<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>  }<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>}<a name="line.1143"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html
index b77fb8a..4c0b9a7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html
@@ -1035,116 +1035,120 @@
 <span class="sourceLineNo">1027</span>    // The snapshot references must be copied before the hfiles otherwise the cleaner<a name="line.1027"></a>
 <span class="sourceLineNo">1028</span>    // will remove them because they are unreferenced.<a name="line.1028"></a>
 <span class="sourceLineNo">1029</span>    List&lt;Path&gt; travesedPaths = new ArrayList&lt;&gt;();<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    try {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      LOG.info("Copy Snapshot Manifest");<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      travesedPaths =<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    } catch (IOException e) {<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    } finally {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      if (filesUser != null || filesGroup != null) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>        LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>            + filesUser)<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            + filesGroup));<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>        setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      }<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>      if (filesMode &gt; 0) {<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    if (!targetName.equals(snapshotName)) {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      SnapshotDescription snapshotDesc =<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>          .toBuilder()<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>          .setName(targetName)<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>          .build();<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      if (filesUser != null || filesGroup != null) {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      }<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>      if (filesMode &gt; 0) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1066"></a>
+<span class="sourceLineNo">1030</span>    boolean copySucceeded = false;<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    try {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      LOG.info("Copy Snapshot Manifest from " + snapshotDir + " to " + initialOutputSnapshotDir);<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>      travesedPaths =<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      copySucceeded = true;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>    } catch (IOException e) {<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>    } finally {<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      if (copySucceeded) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>        if (filesUser != null || filesGroup != null) {<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>          LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>              + filesUser)<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>              + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>                  + filesGroup));<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>          setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>        }<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        if (filesMode &gt; 0) {<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>          setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>        }<a name="line.1052"></a>
+<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>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    if (!targetName.equals(snapshotName)) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>      SnapshotDescription snapshotDesc =<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>          .toBuilder()<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>          .setName(targetName)<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>          .build();<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      if (filesUser != null || filesGroup != null) {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>      }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span><a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    // Step 2 - Start MR Job to copy files<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // by the HFileArchiver, since they have no references.<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    try {<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span><a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>      if (!skipTmp) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<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><a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      // Step 4 - Verify snapshot integrity<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      if (verifyTarget) {<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>        LOG.info("Verify snapshot integrity");<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>      }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      LOG.info("Export Completed: " + targetName);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      return 0;<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    } catch (Exception e) {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      LOG.error("Snapshot export failed", e);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      if (!skipTmp) {<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      }<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      return 1;<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    } finally {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      IOUtils.closeStream(inputFs);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      IOUtils.closeStream(outputFs);<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>
-<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>  @Override<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>  protected void printUsage() {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>    super.printUsage();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    System.out.println("\n"<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>        + "Examples:\n"<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        + "  hbase snapshot export \\\n"<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        + "\n"<a name="line.1115"></a>
+<span class="sourceLineNo">1068</span>      if (filesMode &gt; 0) {<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    }<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span><a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // Step 2 - Start MR Job to copy files<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // by the HFileArchiver, since they have no references.<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    try {<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span><a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      if (!skipTmp) {<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>        }<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      }<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span><a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      // Step 4 - Verify snapshot integrity<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      if (verifyTarget) {<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>        LOG.info("Verify snapshot integrity");<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      LOG.info("Export Completed: " + targetName);<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      return 0;<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } catch (Exception e) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      LOG.error("Snapshot export failed", e);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>      if (!skipTmp) {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>      }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      return 1;<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    } finally {<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      IOUtils.closeStream(inputFs);<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>      IOUtils.closeStream(outputFs);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>  }<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span><a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>  @Override<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>  protected void printUsage() {<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    super.printUsage();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    System.out.println("\n"<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>        + "Examples:\n"<a name="line.1115"></a>
 <span class="sourceLineNo">1116</span>        + "  hbase snapshot export \\\n"<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  }<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span><a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>  @Override protected void addOptions() {<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    addOption(Options.COPY_TO);<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    addOption(Options.COPY_FROM);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    addOption(Options.TARGET_NAME);<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    addOption(Options.OVERWRITE);<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    addOption(Options.CHUSER);<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    addOption(Options.CHGROUP);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    addOption(Options.CHMOD);<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    addOption(Options.MAPPERS);<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    addOption(Options.BANDWIDTH);<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>  }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span><a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>  public static void main(String[] args) {<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1137"></a>
+<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>        + "\n"<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        + "  hbase snapshot export \\\n"<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>  }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>  @Override protected void addOptions() {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>    addOption(Options.COPY_TO);<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    addOption(Options.COPY_FROM);<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    addOption(Options.TARGET_NAME);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    addOption(Options.OVERWRITE);<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    addOption(Options.CHUSER);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    addOption(Options.CHGROUP);<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    addOption(Options.CHMOD);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    addOption(Options.MAPPERS);<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    addOption(Options.BANDWIDTH);<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>  }<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>}<a name="line.1139"></a>
+<span class="sourceLineNo">1139</span><a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>  public static void main(String[] args) {<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>  }<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>}<a name="line.1143"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html b/devapidocs/src-html/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html
new file mode 100644
index 0000000..c330dc3
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html
@@ -0,0 +1,201 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> *<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
+<span class="sourceLineNo">009</span> * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
+<span class="sourceLineNo">012</span> *<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
+<span class="sourceLineNo">017</span> * limitations under the License.<a name="line.17"></a>
+<span class="sourceLineNo">018</span> */<a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.tool;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.List;<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.HBaseInterfaceAudience;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.util.AbstractHBaseTool;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.slf4j.Logger;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.slf4j.LoggerFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>/**<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * Tool for validating that cluster can be upgraded from HBase 1.x to 2.0<a name="line.40"></a>
+<span class="sourceLineNo">041</span> * &lt;p&gt;<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * Available validations:<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * &lt;ul&gt;<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * &lt;li&gt;all: Run all pre-upgrade validations&lt;/li&gt;<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * &lt;li&gt;validateDBE: Check Data Block Encoding for column families&lt;/li&gt;<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * &lt;/ul&gt;<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * &lt;/p&gt;<a name="line.47"></a>
+<span class="sourceLineNo">048</span> */<a name="line.48"></a>
+<span class="sourceLineNo">049</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.49"></a>
+<span class="sourceLineNo">050</span>public class PreUpgradeValidator extends AbstractHBaseTool {<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  public static final String NAME = "pre-upgrade";<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private static final Logger LOG = LoggerFactory.getLogger(PreUpgradeValidator.class);<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private static final byte[] DATA_BLOCK_ENCODING = Bytes.toBytes("DATA_BLOCK_ENCODING");<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private boolean validateAll;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private boolean validateDBE;<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  /**<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * Check DataBlockEncodings for column families.<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   *<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * @return DataBlockEncoding compatible with HBase 2<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * @throws IOException if a remote or network exception occurs<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   */<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private boolean validateDBE() throws IOException {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    int incompatibilities = 0;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>    LOG.info("Validating Data Block Encodings");<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>    try (Connection connection = ConnectionFactory.createConnection(getConf());<a name="line.69"></a>
+<span class="sourceLineNo">070</span>        Admin admin = connection.getAdmin()) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      List&lt;TableDescriptor&gt; tableDescriptors = admin.listTableDescriptors();<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      String encoding = "";<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>      for (TableDescriptor td : tableDescriptors) {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>        ColumnFamilyDescriptor[] columnFamilies = td.getColumnFamilies();<a name="line.75"></a>
+<span class="sourceLineNo">076</span>        for (ColumnFamilyDescriptor cfd : columnFamilies) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>          try {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>            encoding = Bytes.toString(cfd.getValue(DATA_BLOCK_ENCODING));<a name="line.78"></a>
+<span class="sourceLineNo">079</span>            // IllegalArgumentException will be thrown if encoding is incompatible with 2.0<a name="line.79"></a>
+<span class="sourceLineNo">080</span>            DataBlockEncoding.valueOf(encoding);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>          } catch (IllegalArgumentException e) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>            incompatibilities++;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>            LOG.warn("Incompatible DataBlockEncoding for table: {}, cf: {}, encoding: {}",<a name="line.83"></a>
+<span class="sourceLineNo">084</span>                td.getTableName().getNameAsString(), cfd.getNameAsString(), encoding);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>          }<a name="line.85"></a>
+<span class="sourceLineNo">086</span>        }<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      }<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    }<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>    if (incompatibilities &gt; 0) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      LOG.warn("There are {} column families with incompatible Data Block Encodings. Do not "<a name="line.91"></a>
+<span class="sourceLineNo">092</span>          + "upgrade until these encodings are converted to a supported one.", incompatibilities);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      LOG.warn("Check http://hbase.apache.org/book.html#upgrade2.0.prefix-tree.removed "<a name="line.93"></a>
+<span class="sourceLineNo">094</span>          + "for instructions.");<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      return false;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    } else {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      LOG.info("The used Data Block Encodings are compatible with HBase 2.0.");<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      return true;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  @Override<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected void addOptions() {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    addOptNoArg("all", "Run all pre-upgrade validations");<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    addOptNoArg("validateDBE", "Validate DataBlockEncoding are compatible on the cluster");<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>  protected void processOptions(CommandLine cmd) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    validateAll = cmd.hasOption("all");<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    validateDBE = cmd.hasOption("validateDBE");<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>  @Override<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  protected int doWork() throws Exception {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    boolean validationFailed = false;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    if (validateDBE || validateAll) {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      if (validateDBE()) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        validationFailed = true;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      }<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    }<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>    return validationFailed ? 1 : 0;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>  public static void main(String[] args) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    new PreUpgradeValidator().doStaticMain(args);<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>


[21/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html
index 2fa8df1..cd509b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html
@@ -730,7 +730,7 @@
 <span class="sourceLineNo">722</span>  private boolean setMasterInMaintenanceMode() throws IOException {<a name="line.722"></a>
 <span class="sourceLineNo">723</span>    RetryCounter retryCounter = createZNodeRetryCounterFactory.create();<a name="line.723"></a>
 <span class="sourceLineNo">724</span>    hbckEphemeralNodePath = ZNodePaths.joinZNode(<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      zkw.znodePaths.masterMaintZNode,<a name="line.725"></a>
+<span class="sourceLineNo">725</span>      zkw.getZNodePaths().masterMaintZNode,<a name="line.725"></a>
 <span class="sourceLineNo">726</span>      "hbck-" + Long.toString(EnvironmentEdgeManager.currentTime()));<a name="line.726"></a>
 <span class="sourceLineNo">727</span>    do {<a name="line.727"></a>
 <span class="sourceLineNo">728</span>      try {<a name="line.728"></a>
@@ -3680,7 +3680,7 @@
 <span class="sourceLineNo">3672</span>  private void unassignMetaReplica(HbckInfo hi) throws IOException, InterruptedException,<a name="line.3672"></a>
 <span class="sourceLineNo">3673</span>  KeeperException {<a name="line.3673"></a>
 <span class="sourceLineNo">3674</span>    undeployRegions(hi);<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
+<span class="sourceLineNo">3675</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(hi.metaEntry.getReplicaId()));<a name="line.3675"></a>
 <span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
 <span class="sourceLineNo">3677</span><a name="line.3677"></a>
 <span class="sourceLineNo">3678</span>  private void assignMetaReplica(int replicaId)<a name="line.3678"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/util/ZKDataMigrator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/ZKDataMigrator.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/ZKDataMigrator.html
index 62dbed8..3cb9f04 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/ZKDataMigrator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/ZKDataMigrator.html
@@ -68,7 +68,7 @@
 <span class="sourceLineNo">060</span>  public static Map&lt;TableName, TableState.State&gt; queryForTableStates(ZKWatcher zkw)<a name="line.60"></a>
 <span class="sourceLineNo">061</span>      throws KeeperException, InterruptedException {<a name="line.61"></a>
 <span class="sourceLineNo">062</span>    Map&lt;TableName, TableState.State&gt; rv = new HashMap&lt;&gt;();<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, zkw.znodePaths.tableZNode);<a name="line.63"></a>
+<span class="sourceLineNo">063</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, zkw.getZNodePaths().tableZNode);<a name="line.63"></a>
 <span class="sourceLineNo">064</span>    if (children == null)<a name="line.64"></a>
 <span class="sourceLineNo">065</span>      return rv;<a name="line.65"></a>
 <span class="sourceLineNo">066</span>    for (String child: children) {<a name="line.66"></a>
@@ -109,25 +109,26 @@
 <span class="sourceLineNo">101</span>  private static  ZooKeeperProtos.DeprecatedTableState.State getTableState(<a name="line.101"></a>
 <span class="sourceLineNo">102</span>          final ZKWatcher zkw, final TableName tableName)<a name="line.102"></a>
 <span class="sourceLineNo">103</span>      throws KeeperException, InterruptedException {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    String znode = ZNodePaths.joinZNode(zkw.znodePaths.tableZNode, tableName.getNameAsString());<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    byte [] data = ZKUtil.getData(zkw, znode);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    if (data == null || data.length &lt;= 0) return null;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    try {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      ProtobufUtil.expectPBMagicPrefix(data);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      ZooKeeperProtos.DeprecatedTableState.Builder builder =<a name="line.109"></a>
-<span class="sourceLineNo">110</span>          ZooKeeperProtos.DeprecatedTableState.newBuilder();<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      int magicLen = ProtobufUtil.lengthOfPBMagic();<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      ProtobufUtil.mergeFrom(builder, data, magicLen, data.length - magicLen);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      return builder.getState();<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    } catch (IOException e) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      KeeperException ke = new KeeperException.DataInconsistencyException();<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      ke.initCause(e);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      throw ke;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    } catch (DeserializationException e) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      throw ZKUtil.convert(e);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    }<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">104</span>    String znode = ZNodePaths.joinZNode(zkw.getZNodePaths().tableZNode,<a name="line.104"></a>
+<span class="sourceLineNo">105</span>            tableName.getNameAsString());<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    byte [] data = ZKUtil.getData(zkw, znode);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    if (data == null || data.length &lt;= 0) return null;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    try {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      ProtobufUtil.expectPBMagicPrefix(data);<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      ZooKeeperProtos.DeprecatedTableState.Builder builder =<a name="line.110"></a>
+<span class="sourceLineNo">111</span>          ZooKeeperProtos.DeprecatedTableState.newBuilder();<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      int magicLen = ProtobufUtil.lengthOfPBMagic();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      ProtobufUtil.mergeFrom(builder, data, magicLen, data.length - magicLen);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      return builder.getState();<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    } catch (IOException e) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      KeeperException ke = new KeeperException.DataInconsistencyException();<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      ke.initCause(e);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      throw ke;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    } catch (DeserializationException e) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      throw ZKUtil.convert(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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ClusterStatusTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ClusterStatusTracker.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ClusterStatusTracker.html
index 6153d32..6162465 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ClusterStatusTracker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ClusterStatusTracker.html
@@ -56,7 +56,7 @@
 <span class="sourceLineNo">048</span>   * @param abortable used to abort if a fatal error occurs<a name="line.48"></a>
 <span class="sourceLineNo">049</span>   */<a name="line.49"></a>
 <span class="sourceLineNo">050</span>  public ClusterStatusTracker(ZKWatcher watcher, Abortable abortable) {<a name="line.50"></a>
-<span class="sourceLineNo">051</span>    super(watcher, watcher.znodePaths.clusterStateZNode, abortable);<a name="line.51"></a>
+<span class="sourceLineNo">051</span>    super(watcher, watcher.getZNodePaths().clusterStateZNode, abortable);<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  }<a name="line.52"></a>
 <span class="sourceLineNo">053</span><a name="line.53"></a>
 <span class="sourceLineNo">054</span>  /**<a name="line.54"></a>
@@ -73,12 +73,12 @@
 <span class="sourceLineNo">065</span>   * @throws KeeperException unexpected zk exception<a name="line.65"></a>
 <span class="sourceLineNo">066</span>   */<a name="line.66"></a>
 <span class="sourceLineNo">067</span>  public void setClusterUp()<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  throws KeeperException {<a name="line.68"></a>
+<span class="sourceLineNo">068</span>    throws KeeperException {<a name="line.68"></a>
 <span class="sourceLineNo">069</span>    byte [] upData = toByteArray();<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    try {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      ZKUtil.createAndWatch(watcher, watcher.znodePaths.clusterStateZNode, upData);<a name="line.71"></a>
+<span class="sourceLineNo">071</span>      ZKUtil.createAndWatch(watcher, watcher.getZNodePaths().clusterStateZNode, upData);<a name="line.71"></a>
 <span class="sourceLineNo">072</span>    } catch(KeeperException.NodeExistsException nee) {<a name="line.72"></a>
-<span class="sourceLineNo">073</span>      ZKUtil.setData(watcher, watcher.znodePaths.clusterStateZNode, upData);<a name="line.73"></a>
+<span class="sourceLineNo">073</span>      ZKUtil.setData(watcher, watcher.getZNodePaths().clusterStateZNode, upData);<a name="line.73"></a>
 <span class="sourceLineNo">074</span>    }<a name="line.74"></a>
 <span class="sourceLineNo">075</span>  }<a name="line.75"></a>
 <span class="sourceLineNo">076</span><a name="line.76"></a>
@@ -87,12 +87,12 @@
 <span class="sourceLineNo">079</span>   * @throws KeeperException unexpected zk exception<a name="line.79"></a>
 <span class="sourceLineNo">080</span>   */<a name="line.80"></a>
 <span class="sourceLineNo">081</span>  public void setClusterDown()<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  throws KeeperException {<a name="line.82"></a>
+<span class="sourceLineNo">082</span>    throws KeeperException {<a name="line.82"></a>
 <span class="sourceLineNo">083</span>    try {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      ZKUtil.deleteNode(watcher, watcher.znodePaths.clusterStateZNode);<a name="line.84"></a>
+<span class="sourceLineNo">084</span>      ZKUtil.deleteNode(watcher, watcher.getZNodePaths().clusterStateZNode);<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    } catch(KeeperException.NoNodeException nne) {<a name="line.85"></a>
 <span class="sourceLineNo">086</span>      LOG.warn("Attempted to set cluster as down but already down, cluster " +<a name="line.86"></a>
-<span class="sourceLineNo">087</span>          "state node (" + watcher.znodePaths.clusterStateZNode + ") not found");<a name="line.87"></a>
+<span class="sourceLineNo">087</span>          "state node (" + watcher.getZNodePaths().clusterStateZNode + ") not found");<a name="line.87"></a>
 <span class="sourceLineNo">088</span>    }<a name="line.88"></a>
 <span class="sourceLineNo">089</span>  }<a name="line.89"></a>
 <span class="sourceLineNo">090</span><a name="line.90"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.html
index 160534e..ecd38c5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.html
@@ -47,7 +47,7 @@
 <span class="sourceLineNo">039</span><a name="line.39"></a>
 <span class="sourceLineNo">040</span>  public LoadBalancerTracker(ZKWatcher watcher,<a name="line.40"></a>
 <span class="sourceLineNo">041</span>      Abortable abortable) {<a name="line.41"></a>
-<span class="sourceLineNo">042</span>    super(watcher, watcher.znodePaths.balancerZNode, abortable);<a name="line.42"></a>
+<span class="sourceLineNo">042</span>    super(watcher, watcher.getZNodePaths().balancerZNode, abortable);<a name="line.42"></a>
 <span class="sourceLineNo">043</span>  }<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>
@@ -75,11 +75,11 @@
 <span class="sourceLineNo">067</span>    byte [] upData = toByteArray(balancerOn);<a name="line.67"></a>
 <span class="sourceLineNo">068</span><a name="line.68"></a>
 <span class="sourceLineNo">069</span>    try {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      ZKUtil.setData(watcher, watcher.znodePaths.balancerZNode, upData);<a name="line.70"></a>
+<span class="sourceLineNo">070</span>      ZKUtil.setData(watcher, watcher.getZNodePaths().balancerZNode, upData);<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    } catch(KeeperException.NoNodeException nne) {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      ZKUtil.createAndWatch(watcher, watcher.znodePaths.balancerZNode, upData);<a name="line.72"></a>
+<span class="sourceLineNo">072</span>      ZKUtil.createAndWatch(watcher, watcher.getZNodePaths().balancerZNode, upData);<a name="line.72"></a>
 <span class="sourceLineNo">073</span>    }<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    super.nodeDataChanged(watcher.znodePaths.balancerZNode);<a name="line.74"></a>
+<span class="sourceLineNo">074</span>    super.nodeDataChanged(watcher.getZNodePaths().balancerZNode);<a name="line.74"></a>
 <span class="sourceLineNo">075</span>  }<a name="line.75"></a>
 <span class="sourceLineNo">076</span><a name="line.76"></a>
 <span class="sourceLineNo">077</span>  private byte [] toByteArray(boolean isBalancerOn) {<a name="line.77"></a>
@@ -90,7 +90,7 @@
 <span class="sourceLineNo">082</span>  }<a name="line.82"></a>
 <span class="sourceLineNo">083</span><a name="line.83"></a>
 <span class="sourceLineNo">084</span>  private LoadBalancerProtos.LoadBalancerState parseFrom(byte [] pbBytes)<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  throws DeserializationException {<a name="line.85"></a>
+<span class="sourceLineNo">085</span>    throws DeserializationException {<a name="line.85"></a>
 <span class="sourceLineNo">086</span>    ProtobufUtil.expectPBMagicPrefix(pbBytes);<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    LoadBalancerProtos.LoadBalancerState.Builder builder =<a name="line.87"></a>
 <span class="sourceLineNo">088</span>      LoadBalancerProtos.LoadBalancerState.newBuilder();<a name="line.88"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html
index e377766..5be7065 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html
@@ -73,7 +73,7 @@
 <span class="sourceLineNo">065</span>   * @param abortable abortable in case of fatal error<a name="line.65"></a>
 <span class="sourceLineNo">066</span>   */<a name="line.66"></a>
 <span class="sourceLineNo">067</span>  public MasterAddressTracker(ZKWatcher watcher, Abortable abortable) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    super(watcher, watcher.znodePaths.masterAddressZNode, abortable);<a name="line.68"></a>
+<span class="sourceLineNo">068</span>    super(watcher, watcher.getZNodePaths().masterAddressZNode, abortable);<a name="line.68"></a>
 <span class="sourceLineNo">069</span>  }<a name="line.69"></a>
 <span class="sourceLineNo">070</span><a name="line.70"></a>
 <span class="sourceLineNo">071</span>  /**<a name="line.71"></a>
@@ -109,7 +109,7 @@
 <span class="sourceLineNo">101</span>   * @return info port or 0 if timed out or exceptions<a name="line.101"></a>
 <span class="sourceLineNo">102</span>   */<a name="line.102"></a>
 <span class="sourceLineNo">103</span>  public int getBackupMasterInfoPort(final ServerName sn) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    String backupZNode = ZNodePaths.joinZNode(watcher.znodePaths.backupMasterAddressesZNode,<a name="line.104"></a>
+<span class="sourceLineNo">104</span>    String backupZNode = ZNodePaths.joinZNode(watcher.getZNodePaths().backupMasterAddressesZNode,<a name="line.104"></a>
 <span class="sourceLineNo">105</span>      sn.toString());<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    try {<a name="line.106"></a>
 <span class="sourceLineNo">107</span>      byte[] data = ZKUtil.getData(watcher, backupZNode);<a name="line.107"></a>
@@ -155,7 +155,7 @@
 <span class="sourceLineNo">147</span>          throws KeeperException, IOException {<a name="line.147"></a>
 <span class="sourceLineNo">148</span>    byte [] data;<a name="line.148"></a>
 <span class="sourceLineNo">149</span>    try {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      data = ZKUtil.getData(zkw, zkw.znodePaths.masterAddressZNode);<a name="line.150"></a>
+<span class="sourceLineNo">150</span>      data = ZKUtil.getData(zkw, zkw.getZNodePaths().masterAddressZNode);<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    } catch (InterruptedException e) {<a name="line.151"></a>
 <span class="sourceLineNo">152</span>      throw new InterruptedIOException();<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    }<a name="line.153"></a>
@@ -186,7 +186,7 @@
 <span class="sourceLineNo">178</span>  public static int getMasterInfoPort(final ZKWatcher zkw) throws KeeperException, IOException {<a name="line.178"></a>
 <span class="sourceLineNo">179</span>    byte[] data;<a name="line.179"></a>
 <span class="sourceLineNo">180</span>    try {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      data = ZKUtil.getData(zkw, zkw.znodePaths.masterAddressZNode);<a name="line.181"></a>
+<span class="sourceLineNo">181</span>      data = ZKUtil.getData(zkw, zkw.getZNodePaths().masterAddressZNode);<a name="line.181"></a>
 <span class="sourceLineNo">182</span>    } catch (InterruptedException e) {<a name="line.182"></a>
 <span class="sourceLineNo">183</span>      throw new InterruptedIOException();<a name="line.183"></a>
 <span class="sourceLineNo">184</span>    }<a name="line.184"></a>
@@ -216,7 +216,7 @@
 <span class="sourceLineNo">208</span>   */<a name="line.208"></a>
 <span class="sourceLineNo">209</span>  public static boolean setMasterAddress(final ZKWatcher zkw,<a name="line.209"></a>
 <span class="sourceLineNo">210</span>      final String znode, final ServerName master, int infoPort)<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  throws KeeperException {<a name="line.211"></a>
+<span class="sourceLineNo">211</span>    throws KeeperException {<a name="line.211"></a>
 <span class="sourceLineNo">212</span>    return ZKUtil.createEphemeralNodeAndWatch(zkw, znode, toByteArray(master, infoPort));<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>
@@ -273,10 +273,10 @@
 <span class="sourceLineNo">265</span><a name="line.265"></a>
 <span class="sourceLineNo">266</span>    try {<a name="line.266"></a>
 <span class="sourceLineNo">267</span>      Stat stat = new Stat();<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      byte[] data = ZKUtil.getDataNoWatch(zkw, zkw.znodePaths.masterAddressZNode, stat);<a name="line.268"></a>
+<span class="sourceLineNo">268</span>      byte[] data = ZKUtil.getDataNoWatch(zkw, zkw.getZNodePaths().masterAddressZNode, stat);<a name="line.268"></a>
 <span class="sourceLineNo">269</span>      ServerName sn = ProtobufUtil.parseServerNameFrom(data);<a name="line.269"></a>
 <span class="sourceLineNo">270</span>      if (sn != null &amp;&amp; content.equals(sn.toString())) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        return (ZKUtil.deleteNode(zkw, zkw.znodePaths.masterAddressZNode, stat.getVersion()));<a name="line.271"></a>
+<span class="sourceLineNo">271</span>        return (ZKUtil.deleteNode(zkw, zkw.getZNodePaths().masterAddressZNode, stat.getVersion()));<a name="line.271"></a>
 <span class="sourceLineNo">272</span>      }<a name="line.272"></a>
 <span class="sourceLineNo">273</span>    } catch (KeeperException e) {<a name="line.273"></a>
 <span class="sourceLineNo">274</span>      LOG.warn("Can't get or delete the master znode", e);<a name="line.274"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html
index adf3c48..52a171b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html
@@ -48,7 +48,7 @@
 <span class="sourceLineNo">040</span>  }<a name="line.40"></a>
 <span class="sourceLineNo">041</span><a name="line.41"></a>
 <span class="sourceLineNo">042</span>  private void update(String path) {<a name="line.42"></a>
-<span class="sourceLineNo">043</span>    if (path.startsWith(watcher.znodePaths.masterMaintZNode)) {<a name="line.43"></a>
+<span class="sourceLineNo">043</span>    if (path.startsWith(watcher.getZNodePaths().masterMaintZNode)) {<a name="line.43"></a>
 <span class="sourceLineNo">044</span>      update();<a name="line.44"></a>
 <span class="sourceLineNo">045</span>    }<a name="line.45"></a>
 <span class="sourceLineNo">046</span>  }<a name="line.46"></a>
@@ -56,37 +56,38 @@
 <span class="sourceLineNo">048</span>  private void update() {<a name="line.48"></a>
 <span class="sourceLineNo">049</span>    try {<a name="line.49"></a>
 <span class="sourceLineNo">050</span>      List&lt;String&gt; children =<a name="line.50"></a>
-<span class="sourceLineNo">051</span>          ZKUtil.listChildrenAndWatchForNewChildren(watcher, watcher.znodePaths.masterMaintZNode);<a name="line.51"></a>
-<span class="sourceLineNo">052</span>      hasChildren = (children != null &amp;&amp; children.size() &gt; 0);<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    } catch (KeeperException e) {<a name="line.53"></a>
-<span class="sourceLineNo">054</span>      // Ignore the ZK keeper exception<a name="line.54"></a>
-<span class="sourceLineNo">055</span>      hasChildren = false;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    }<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  }<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  /**<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * Starts the tracking of whether master is in Maintenance Mode.<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   */<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  public void start() {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    watcher.registerListener(this);<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    update();<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>  @Override<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  public void nodeCreated(String path) {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    update(path);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  @Override<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public void nodeDeleted(String path) {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    update(path);<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  @Override<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public void nodeChildrenChanged(String path) {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    update(path);<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  }<a name="line.80"></a>
-<span class="sourceLineNo">081</span>}<a name="line.81"></a>
+<span class="sourceLineNo">051</span>          ZKUtil.listChildrenAndWatchForNewChildren(watcher,<a name="line.51"></a>
+<span class="sourceLineNo">052</span>                  watcher.getZNodePaths().masterMaintZNode);<a name="line.52"></a>
+<span class="sourceLineNo">053</span>      hasChildren = (children != null &amp;&amp; children.size() &gt; 0);<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    } catch (KeeperException e) {<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      // Ignore the ZK keeper exception<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      hasChildren = false;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    }<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">060</span>  /**<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * Starts the tracking of whether master is in Maintenance Mode.<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   */<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  public void start() {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    watcher.registerListener(this);<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    update();<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  }<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  @Override<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public void nodeCreated(String path) {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    update(path);<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>  @Override<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  public void nodeDeleted(String path) {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    update(path);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  }<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  @Override<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  public void nodeChildrenChanged(String path) {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    update(path);<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>
 
 
 


[23/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportSnapshotInputFormat.ExportSnapshotInputSplit.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportSnapshotInputFormat.ExportSnapshotInputSplit.html b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportSnapshotInputFormat.ExportSnapshotInputSplit.html
index b77fb8a..4c0b9a7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportSnapshotInputFormat.ExportSnapshotInputSplit.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportSnapshotInputFormat.ExportSnapshotInputSplit.html
@@ -1035,116 +1035,120 @@
 <span class="sourceLineNo">1027</span>    // The snapshot references must be copied before the hfiles otherwise the cleaner<a name="line.1027"></a>
 <span class="sourceLineNo">1028</span>    // will remove them because they are unreferenced.<a name="line.1028"></a>
 <span class="sourceLineNo">1029</span>    List&lt;Path&gt; travesedPaths = new ArrayList&lt;&gt;();<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    try {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      LOG.info("Copy Snapshot Manifest");<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      travesedPaths =<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    } catch (IOException e) {<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    } finally {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      if (filesUser != null || filesGroup != null) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>        LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>            + filesUser)<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            + filesGroup));<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>        setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      }<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>      if (filesMode &gt; 0) {<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    if (!targetName.equals(snapshotName)) {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      SnapshotDescription snapshotDesc =<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>          .toBuilder()<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>          .setName(targetName)<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>          .build();<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      if (filesUser != null || filesGroup != null) {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      }<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>      if (filesMode &gt; 0) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1066"></a>
+<span class="sourceLineNo">1030</span>    boolean copySucceeded = false;<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    try {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      LOG.info("Copy Snapshot Manifest from " + snapshotDir + " to " + initialOutputSnapshotDir);<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>      travesedPaths =<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      copySucceeded = true;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>    } catch (IOException e) {<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>    } finally {<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      if (copySucceeded) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>        if (filesUser != null || filesGroup != null) {<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>          LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>              + filesUser)<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>              + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>                  + filesGroup));<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>          setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>        }<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        if (filesMode &gt; 0) {<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>          setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>        }<a name="line.1052"></a>
+<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>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    if (!targetName.equals(snapshotName)) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>      SnapshotDescription snapshotDesc =<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>          .toBuilder()<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>          .setName(targetName)<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>          .build();<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      if (filesUser != null || filesGroup != null) {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>      }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span><a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    // Step 2 - Start MR Job to copy files<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // by the HFileArchiver, since they have no references.<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    try {<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span><a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>      if (!skipTmp) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<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><a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      // Step 4 - Verify snapshot integrity<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      if (verifyTarget) {<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>        LOG.info("Verify snapshot integrity");<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>      }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      LOG.info("Export Completed: " + targetName);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      return 0;<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    } catch (Exception e) {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      LOG.error("Snapshot export failed", e);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      if (!skipTmp) {<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      }<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      return 1;<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    } finally {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      IOUtils.closeStream(inputFs);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      IOUtils.closeStream(outputFs);<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>
-<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>  @Override<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>  protected void printUsage() {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>    super.printUsage();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    System.out.println("\n"<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>        + "Examples:\n"<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        + "  hbase snapshot export \\\n"<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        + "\n"<a name="line.1115"></a>
+<span class="sourceLineNo">1068</span>      if (filesMode &gt; 0) {<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    }<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span><a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // Step 2 - Start MR Job to copy files<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // by the HFileArchiver, since they have no references.<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    try {<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span><a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      if (!skipTmp) {<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>        }<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      }<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span><a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      // Step 4 - Verify snapshot integrity<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      if (verifyTarget) {<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>        LOG.info("Verify snapshot integrity");<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      LOG.info("Export Completed: " + targetName);<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      return 0;<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } catch (Exception e) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      LOG.error("Snapshot export failed", e);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>      if (!skipTmp) {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>      }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      return 1;<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    } finally {<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      IOUtils.closeStream(inputFs);<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>      IOUtils.closeStream(outputFs);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>  }<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span><a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>  @Override<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>  protected void printUsage() {<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    super.printUsage();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    System.out.println("\n"<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>        + "Examples:\n"<a name="line.1115"></a>
 <span class="sourceLineNo">1116</span>        + "  hbase snapshot export \\\n"<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  }<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span><a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>  @Override protected void addOptions() {<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    addOption(Options.COPY_TO);<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    addOption(Options.COPY_FROM);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    addOption(Options.TARGET_NAME);<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    addOption(Options.OVERWRITE);<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    addOption(Options.CHUSER);<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    addOption(Options.CHGROUP);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    addOption(Options.CHMOD);<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    addOption(Options.MAPPERS);<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    addOption(Options.BANDWIDTH);<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>  }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span><a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>  public static void main(String[] args) {<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1137"></a>
+<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>        + "\n"<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        + "  hbase snapshot export \\\n"<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>  }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>  @Override protected void addOptions() {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>    addOption(Options.COPY_TO);<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    addOption(Options.COPY_FROM);<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    addOption(Options.TARGET_NAME);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    addOption(Options.OVERWRITE);<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    addOption(Options.CHUSER);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    addOption(Options.CHGROUP);<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    addOption(Options.CHMOD);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    addOption(Options.MAPPERS);<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    addOption(Options.BANDWIDTH);<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>  }<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>}<a name="line.1139"></a>
+<span class="sourceLineNo">1139</span><a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>  public static void main(String[] args) {<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>  }<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>}<a name="line.1143"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportSnapshotInputFormat.ExportSnapshotRecordReader.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportSnapshotInputFormat.ExportSnapshotRecordReader.html b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportSnapshotInputFormat.ExportSnapshotRecordReader.html
index b77fb8a..4c0b9a7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportSnapshotInputFormat.ExportSnapshotRecordReader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportSnapshotInputFormat.ExportSnapshotRecordReader.html
@@ -1035,116 +1035,120 @@
 <span class="sourceLineNo">1027</span>    // The snapshot references must be copied before the hfiles otherwise the cleaner<a name="line.1027"></a>
 <span class="sourceLineNo">1028</span>    // will remove them because they are unreferenced.<a name="line.1028"></a>
 <span class="sourceLineNo">1029</span>    List&lt;Path&gt; travesedPaths = new ArrayList&lt;&gt;();<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    try {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      LOG.info("Copy Snapshot Manifest");<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      travesedPaths =<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    } catch (IOException e) {<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    } finally {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      if (filesUser != null || filesGroup != null) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>        LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>            + filesUser)<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            + filesGroup));<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>        setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      }<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>      if (filesMode &gt; 0) {<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    if (!targetName.equals(snapshotName)) {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      SnapshotDescription snapshotDesc =<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>          .toBuilder()<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>          .setName(targetName)<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>          .build();<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      if (filesUser != null || filesGroup != null) {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      }<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>      if (filesMode &gt; 0) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1066"></a>
+<span class="sourceLineNo">1030</span>    boolean copySucceeded = false;<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    try {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      LOG.info("Copy Snapshot Manifest from " + snapshotDir + " to " + initialOutputSnapshotDir);<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>      travesedPaths =<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      copySucceeded = true;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>    } catch (IOException e) {<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>    } finally {<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      if (copySucceeded) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>        if (filesUser != null || filesGroup != null) {<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>          LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>              + filesUser)<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>              + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>                  + filesGroup));<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>          setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>        }<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        if (filesMode &gt; 0) {<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>          setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>        }<a name="line.1052"></a>
+<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>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    if (!targetName.equals(snapshotName)) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>      SnapshotDescription snapshotDesc =<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>          .toBuilder()<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>          .setName(targetName)<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>          .build();<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      if (filesUser != null || filesGroup != null) {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>      }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span><a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    // Step 2 - Start MR Job to copy files<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // by the HFileArchiver, since they have no references.<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    try {<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span><a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>      if (!skipTmp) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<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><a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      // Step 4 - Verify snapshot integrity<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      if (verifyTarget) {<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>        LOG.info("Verify snapshot integrity");<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>      }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      LOG.info("Export Completed: " + targetName);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      return 0;<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    } catch (Exception e) {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      LOG.error("Snapshot export failed", e);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      if (!skipTmp) {<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      }<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      return 1;<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    } finally {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      IOUtils.closeStream(inputFs);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      IOUtils.closeStream(outputFs);<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>
-<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>  @Override<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>  protected void printUsage() {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>    super.printUsage();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    System.out.println("\n"<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>        + "Examples:\n"<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        + "  hbase snapshot export \\\n"<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        + "\n"<a name="line.1115"></a>
+<span class="sourceLineNo">1068</span>      if (filesMode &gt; 0) {<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    }<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span><a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // Step 2 - Start MR Job to copy files<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // by the HFileArchiver, since they have no references.<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    try {<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span><a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      if (!skipTmp) {<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>        }<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      }<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span><a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      // Step 4 - Verify snapshot integrity<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      if (verifyTarget) {<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>        LOG.info("Verify snapshot integrity");<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      LOG.info("Export Completed: " + targetName);<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      return 0;<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } catch (Exception e) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      LOG.error("Snapshot export failed", e);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>      if (!skipTmp) {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>      }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      return 1;<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    } finally {<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      IOUtils.closeStream(inputFs);<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>      IOUtils.closeStream(outputFs);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>  }<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span><a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>  @Override<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>  protected void printUsage() {<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    super.printUsage();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    System.out.println("\n"<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>        + "Examples:\n"<a name="line.1115"></a>
 <span class="sourceLineNo">1116</span>        + "  hbase snapshot export \\\n"<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  }<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span><a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>  @Override protected void addOptions() {<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    addOption(Options.COPY_TO);<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    addOption(Options.COPY_FROM);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    addOption(Options.TARGET_NAME);<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    addOption(Options.OVERWRITE);<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    addOption(Options.CHUSER);<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    addOption(Options.CHGROUP);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    addOption(Options.CHMOD);<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    addOption(Options.MAPPERS);<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    addOption(Options.BANDWIDTH);<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>  }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span><a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>  public static void main(String[] args) {<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1137"></a>
+<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>        + "\n"<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        + "  hbase snapshot export \\\n"<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>  }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>  @Override protected void addOptions() {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>    addOption(Options.COPY_TO);<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    addOption(Options.COPY_FROM);<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    addOption(Options.TARGET_NAME);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    addOption(Options.OVERWRITE);<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    addOption(Options.CHUSER);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    addOption(Options.CHGROUP);<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    addOption(Options.CHMOD);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    addOption(Options.MAPPERS);<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    addOption(Options.BANDWIDTH);<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>  }<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>}<a name="line.1139"></a>
+<span class="sourceLineNo">1139</span><a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>  public static void main(String[] args) {<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>  }<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>}<a name="line.1143"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportSnapshotInputFormat.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportSnapshotInputFormat.html b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportSnapshotInputFormat.html
index b77fb8a..4c0b9a7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportSnapshotInputFormat.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportSnapshotInputFormat.html
@@ -1035,116 +1035,120 @@
 <span class="sourceLineNo">1027</span>    // The snapshot references must be copied before the hfiles otherwise the cleaner<a name="line.1027"></a>
 <span class="sourceLineNo">1028</span>    // will remove them because they are unreferenced.<a name="line.1028"></a>
 <span class="sourceLineNo">1029</span>    List&lt;Path&gt; travesedPaths = new ArrayList&lt;&gt;();<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    try {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      LOG.info("Copy Snapshot Manifest");<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      travesedPaths =<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    } catch (IOException e) {<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    } finally {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      if (filesUser != null || filesGroup != null) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>        LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>            + filesUser)<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            + filesGroup));<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>        setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      }<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>      if (filesMode &gt; 0) {<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    if (!targetName.equals(snapshotName)) {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      SnapshotDescription snapshotDesc =<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>          .toBuilder()<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>          .setName(targetName)<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>          .build();<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      if (filesUser != null || filesGroup != null) {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      }<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>      if (filesMode &gt; 0) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1066"></a>
+<span class="sourceLineNo">1030</span>    boolean copySucceeded = false;<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    try {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      LOG.info("Copy Snapshot Manifest from " + snapshotDir + " to " + initialOutputSnapshotDir);<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>      travesedPaths =<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      copySucceeded = true;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>    } catch (IOException e) {<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>    } finally {<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      if (copySucceeded) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>        if (filesUser != null || filesGroup != null) {<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>          LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>              + filesUser)<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>              + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>                  + filesGroup));<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>          setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>        }<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        if (filesMode &gt; 0) {<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>          setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>        }<a name="line.1052"></a>
+<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>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    if (!targetName.equals(snapshotName)) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>      SnapshotDescription snapshotDesc =<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>          .toBuilder()<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>          .setName(targetName)<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>          .build();<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      if (filesUser != null || filesGroup != null) {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>      }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span><a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    // Step 2 - Start MR Job to copy files<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // by the HFileArchiver, since they have no references.<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    try {<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span><a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>      if (!skipTmp) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<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><a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      // Step 4 - Verify snapshot integrity<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      if (verifyTarget) {<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>        LOG.info("Verify snapshot integrity");<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>      }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      LOG.info("Export Completed: " + targetName);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      return 0;<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    } catch (Exception e) {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      LOG.error("Snapshot export failed", e);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      if (!skipTmp) {<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      }<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      return 1;<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    } finally {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      IOUtils.closeStream(inputFs);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      IOUtils.closeStream(outputFs);<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>
-<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>  @Override<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>  protected void printUsage() {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>    super.printUsage();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    System.out.println("\n"<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>        + "Examples:\n"<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        + "  hbase snapshot export \\\n"<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        + "\n"<a name="line.1115"></a>
+<span class="sourceLineNo">1068</span>      if (filesMode &gt; 0) {<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    }<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span><a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // Step 2 - Start MR Job to copy files<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // by the HFileArchiver, since they have no references.<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    try {<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span><a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      if (!skipTmp) {<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>        }<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      }<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span><a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      // Step 4 - Verify snapshot integrity<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      if (verifyTarget) {<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>        LOG.info("Verify snapshot integrity");<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      LOG.info("Export Completed: " + targetName);<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      return 0;<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } catch (Exception e) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      LOG.error("Snapshot export failed", e);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>      if (!skipTmp) {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>      }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      return 1;<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    } finally {<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      IOUtils.closeStream(inputFs);<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>      IOUtils.closeStream(outputFs);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>  }<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span><a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>  @Override<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>  protected void printUsage() {<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    super.printUsage();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    System.out.println("\n"<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>        + "Examples:\n"<a name="line.1115"></a>
 <span class="sourceLineNo">1116</span>        + "  hbase snapshot export \\\n"<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  }<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span><a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>  @Override protected void addOptions() {<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    addOption(Options.COPY_TO);<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    addOption(Options.COPY_FROM);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    addOption(Options.TARGET_NAME);<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    addOption(Options.OVERWRITE);<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    addOption(Options.CHUSER);<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    addOption(Options.CHGROUP);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    addOption(Options.CHMOD);<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    addOption(Options.MAPPERS);<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    addOption(Options.BANDWIDTH);<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>  }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span><a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>  public static void main(String[] args) {<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1137"></a>
+<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>        + "\n"<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        + "  hbase snapshot export \\\n"<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>  }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>  @Override protected void addOptions() {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>    addOption(Options.COPY_TO);<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    addOption(Options.COPY_FROM);<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    addOption(Options.TARGET_NAME);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    addOption(Options.OVERWRITE);<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    addOption(Options.CHUSER);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    addOption(Options.CHGROUP);<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    addOption(Options.CHMOD);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    addOption(Options.MAPPERS);<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    addOption(Options.BANDWIDTH);<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>  }<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>}<a name="line.1139"></a>
+<span class="sourceLineNo">1139</span><a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>  public static void main(String[] args) {<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>  }<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>}<a name="line.1143"></a>
 
 
 


[18/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.NodeAndData.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.NodeAndData.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.NodeAndData.html
index 6d59738..61e3cd8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.NodeAndData.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.NodeAndData.html
@@ -116,20 +116,20 @@
 <span class="sourceLineNo">108</span>   * @throws IOException if unable to connect to zk or config problem<a name="line.108"></a>
 <span class="sourceLineNo">109</span>   */<a name="line.109"></a>
 <span class="sourceLineNo">110</span>  public static RecoverableZooKeeper connect(Configuration conf, Watcher watcher)<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  throws IOException {<a name="line.111"></a>
+<span class="sourceLineNo">111</span>    throws IOException {<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    String ensemble = ZKConfig.getZKQuorumServersString(conf);<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    return connect(conf, ensemble, watcher);<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>  public static RecoverableZooKeeper connect(Configuration conf, String ensemble,<a name="line.116"></a>
 <span class="sourceLineNo">117</span>      Watcher watcher)<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  throws IOException {<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    throws IOException {<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    return connect(conf, ensemble, watcher, null);<a name="line.119"></a>
 <span class="sourceLineNo">120</span>  }<a name="line.120"></a>
 <span class="sourceLineNo">121</span><a name="line.121"></a>
 <span class="sourceLineNo">122</span>  public static RecoverableZooKeeper connect(Configuration conf, String ensemble,<a name="line.122"></a>
 <span class="sourceLineNo">123</span>      Watcher watcher, final String identifier)<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  throws IOException {<a name="line.124"></a>
+<span class="sourceLineNo">124</span>    throws IOException {<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    if(ensemble == null) {<a name="line.125"></a>
 <span class="sourceLineNo">126</span>      throw new IOException("Unable to determine ZooKeeper ensemble");<a name="line.126"></a>
 <span class="sourceLineNo">127</span>    }<a name="line.127"></a>
@@ -355,7 +355,7 @@
 <span class="sourceLineNo">347</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.347"></a>
 <span class="sourceLineNo">348</span>   */<a name="line.348"></a>
 <span class="sourceLineNo">349</span>  public static boolean watchAndCheckExists(ZKWatcher zkw, String znode)<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  throws KeeperException {<a name="line.350"></a>
+<span class="sourceLineNo">350</span>    throws KeeperException {<a name="line.350"></a>
 <span class="sourceLineNo">351</span>    try {<a name="line.351"></a>
 <span class="sourceLineNo">352</span>      Stat s = zkw.getRecoverableZooKeeper().exists(znode, zkw);<a name="line.352"></a>
 <span class="sourceLineNo">353</span>      boolean exists = s != null ? true : false;<a name="line.353"></a>
@@ -409,7 +409,7 @@
 <span class="sourceLineNo">401</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.401"></a>
 <span class="sourceLineNo">402</span>   */<a name="line.402"></a>
 <span class="sourceLineNo">403</span>  public static int checkExists(ZKWatcher zkw, String znode)<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  throws KeeperException {<a name="line.404"></a>
+<span class="sourceLineNo">404</span>    throws KeeperException {<a name="line.404"></a>
 <span class="sourceLineNo">405</span>    try {<a name="line.405"></a>
 <span class="sourceLineNo">406</span>      Stat s = zkw.getRecoverableZooKeeper().exists(znode, null);<a name="line.406"></a>
 <span class="sourceLineNo">407</span>      return s != null ? s.getVersion() : -1;<a name="line.407"></a>
@@ -446,7 +446,7 @@
 <span class="sourceLineNo">438</span>   */<a name="line.438"></a>
 <span class="sourceLineNo">439</span>  public static List&lt;String&gt; listChildrenAndWatchForNewChildren(<a name="line.439"></a>
 <span class="sourceLineNo">440</span>          ZKWatcher zkw, String znode)<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  throws KeeperException {<a name="line.441"></a>
+<span class="sourceLineNo">441</span>    throws KeeperException {<a name="line.441"></a>
 <span class="sourceLineNo">442</span>    try {<a name="line.442"></a>
 <span class="sourceLineNo">443</span>      List&lt;String&gt; children = zkw.getRecoverableZooKeeper().getChildren(znode, zkw);<a name="line.443"></a>
 <span class="sourceLineNo">444</span>      return children;<a name="line.444"></a>
@@ -501,7 +501,7 @@
 <span class="sourceLineNo">493</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.493"></a>
 <span class="sourceLineNo">494</span>   */<a name="line.494"></a>
 <span class="sourceLineNo">495</span>  public static List&lt;String&gt; listChildrenNoWatch(ZKWatcher zkw, String znode)<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  throws KeeperException {<a name="line.496"></a>
+<span class="sourceLineNo">496</span>    throws KeeperException {<a name="line.496"></a>
 <span class="sourceLineNo">497</span>    List&lt;String&gt; children = null;<a name="line.497"></a>
 <span class="sourceLineNo">498</span>    try {<a name="line.498"></a>
 <span class="sourceLineNo">499</span>      // List the children without watching<a name="line.499"></a>
@@ -558,7 +558,7 @@
 <span class="sourceLineNo">550</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.550"></a>
 <span class="sourceLineNo">551</span>   */<a name="line.551"></a>
 <span class="sourceLineNo">552</span>  public static boolean nodeHasChildren(ZKWatcher zkw, String znode)<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  throws KeeperException {<a name="line.553"></a>
+<span class="sourceLineNo">553</span>    throws KeeperException {<a name="line.553"></a>
 <span class="sourceLineNo">554</span>    try {<a name="line.554"></a>
 <span class="sourceLineNo">555</span>      return !zkw.getRecoverableZooKeeper().getChildren(znode, null).isEmpty();<a name="line.555"></a>
 <span class="sourceLineNo">556</span>    } catch(KeeperException.NoNodeException ke) {<a name="line.556"></a>
@@ -590,7 +590,7 @@
 <span class="sourceLineNo">582</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.582"></a>
 <span class="sourceLineNo">583</span>   */<a name="line.583"></a>
 <span class="sourceLineNo">584</span>  public static int getNumberOfChildren(ZKWatcher zkw, String znode)<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  throws KeeperException {<a name="line.585"></a>
+<span class="sourceLineNo">585</span>    throws KeeperException {<a name="line.585"></a>
 <span class="sourceLineNo">586</span>    try {<a name="line.586"></a>
 <span class="sourceLineNo">587</span>      Stat stat = zkw.getRecoverableZooKeeper().exists(znode, null);<a name="line.587"></a>
 <span class="sourceLineNo">588</span>      return stat == null ? 0 : stat.getNumChildren();<a name="line.588"></a>
@@ -641,7 +641,7 @@
 <span class="sourceLineNo">633</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.633"></a>
 <span class="sourceLineNo">634</span>   */<a name="line.634"></a>
 <span class="sourceLineNo">635</span>  public static byte [] getDataAndWatch(ZKWatcher zkw, String znode)<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  throws KeeperException {<a name="line.636"></a>
+<span class="sourceLineNo">636</span>    throws KeeperException {<a name="line.636"></a>
 <span class="sourceLineNo">637</span>    return getDataInternal(zkw, znode, null, true);<a name="line.637"></a>
 <span class="sourceLineNo">638</span>  }<a name="line.638"></a>
 <span class="sourceLineNo">639</span><a name="line.639"></a>
@@ -703,7 +703,7 @@
 <span class="sourceLineNo">695</span>   */<a name="line.695"></a>
 <span class="sourceLineNo">696</span>  public static byte [] getDataNoWatch(ZKWatcher zkw, String znode,<a name="line.696"></a>
 <span class="sourceLineNo">697</span>                                       Stat stat)<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  throws KeeperException {<a name="line.698"></a>
+<span class="sourceLineNo">698</span>    throws KeeperException {<a name="line.698"></a>
 <span class="sourceLineNo">699</span>    try {<a name="line.699"></a>
 <span class="sourceLineNo">700</span>      byte [] data = zkw.getRecoverableZooKeeper().getData(znode, null, stat);<a name="line.700"></a>
 <span class="sourceLineNo">701</span>      logRetrievedMsg(zkw, znode, data, false);<a name="line.701"></a>
@@ -809,7 +809,7 @@
 <span class="sourceLineNo">801</span>   */<a name="line.801"></a>
 <span class="sourceLineNo">802</span>  public static boolean setData(ZKWatcher zkw, String znode,<a name="line.802"></a>
 <span class="sourceLineNo">803</span>                                byte [] data, int expectedVersion)<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.804"></a>
+<span class="sourceLineNo">804</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.804"></a>
 <span class="sourceLineNo">805</span>    try {<a name="line.805"></a>
 <span class="sourceLineNo">806</span>      return zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion) != null;<a name="line.806"></a>
 <span class="sourceLineNo">807</span>    } catch (InterruptedException e) {<a name="line.807"></a>
@@ -853,12 +853,12 @@
 <span class="sourceLineNo">845</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.845"></a>
 <span class="sourceLineNo">846</span>   */<a name="line.846"></a>
 <span class="sourceLineNo">847</span>  public static void setData(ZKWatcher zkw, String znode, byte [] data)<a name="line.847"></a>
-<span class="sourceLineNo">848</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.848"></a>
+<span class="sourceLineNo">848</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.848"></a>
 <span class="sourceLineNo">849</span>    setData(zkw, (SetData)ZKUtilOp.setData(znode, data));<a name="line.849"></a>
 <span class="sourceLineNo">850</span>  }<a name="line.850"></a>
 <span class="sourceLineNo">851</span><a name="line.851"></a>
 <span class="sourceLineNo">852</span>  private static void setData(ZKWatcher zkw, SetData setData)<a name="line.852"></a>
-<span class="sourceLineNo">853</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.853"></a>
+<span class="sourceLineNo">853</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.853"></a>
 <span class="sourceLineNo">854</span>    SetDataRequest sd = (SetDataRequest)toZooKeeperOp(zkw, setData).toRequestRecord();<a name="line.854"></a>
 <span class="sourceLineNo">855</span>    setData(zkw, sd.getPath(), sd.getData(), sd.getVersion());<a name="line.855"></a>
 <span class="sourceLineNo">856</span>  }<a name="line.856"></a>
@@ -899,7 +899,7 @@
 <span class="sourceLineNo">891</span><a name="line.891"></a>
 <span class="sourceLineNo">892</span>  public static ArrayList&lt;ACL&gt; createACL(ZKWatcher zkw, String node,<a name="line.892"></a>
 <span class="sourceLineNo">893</span>                                         boolean isSecureZooKeeper) {<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    if (!node.startsWith(zkw.znodePaths.baseZNode)) {<a name="line.894"></a>
+<span class="sourceLineNo">894</span>    if (!node.startsWith(zkw.getZNodePaths().baseZNode)) {<a name="line.894"></a>
 <span class="sourceLineNo">895</span>      return Ids.OPEN_ACL_UNSAFE;<a name="line.895"></a>
 <span class="sourceLineNo">896</span>    }<a name="line.896"></a>
 <span class="sourceLineNo">897</span>    if (isSecureZooKeeper) {<a name="line.897"></a>
@@ -931,7 +931,7 @@
 <span class="sourceLineNo">923</span>      }<a name="line.923"></a>
 <span class="sourceLineNo">924</span>      // Certain znodes are accessed directly by the client,<a name="line.924"></a>
 <span class="sourceLineNo">925</span>      // so they must be readable by non-authenticated clients<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      if (zkw.znodePaths.isClientReadable(node)) {<a name="line.926"></a>
+<span class="sourceLineNo">926</span>      if (zkw.getZNodePaths().isClientReadable(node)) {<a name="line.926"></a>
 <span class="sourceLineNo">927</span>        acls.addAll(Ids.CREATOR_ALL_ACL);<a name="line.927"></a>
 <span class="sourceLineNo">928</span>        acls.addAll(Ids.READ_ACL_UNSAFE);<a name="line.928"></a>
 <span class="sourceLineNo">929</span>      } else {<a name="line.929"></a>
@@ -967,7 +967,7 @@
 <span class="sourceLineNo">959</span>   */<a name="line.959"></a>
 <span class="sourceLineNo">960</span>  public static boolean createEphemeralNodeAndWatch(ZKWatcher zkw,<a name="line.960"></a>
 <span class="sourceLineNo">961</span>      String znode, byte [] data)<a name="line.961"></a>
-<span class="sourceLineNo">962</span>  throws KeeperException {<a name="line.962"></a>
+<span class="sourceLineNo">962</span>    throws KeeperException {<a name="line.962"></a>
 <span class="sourceLineNo">963</span>    boolean ret = true;<a name="line.963"></a>
 <span class="sourceLineNo">964</span>    try {<a name="line.964"></a>
 <span class="sourceLineNo">965</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.965"></a>
@@ -1007,7 +1007,7 @@
 <span class="sourceLineNo">999</span>   */<a name="line.999"></a>
 <span class="sourceLineNo">1000</span>  public static boolean createNodeIfNotExistsAndWatch(<a name="line.1000"></a>
 <span class="sourceLineNo">1001</span>          ZKWatcher zkw, String znode, byte [] data)<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>  throws KeeperException {<a name="line.1002"></a>
+<span class="sourceLineNo">1002</span>    throws KeeperException {<a name="line.1002"></a>
 <span class="sourceLineNo">1003</span>    boolean ret = true;<a name="line.1003"></a>
 <span class="sourceLineNo">1004</span>    try {<a name="line.1004"></a>
 <span class="sourceLineNo">1005</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1005"></a>
@@ -1074,7 +1074,7 @@
 <span class="sourceLineNo">1066</span>   */<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>  public static int createAndWatch(ZKWatcher zkw,<a name="line.1067"></a>
 <span class="sourceLineNo">1068</span>      String znode, byte [] data)<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>  throws KeeperException, KeeperException.NodeExistsException {<a name="line.1069"></a>
+<span class="sourceLineNo">1069</span>    throws KeeperException, KeeperException.NodeExistsException {<a name="line.1069"></a>
 <span class="sourceLineNo">1070</span>    try {<a name="line.1070"></a>
 <span class="sourceLineNo">1071</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1071"></a>
 <span class="sourceLineNo">1072</span>          CreateMode.PERSISTENT);<a name="line.1072"></a>
@@ -1140,13 +1140,13 @@
 <span class="sourceLineNo">1132</span>   */<a name="line.1132"></a>
 <span class="sourceLineNo">1133</span>  public static void createAndFailSilent(ZKWatcher zkw,<a name="line.1133"></a>
 <span class="sourceLineNo">1134</span>      String znode, byte[] data)<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>  throws KeeperException {<a name="line.1135"></a>
+<span class="sourceLineNo">1135</span>    throws KeeperException {<a name="line.1135"></a>
 <span class="sourceLineNo">1136</span>    createAndFailSilent(zkw,<a name="line.1136"></a>
 <span class="sourceLineNo">1137</span>        (CreateAndFailSilent)ZKUtilOp.createAndFailSilent(znode, data));<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>  }<a name="line.1138"></a>
 <span class="sourceLineNo">1139</span><a name="line.1139"></a>
 <span class="sourceLineNo">1140</span>  private static void createAndFailSilent(ZKWatcher zkw, CreateAndFailSilent cafs)<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>  throws KeeperException {<a name="line.1141"></a>
+<span class="sourceLineNo">1141</span>    throws KeeperException {<a name="line.1141"></a>
 <span class="sourceLineNo">1142</span>    CreateRequest create = (CreateRequest)toZooKeeperOp(zkw, cafs).toRequestRecord();<a name="line.1142"></a>
 <span class="sourceLineNo">1143</span>    String znode = create.getPath();<a name="line.1143"></a>
 <span class="sourceLineNo">1144</span>    try {<a name="line.1144"></a>
@@ -1181,7 +1181,7 @@
 <span class="sourceLineNo">1173</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1173"></a>
 <span class="sourceLineNo">1174</span>   */<a name="line.1174"></a>
 <span class="sourceLineNo">1175</span>  public static void createWithParents(ZKWatcher zkw, String znode)<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>  throws KeeperException {<a name="line.1176"></a>
+<span class="sourceLineNo">1176</span>    throws KeeperException {<a name="line.1176"></a>
 <span class="sourceLineNo">1177</span>    createWithParents(zkw, znode, new byte[0]);<a name="line.1177"></a>
 <span class="sourceLineNo">1178</span>  }<a name="line.1178"></a>
 <span class="sourceLineNo">1179</span><a name="line.1179"></a>
@@ -1199,7 +1199,7 @@
 <span class="sourceLineNo">1191</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1191"></a>
 <span class="sourceLineNo">1192</span>   */<a name="line.1192"></a>
 <span class="sourceLineNo">1193</span>  public static void createWithParents(ZKWatcher zkw, String znode, byte[] data)<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>  throws KeeperException {<a name="line.1194"></a>
+<span class="sourceLineNo">1194</span>    throws KeeperException {<a name="line.1194"></a>
 <span class="sourceLineNo">1195</span>    try {<a name="line.1195"></a>
 <span class="sourceLineNo">1196</span>      if(znode == null) {<a name="line.1196"></a>
 <span class="sourceLineNo">1197</span>        return;<a name="line.1197"></a>
@@ -1224,7 +1224,7 @@
 <span class="sourceLineNo">1216</span>   * Delete the specified node.  Sets no watches.  Throws all exceptions.<a name="line.1216"></a>
 <span class="sourceLineNo">1217</span>   */<a name="line.1217"></a>
 <span class="sourceLineNo">1218</span>  public static void deleteNode(ZKWatcher zkw, String node)<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  throws KeeperException {<a name="line.1219"></a>
+<span class="sourceLineNo">1219</span>    throws KeeperException {<a name="line.1219"></a>
 <span class="sourceLineNo">1220</span>    deleteNode(zkw, node, -1);<a name="line.1220"></a>
 <span class="sourceLineNo">1221</span>  }<a name="line.1221"></a>
 <span class="sourceLineNo">1222</span><a name="line.1222"></a>
@@ -1234,7 +1234,7 @@
 <span class="sourceLineNo">1226</span>   */<a name="line.1226"></a>
 <span class="sourceLineNo">1227</span>  public static boolean deleteNode(ZKWatcher zkw, String node,<a name="line.1227"></a>
 <span class="sourceLineNo">1228</span>                                   int version)<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>  throws KeeperException {<a name="line.1229"></a>
+<span class="sourceLineNo">1229</span>    throws KeeperException {<a name="line.1229"></a>
 <span class="sourceLineNo">1230</span>    try {<a name="line.1230"></a>
 <span class="sourceLineNo">1231</span>      zkw.getRecoverableZooKeeper().delete(node, version);<a name="line.1231"></a>
 <span class="sourceLineNo">1232</span>      return true;<a name="line.1232"></a>
@@ -1254,7 +1254,7 @@
 <span class="sourceLineNo">1246</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1246"></a>
 <span class="sourceLineNo">1247</span>   */<a name="line.1247"></a>
 <span class="sourceLineNo">1248</span>  public static void deleteNodeFailSilent(ZKWatcher zkw, String node)<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>  throws KeeperException {<a name="line.1249"></a>
+<span class="sourceLineNo">1249</span>    throws KeeperException {<a name="line.1249"></a>
 <span class="sourceLineNo">1250</span>    deleteNodeFailSilent(zkw,<a name="line.1250"></a>
 <span class="sourceLineNo">1251</span>      (DeleteNodeFailSilent)ZKUtilOp.deleteNodeFailSilent(node));<a name="line.1251"></a>
 <span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
@@ -1280,7 +1280,7 @@
 <span class="sourceLineNo">1272</span>   * children.<a name="line.1272"></a>
 <span class="sourceLineNo">1273</span>   */<a name="line.1273"></a>
 <span class="sourceLineNo">1274</span>  public static void deleteNodeRecursively(ZKWatcher zkw, String node)<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>  throws KeeperException {<a name="line.1275"></a>
+<span class="sourceLineNo">1275</span>    throws KeeperException {<a name="line.1275"></a>
 <span class="sourceLineNo">1276</span>    deleteNodeRecursivelyMultiOrSequential(zkw, true, node);<a name="line.1276"></a>
 <span class="sourceLineNo">1277</span>  }<a name="line.1277"></a>
 <span class="sourceLineNo">1278</span><a name="line.1278"></a>
@@ -1743,7 +1743,7 @@
 <span class="sourceLineNo">1735</span>  public static String dump(ZKWatcher zkw) {<a name="line.1735"></a>
 <span class="sourceLineNo">1736</span>    StringBuilder sb = new StringBuilder();<a name="line.1736"></a>
 <span class="sourceLineNo">1737</span>    try {<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>      sb.append("HBase is rooted at ").append(zkw.znodePaths.baseZNode);<a name="line.1738"></a>
+<span class="sourceLineNo">1738</span>      sb.append("HBase is rooted at ").append(zkw.getZNodePaths().baseZNode);<a name="line.1738"></a>
 <span class="sourceLineNo">1739</span>      sb.append("\nActive master address: ");<a name="line.1739"></a>
 <span class="sourceLineNo">1740</span>      try {<a name="line.1740"></a>
 <span class="sourceLineNo">1741</span>        sb.append(MasterAddressTracker.getMasterAddress(zkw));<a name="line.1741"></a>
@@ -1751,400 +1751,401 @@
 <span class="sourceLineNo">1743</span>        sb.append("&lt;&lt;FAILED LOOKUP: " + e.getMessage() + "&gt;&gt;");<a name="line.1743"></a>
 <span class="sourceLineNo">1744</span>      }<a name="line.1744"></a>
 <span class="sourceLineNo">1745</span>      sb.append("\nBackup master addresses:");<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      for (String child : listChildrenNoWatch(zkw, zkw.znodePaths.backupMasterAddressesZNode)) {<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        sb.append("\n ").append(child);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      }<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        + new MetaTableLocator().getMetaRegionLocation(zkw));<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>                    + new MetaTableLocator().getMetaRegionLocation(zkw, i));<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      }<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      sb.append("\nRegion servers:");<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>      for (String child : listChildrenNoWatch(zkw, zkw.znodePaths.rsZNode)) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        sb.append("\n ").append(child);<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      try {<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      } catch (KeeperException ke) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>      }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>      for (String server : servers) {<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>        sb.append("\n ").append(server);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        try {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          if (stat == null) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>            break;<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>          }<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span><a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>          for (String s : stat) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            sb.append("\n  ").append(s);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>          }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>        } catch (Exception e) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>        }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    } catch (KeeperException ke) {<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      sb.append("\n" + ke.getMessage());<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    return sb.toString();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>  }<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span><a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>  /**<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>   *<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>   */<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>      throws KeeperException {<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    String replicationZnode = zkw.znodePaths.replicationZNode;<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span><a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>      return;<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>    }<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span><a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>    // do a ls -r on this znode<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    for (String child : children) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      String znode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (znode.equals(zkw.znodePaths.peersZNode)) {<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>        appendPeersZnodes(zkw, znode, sb);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      } else if (znode.equals(zkw.znodePaths.queuesZNode)) {<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        appendRSZnodes(zkw, znode, sb);<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      } else if (znode.equals(zkw.znodePaths.hfileRefsZNode)) {<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>        appendHFileRefsZnodes(zkw, znode, sb);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>      }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>    }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>  }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span><a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>  private static void appendHFileRefsZnodes(ZKWatcher zkw, String hfileRefsZnode,<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    sb.append("\n").append(hfileRefsZnode).append(": ");<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, hfileRefsZnode)) {<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      String znodeToProcess = ZNodePaths.joinZNode(hfileRefsZnode, peerIdZnode);<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>      List&lt;String&gt; peerHFileRefsZnodes = ZKUtil.listChildrenNoWatch(zkw, znodeToProcess);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      int size = peerHFileRefsZnodes.size();<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      for (int i = 0; i &lt; size; i++) {<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        sb.append(peerHFileRefsZnodes.get(i));<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        if (i != size - 1) {<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          sb.append(", ");<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>        }<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>      }<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    }<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>  }<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span><a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>  /**<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>   * @return aq string of replication znodes and log positions<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>   */<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>    StringBuilder sb = new StringBuilder();<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>    return sb.toString();<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>  }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span><a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>      throws KeeperException {<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>    stack.add(znode);<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>    do {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      byte[] data;<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      try {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      } catch (InterruptedException e) {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>        zkw.interruptedException(e);<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>        return;<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      }<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        long position = 0;<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        try {<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>          sb.append(position);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        } catch (DeserializationException ignored) {<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>        } catch (InterruptedException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>          zkw.interruptedException(e);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>          return;<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>        }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>      }<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>    } while (stack.size() &gt; 0);<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>  }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span><a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      byte[] data;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>      try {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      } catch (InterruptedException e) {<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>        zkw.interruptedException(e);<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        return;<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>      }<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>      // parse the data of the above peer znode.<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      try {<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>        String clusterKey = builder.getClusterkey();<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        // add the peer-state.<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>      } catch (IOException ipbe) {<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>  }<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span><a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      "peer-state");<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>      if (!child.equals(peerState)) {<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>        continue;<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span><a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      byte[] peerStateData;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>      try {<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>        sb.append(builder.getState().name());<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      } catch (IOException ipbe) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      } catch (InterruptedException e) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>        zkw.interruptedException(e);<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>        return;<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  }<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span><a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>  /**<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>   * Gets the statistics from the given server.<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>   *<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * @param server  The server to get the statistics from.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param timeout  The socket timeout to use.<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @return The array of response strings.<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   * @throws IOException When the socket communication fails.<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>   */<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>  public static String[] getServerStats(String server, int timeout)<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>  throws IOException {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    String[] sp = server.split(":");<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    if (sp == null || sp.length == 0) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>      return null;<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    }<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span><a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>    String host = sp[0];<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span><a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    try (Socket socket = new Socket()) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      socket.connect(sockAddr, timeout);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span><a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      socket.setSoTimeout(timeout);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          BufferedReader in = new BufferedReader(<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>        out.println("stat");<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>        out.flush();<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>        while (true) {<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>          String line = in.readLine();<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>          if (line != null) {<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>            res.add(line);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>          } else {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>            break;<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        }<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        return res.toArray(new String[res.size()]);<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>      }<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    }<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>  }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    if (!LOG.isTraceEnabled()) {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>      return;<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    }<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span><a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      " byte(s) of data from znode " + znode +<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>          znode.startsWith(zkw.znodePaths.metaZNodePrefix)?<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>            getServerNameOrEmptyString(data):<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>          znode.startsWith(zkw.znodePaths.backupMasterAddressesZNode)?<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>            getServerNameOrEmptyString(data):<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>  }<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    try {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    } catch (DeserializationException e) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>      return "";<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    }<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>  }<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span><a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>  /**<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>   * @throws IOException on ZK errors<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>   */<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>  public static void waitForBaseZNode(Configuration conf) throws IOException {<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    LOG.info("Waiting until the base znode is available");<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>    String parentZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>        HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>    ZooKeeper zk = new ZooKeeper(ZKConfig.getZKQuorumServersString(conf),<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>        conf.getInt(HConstants.ZK_SESSION_TIMEOUT,<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>        HConstants.DEFAULT_ZK_SESSION_TIMEOUT), EmptyWatcher.instance);<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span><a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final int maxTimeMs = 10000;<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span><a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>    KeeperException keeperEx = null;<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    try {<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      try {<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>        for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>          try {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>            if (zk.exists(parentZNode, false) != null) {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>              LOG.info("Parent znode exists: " + parentZNode);<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>              keeperEx = null;<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>              break;<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>            }<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          } catch (KeeperException e) {<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>            keeperEx = e;<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          }<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>          Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>        }<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>      } finally {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>        zk.close();<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>      }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    } catch (InterruptedException ex) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>      Thread.currentThread().interrupt();<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    if (keeperEx != null) {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>      throw new IOException(keeperEx);<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span><a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>  /**<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>   * Convert a {@link DeserializationException} to a more palatable {@link KeeperException}.<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>   * Used when can't let a {@link DeserializationException} out w/o changing public API.<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>   * @param e Exception to convert<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>   * @return Converted exception<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>   */<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>  public static KeeperException convert(final DeserializationException e) {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    KeeperException ke = new KeeperException.DataInconsistencyException();<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>    ke.initCause(e);<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>    return ke;<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>  }<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span><a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>  /**<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>   * Recursively print the current state of ZK (non-transactional)<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>   * @param root name of the root directory in zk to print<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>   */<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>  public static void logZKTree(ZKWatcher zkw, String root) {<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    if (!LOG.isDebugEnabled()) {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      return;<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    }<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span><a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>    LOG.debug("Current zk system:");<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>    String prefix = "|-";<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>    LOG.debug(prefix + root);<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    try {<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      logZKTree(zkw, root, prefix);<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>    } catch (KeeperException e) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      throw new RuntimeException(e);<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    }<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>  }<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span><a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>  /**<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>   * Helper method to print the current state of the ZK tree.<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * @see #logZKTree(ZKWatcher, String)<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * @throws KeeperException if an unexpected exception occurs<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   */<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>  protected static void logZKTree(ZKWatcher zkw, String root, String prefix)<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      throws KeeperException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, root);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span><a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>    if (children == null) {<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      return;<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>    }<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span><a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    for (String child : children) {<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>      LOG.debug(prefix + child);<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      String node = ZNodePaths.joinZNode(root.equals("/") ? "" : root, child);<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      logZKTree(zkw, node, prefix + "---");<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span><a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  /**<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>   * @param position the position to serialize<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>   * @return Serialized protobuf of &lt;code&gt;position&lt;/code&gt; with pb magic prefix prepended suitable<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>   *         for use as content of an wal position in a replication queue.<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>   */<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>  public static byte[] positionToByteArray(final long position) {<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>    byte[] bytes = ReplicationProtos.ReplicationHLogPosition.newBuilder().setPosition(position)<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>        .build().toByteArray();<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    return ProtobufUtil.prependPBMagic(bytes);<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>  }<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span><a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  /**<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>   * @param bytes - Content of a WAL position znode.<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>   * @return long - The current WAL position.<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>   * @throws DeserializationException if the WAL position cannot be parsed<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>   */<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>  public static long parseWALPositionFrom(final byte[] bytes) throws DeserializationException {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>    if (bytes == null) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      throw new DeserializationException("Unable to parse null WAL position.");<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>    }<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    if (ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      ReplicationProtos.ReplicationHLogPosition.Builder builder =<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          ReplicationProtos.ReplicationHLogPosition.newBuilder();<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>      ReplicationProtos.ReplicationHLogPosition position;<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>      try {<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        position = builder.build();<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      } catch (IOException e) {<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>        throw new DeserializationException(e);<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      return position.getPosition();<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    } else {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>      if (bytes.length &gt; 0) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>        return Bytes.toLong(bytes);<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>      return 0;<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  }<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>}<a name="line.2139"></a>
+<span class="sourceLineNo">1746</span>      for (String child : listChildrenNoWatch(zkw,<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>              zkw.getZNodePaths().backupMasterAddressesZNode)) {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        sb.append("\n ").append(child);<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>      }<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        + new MetaTableLocator().getMetaRegionLocation(zkw));<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>                    + new MetaTableLocator().getMetaRegionLocation(zkw, i));<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      }<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      sb.append("\nRegion servers:");<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      for (String child : listChildrenNoWatch(zkw, zkw.getZNodePaths().rsZNode)) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>        sb.append("\n ").append(child);<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>      }<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>      try {<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      } catch (KeeperException ke) {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>      for (String server : servers) {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>        sb.append("\n ").append(server);<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        try {<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>          if (stat == null) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>            break;<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>          }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span><a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          for (String s : stat) {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>            sb.append("\n  ").append(s);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          }<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>        } catch (Exception e) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        }<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>      }<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    } catch (KeeperException ke) {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      sb.append("\n" + ke.getMessage());<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>    }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    return sb.toString();<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  /**<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>   *<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>   */<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      throws KeeperException {<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>    String replicationZnode = zkw.getZNodePaths().replicationZNode;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span><a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>      return;<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    }<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span><a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // do a ls -r on this znode<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>    for (String child : children) {<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      String znode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>      if (znode.equals(zkw.getZNodePaths().peersZNode)) {<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>        appendPeersZnodes(zkw, znode, sb);<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>      } else if (znode.equals(zkw.getZNodePaths().queuesZNode)) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        appendRSZnodes(zkw, znode, sb);<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      } else if (znode.equals(zkw.getZNodePaths().hfileRefsZNode)) {<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>        appendHFileRefsZnodes(zkw, znode, sb);<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      }<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>    }<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>  }<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span><a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>  private static void appendHFileRefsZnodes(ZKWatcher zkw, String hfileRefsZnode,<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>    sb.append("\n").append(hfileRefsZnode).append(": ");<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, hfileRefsZnode)) {<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      String znodeToProcess = ZNodePaths.joinZNode(hfileRefsZnode, peerIdZnode);<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>      List&lt;String&gt; peerHFileRefsZnodes = ZKUtil.listChildrenNoWatch(zkw, znodeToProcess);<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>      int size = peerHFileRefsZnodes.size();<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>      for (int i = 0; i &lt; size; i++) {<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>        sb.append(peerHFileRefsZnodes.get(i));<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (i != size - 1) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          sb.append(", ");<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>      }<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    }<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>  }<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span><a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>  /**<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>   * @return aq string of replication znodes and log positions<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>   */<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>    StringBuilder sb = new StringBuilder();<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    return sb.toString();<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>  }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span><a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>      throws KeeperException {<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    stack.add(znode);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>    do {<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      byte[] data;<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      try {<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      } catch (InterruptedException e) {<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>        zkw.interruptedException(e);<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>        return;<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      }<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>        long position = 0;<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>        try {<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>          sb.append(position);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        } catch (DeserializationException ignored) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        } catch (InterruptedException e) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>          zkw.interruptedException(e);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>          return;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      }<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    } while (stack.size() &gt; 0);<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>  }<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span><a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>      byte[] data;<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>      try {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>      } catch (InterruptedException e) {<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>        zkw.interruptedException(e);<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>        return;<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>      }<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // parse the data of the above peer znode.<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      try {<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>        String clusterKey = builder.getClusterkey();<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        // add the peer-state.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>      } catch (IOException ipbe) {<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>      }<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>    }<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>  }<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span><a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      "peer-state");<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (!child.equals(peerState)) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        continue;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span><a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>      byte[] peerStateData;<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>      try {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        sb.append(builder.getState().name());<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>      } catch (IOException ipbe) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      } catch (InterruptedException e) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>        zkw.interruptedException(e);<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>    }<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>  }<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span><a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>  /**<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>   * Gets the statistics from the given server.<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>   *<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>   * @param server  The server to get the statistics from.<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>   * @param timeout  The socket timeout to use.<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>   * @return The array of response strings.<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>   * @throws IOException When the socket communication fails.<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   */<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>  public static String[] getServerStats(String server, int timeout)<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>    throws IOException {<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>    String[] sp = server.split(":");<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>    if (sp == null || sp.length == 0) {<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>      return null;<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>    }<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span><a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    String host = sp[0];<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span><a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    try (Socket socket = new Socket()) {<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>      socket.connect(sockAddr, timeout);<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span><a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>      socket.setSoTimeout(timeout);<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>          BufferedReader in = new BufferedReader(<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        out.println("stat");<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>        out.flush();<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>        while (true) {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>          String line = in.readLine();<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>          if (line != null) {<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            res.add(line);<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          } else {<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>            break;<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>          }<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>        }<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>        return res.toArray(new String[res.size()]);<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>      }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    }<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>  }<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>    if (!LOG.isTraceEnabled()) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      return;<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>    }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span><a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>      " byte(s) of data from znode " + znode +<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>          znode.startsWith(zkw.getZNodePaths().metaZNodePrefix)?<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>            getServerNameOrEmptyString(data):<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>          znode.startsWith(zkw.getZNodePaths().backupMasterAddressesZNode)?<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>            getServerNameOrEmptyString(data):<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>  }<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span><a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    try {<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>    } catch (DeserializationException e) {<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>      return "";<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    }<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>  }<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span><a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>  /**<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>   * @throws IOException on ZK err

<TRUNCATED>

[42/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/apidocs/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html b/apidocs/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html
index 5c18280..f1f36a4 100644
--- a/apidocs/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html
+++ b/apidocs/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html
@@ -393,7 +393,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>printUsage</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html#line.1108">printUsage</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html#line.1112">printUsage</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code>printUsage</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.util.AbstractHBaseTool</code></dd>
@@ -406,7 +406,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>addOptions</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html#line.1121">addOptions</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html#line.1125">addOptions</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code>org.apache.hadoop.hbase.util.AbstractHBaseTool</code></span></div>
 <div class="block">Override this to add command-line options using <code>AbstractHBaseTool.addOptWithArg(java.lang.String, java.lang.String)</code>
  and similar methods.</div>
@@ -422,7 +422,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html#line.1136">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html#line.1140">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/apidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html b/apidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html
index b77fb8a..4c0b9a7 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html
@@ -1035,116 +1035,120 @@
 <span class="sourceLineNo">1027</span>    // The snapshot references must be copied before the hfiles otherwise the cleaner<a name="line.1027"></a>
 <span class="sourceLineNo">1028</span>    // will remove them because they are unreferenced.<a name="line.1028"></a>
 <span class="sourceLineNo">1029</span>    List&lt;Path&gt; travesedPaths = new ArrayList&lt;&gt;();<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    try {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      LOG.info("Copy Snapshot Manifest");<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      travesedPaths =<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    } catch (IOException e) {<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    } finally {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      if (filesUser != null || filesGroup != null) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>        LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>            + filesUser)<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            + filesGroup));<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>        setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      }<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>      if (filesMode &gt; 0) {<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    if (!targetName.equals(snapshotName)) {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      SnapshotDescription snapshotDesc =<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>          .toBuilder()<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>          .setName(targetName)<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>          .build();<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      if (filesUser != null || filesGroup != null) {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      }<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>      if (filesMode &gt; 0) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1066"></a>
+<span class="sourceLineNo">1030</span>    boolean copySucceeded = false;<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    try {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      LOG.info("Copy Snapshot Manifest from " + snapshotDir + " to " + initialOutputSnapshotDir);<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>      travesedPaths =<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      copySucceeded = true;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>    } catch (IOException e) {<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>    } finally {<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      if (copySucceeded) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>        if (filesUser != null || filesGroup != null) {<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>          LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>              + filesUser)<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>              + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>                  + filesGroup));<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>          setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>        }<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        if (filesMode &gt; 0) {<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>          setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>        }<a name="line.1052"></a>
+<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>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    if (!targetName.equals(snapshotName)) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>      SnapshotDescription snapshotDesc =<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>          .toBuilder()<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>          .setName(targetName)<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>          .build();<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      if (filesUser != null || filesGroup != null) {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>      }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span><a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    // Step 2 - Start MR Job to copy files<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // by the HFileArchiver, since they have no references.<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    try {<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span><a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>      if (!skipTmp) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<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><a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      // Step 4 - Verify snapshot integrity<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      if (verifyTarget) {<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>        LOG.info("Verify snapshot integrity");<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>      }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      LOG.info("Export Completed: " + targetName);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      return 0;<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    } catch (Exception e) {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      LOG.error("Snapshot export failed", e);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      if (!skipTmp) {<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      }<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      return 1;<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    } finally {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      IOUtils.closeStream(inputFs);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      IOUtils.closeStream(outputFs);<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>
-<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>  @Override<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>  protected void printUsage() {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>    super.printUsage();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    System.out.println("\n"<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>        + "Examples:\n"<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        + "  hbase snapshot export \\\n"<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        + "\n"<a name="line.1115"></a>
+<span class="sourceLineNo">1068</span>      if (filesMode &gt; 0) {<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    }<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span><a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // Step 2 - Start MR Job to copy files<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // by the HFileArchiver, since they have no references.<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    try {<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span><a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      if (!skipTmp) {<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>        }<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      }<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span><a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      // Step 4 - Verify snapshot integrity<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      if (verifyTarget) {<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>        LOG.info("Verify snapshot integrity");<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      LOG.info("Export Completed: " + targetName);<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      return 0;<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } catch (Exception e) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      LOG.error("Snapshot export failed", e);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>      if (!skipTmp) {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>      }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      return 1;<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    } finally {<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      IOUtils.closeStream(inputFs);<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>      IOUtils.closeStream(outputFs);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>  }<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span><a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>  @Override<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>  protected void printUsage() {<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    super.printUsage();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    System.out.println("\n"<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>        + "Examples:\n"<a name="line.1115"></a>
 <span class="sourceLineNo">1116</span>        + "  hbase snapshot export \\\n"<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  }<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span><a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>  @Override protected void addOptions() {<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    addOption(Options.COPY_TO);<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    addOption(Options.COPY_FROM);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    addOption(Options.TARGET_NAME);<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    addOption(Options.OVERWRITE);<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    addOption(Options.CHUSER);<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    addOption(Options.CHGROUP);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    addOption(Options.CHMOD);<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    addOption(Options.MAPPERS);<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    addOption(Options.BANDWIDTH);<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>  }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span><a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>  public static void main(String[] args) {<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1137"></a>
+<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>        + "\n"<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        + "  hbase snapshot export \\\n"<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>  }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>  @Override protected void addOptions() {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>    addOption(Options.COPY_TO);<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    addOption(Options.COPY_FROM);<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    addOption(Options.TARGET_NAME);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    addOption(Options.OVERWRITE);<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    addOption(Options.CHUSER);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    addOption(Options.CHGROUP);<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    addOption(Options.CHMOD);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    addOption(Options.MAPPERS);<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    addOption(Options.BANDWIDTH);<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>  }<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>}<a name="line.1139"></a>
+<span class="sourceLineNo">1139</span><a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>  public static void main(String[] args) {<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>  }<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>}<a name="line.1143"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 265c118..1a0238c 100644
--- a/book.html
+++ b/book.html
@@ -6849,6 +6849,12 @@ It was (late!) deprecated in hbase-1.2.7, hbase-1.4.0, and hbase-1.3.2.</p>
 sweet facility which improved random read latencies at the expensive of slowed writes,
 write the HBase developers list at <em>dev at hbase dot apache dot org</em>.</p>
 </div>
+<div class="paragraph">
+<p>The prefix-tree encoding needs to be removed from all tables before upgrading to HBase 2.0+.
+To do that first you need to change the encoding from PREFIX_TREE to something else that is supported in HBase 2.0.
+After that you have to major compact the tables that were using PREFIX_TREE encoding before.
+To check which column families are using incompatible data block encoding you can use <a href="#ops.pre-upgrade">Pre-Upgrade Validator</a>.</p>
+</div>
 <div id="upgrade2.0.metrics" class="paragraph">
 <div class="title">Changed metrics</div>
 <p>The following metrics have changed names:</p>
@@ -27385,6 +27391,34 @@ For general usage instructions, pass the <code>-h</code> option.</p>
 <p>The LoadTestTool has received many updates in recent HBase releases, including support for namespaces, support for tags, cell-level ACLS and visibility labels, testing security-related features, ability to specify the number of regions per server, tests for multi-get RPC calls, and tests relating to replication.</p>
 </div>
 </div>
+<div class="sect2">
+<h3 id="ops.pre-upgrade"><a class="anchor" href="#ops.pre-upgrade"></a>146.22. Pre-Upgrade validator</h3>
+<div class="paragraph">
+<p>Pre-Upgrade validator tool can be used to check the cluster for known incompatibilities before upgrading from HBase 1 to HBase 2.
+To run all the checks use the <code>-all</code> flag.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">$ bin/hbase pre-upgrade -all</code></pre>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_datablockencoding_validation"><a class="anchor" href="#_datablockencoding_validation"></a>146.22.1. DataBlockEncoding validation</h4>
+<div class="paragraph">
+<p>HBase 2.0 removed <code>PREFIX_TREE</code> Data Block Encoding from column families.
+To verify that none of the column families are using incompatible Data Block Encodings in the cluster run the following command.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">$ bin/hbase pre-upgrade -validateDBE</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This check validates all column families and print out any incompatibilities.
+To change <code>PREFIX_TREE</code> encoding to supported one check <a href="#upgrade2.0.prefix-tree.removed"><em>prefix-tree</em> encoding removed</a>.</p>
+</div>
+</div>
+</div>
 </div>
 </div>
 <div class="sect1">
@@ -33216,8 +33250,20 @@ The preferred commit message format is:</p>
 <div class="sect5">
 <h6 id="committer.amending.author"><a class="anchor" href="#committer.amending.author"></a>Add Amending-Author when a conflict cherrypick backporting</h6>
 <div class="paragraph">
-<p>We&#8217;ve established the practice of committing to master and then cherry picking back to branches whenever possible.
-When there is a minor conflict we can fix it up and just proceed with the commit.
+<p>We&#8217;ve established the practice of committing to master and then cherry picking back to branches whenever possible, unless</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>it&#8217;s breaking compat: In which case, if it can go in minor releases, backport to branch-1 and branch-2.</p>
+</li>
+<li>
+<p>it&#8217;s a new feature: No for maintenance releases, For minor releases, discuss and arrive at consensus.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>When there is a minor conflict we can fix it up and just proceed with the commit.
 The resulting commit retains the original author.
 When the amending author is different from the original committer, add notice of this at the end of the commit message as: <code>Amending-Author: Author
                                 &lt;committer&amp;apache&gt;</code> See discussion at <a href="http://search-hadoop.com/m/DHED4wHGYS">HBase, mail # dev
@@ -36354,7 +36400,7 @@ It was removed in hbase-2.0.0. It was a good idea but little uptake. If interest
 <ul>
 <li>
 <p>If you have long keys (compared to the values) or many columns, use a prefix encoder.
-FAST_DIFF is recommended, as more testing is needed for Prefix Tree encoding.</p>
+FAST_DIFF is recommended.</p>
 </li>
 <li>
 <p>If the values are large (and not precompressed, such as images), use a data block compressor.</p>
@@ -37358,7 +37404,7 @@ For more information see <a href="#hfilev2.overview">hfilev2.overview</a>.</p>
 Therefore, consumers must read the file&#8217;s info block prior to reading any data blocks.</p>
 </div>
 <div class="paragraph">
-<p>When writing a Version 3 HFile, HBase will always include `MAX_TAGS_LEN ` when flushing the memstore to underlying filesystem and when using prefix tree encoding for data blocks, as described in <a href="#compression">compression</a>.</p>
+<p>When writing a Version 3 HFile, HBase will always include <code>MAX_TAGS_LEN</code> when flushing the memstore to underlying filesystem.</p>
 </div>
 <div class="paragraph">
 <p>When compacting extant files, the default writer will omit <code>MAX_TAGS_LEN</code> if all of the files selected do not themselves contain any cells with tags.</p>
@@ -38004,7 +38050,7 @@ The server will return cellblocks compressed using this same compressor as long
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-06-01 14:29:52 UTC
+Last updated 2018-06-02 14:29:49 UTC
 </div>
 </div>
 </body>

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


[15/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html
index 6d59738..61e3cd8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html
@@ -116,20 +116,20 @@
 <span class="sourceLineNo">108</span>   * @throws IOException if unable to connect to zk or config problem<a name="line.108"></a>
 <span class="sourceLineNo">109</span>   */<a name="line.109"></a>
 <span class="sourceLineNo">110</span>  public static RecoverableZooKeeper connect(Configuration conf, Watcher watcher)<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  throws IOException {<a name="line.111"></a>
+<span class="sourceLineNo">111</span>    throws IOException {<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    String ensemble = ZKConfig.getZKQuorumServersString(conf);<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    return connect(conf, ensemble, watcher);<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>  public static RecoverableZooKeeper connect(Configuration conf, String ensemble,<a name="line.116"></a>
 <span class="sourceLineNo">117</span>      Watcher watcher)<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  throws IOException {<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    throws IOException {<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    return connect(conf, ensemble, watcher, null);<a name="line.119"></a>
 <span class="sourceLineNo">120</span>  }<a name="line.120"></a>
 <span class="sourceLineNo">121</span><a name="line.121"></a>
 <span class="sourceLineNo">122</span>  public static RecoverableZooKeeper connect(Configuration conf, String ensemble,<a name="line.122"></a>
 <span class="sourceLineNo">123</span>      Watcher watcher, final String identifier)<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  throws IOException {<a name="line.124"></a>
+<span class="sourceLineNo">124</span>    throws IOException {<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    if(ensemble == null) {<a name="line.125"></a>
 <span class="sourceLineNo">126</span>      throw new IOException("Unable to determine ZooKeeper ensemble");<a name="line.126"></a>
 <span class="sourceLineNo">127</span>    }<a name="line.127"></a>
@@ -355,7 +355,7 @@
 <span class="sourceLineNo">347</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.347"></a>
 <span class="sourceLineNo">348</span>   */<a name="line.348"></a>
 <span class="sourceLineNo">349</span>  public static boolean watchAndCheckExists(ZKWatcher zkw, String znode)<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  throws KeeperException {<a name="line.350"></a>
+<span class="sourceLineNo">350</span>    throws KeeperException {<a name="line.350"></a>
 <span class="sourceLineNo">351</span>    try {<a name="line.351"></a>
 <span class="sourceLineNo">352</span>      Stat s = zkw.getRecoverableZooKeeper().exists(znode, zkw);<a name="line.352"></a>
 <span class="sourceLineNo">353</span>      boolean exists = s != null ? true : false;<a name="line.353"></a>
@@ -409,7 +409,7 @@
 <span class="sourceLineNo">401</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.401"></a>
 <span class="sourceLineNo">402</span>   */<a name="line.402"></a>
 <span class="sourceLineNo">403</span>  public static int checkExists(ZKWatcher zkw, String znode)<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  throws KeeperException {<a name="line.404"></a>
+<span class="sourceLineNo">404</span>    throws KeeperException {<a name="line.404"></a>
 <span class="sourceLineNo">405</span>    try {<a name="line.405"></a>
 <span class="sourceLineNo">406</span>      Stat s = zkw.getRecoverableZooKeeper().exists(znode, null);<a name="line.406"></a>
 <span class="sourceLineNo">407</span>      return s != null ? s.getVersion() : -1;<a name="line.407"></a>
@@ -446,7 +446,7 @@
 <span class="sourceLineNo">438</span>   */<a name="line.438"></a>
 <span class="sourceLineNo">439</span>  public static List&lt;String&gt; listChildrenAndWatchForNewChildren(<a name="line.439"></a>
 <span class="sourceLineNo">440</span>          ZKWatcher zkw, String znode)<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  throws KeeperException {<a name="line.441"></a>
+<span class="sourceLineNo">441</span>    throws KeeperException {<a name="line.441"></a>
 <span class="sourceLineNo">442</span>    try {<a name="line.442"></a>
 <span class="sourceLineNo">443</span>      List&lt;String&gt; children = zkw.getRecoverableZooKeeper().getChildren(znode, zkw);<a name="line.443"></a>
 <span class="sourceLineNo">444</span>      return children;<a name="line.444"></a>
@@ -501,7 +501,7 @@
 <span class="sourceLineNo">493</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.493"></a>
 <span class="sourceLineNo">494</span>   */<a name="line.494"></a>
 <span class="sourceLineNo">495</span>  public static List&lt;String&gt; listChildrenNoWatch(ZKWatcher zkw, String znode)<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  throws KeeperException {<a name="line.496"></a>
+<span class="sourceLineNo">496</span>    throws KeeperException {<a name="line.496"></a>
 <span class="sourceLineNo">497</span>    List&lt;String&gt; children = null;<a name="line.497"></a>
 <span class="sourceLineNo">498</span>    try {<a name="line.498"></a>
 <span class="sourceLineNo">499</span>      // List the children without watching<a name="line.499"></a>
@@ -558,7 +558,7 @@
 <span class="sourceLineNo">550</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.550"></a>
 <span class="sourceLineNo">551</span>   */<a name="line.551"></a>
 <span class="sourceLineNo">552</span>  public static boolean nodeHasChildren(ZKWatcher zkw, String znode)<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  throws KeeperException {<a name="line.553"></a>
+<span class="sourceLineNo">553</span>    throws KeeperException {<a name="line.553"></a>
 <span class="sourceLineNo">554</span>    try {<a name="line.554"></a>
 <span class="sourceLineNo">555</span>      return !zkw.getRecoverableZooKeeper().getChildren(znode, null).isEmpty();<a name="line.555"></a>
 <span class="sourceLineNo">556</span>    } catch(KeeperException.NoNodeException ke) {<a name="line.556"></a>
@@ -590,7 +590,7 @@
 <span class="sourceLineNo">582</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.582"></a>
 <span class="sourceLineNo">583</span>   */<a name="line.583"></a>
 <span class="sourceLineNo">584</span>  public static int getNumberOfChildren(ZKWatcher zkw, String znode)<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  throws KeeperException {<a name="line.585"></a>
+<span class="sourceLineNo">585</span>    throws KeeperException {<a name="line.585"></a>
 <span class="sourceLineNo">586</span>    try {<a name="line.586"></a>
 <span class="sourceLineNo">587</span>      Stat stat = zkw.getRecoverableZooKeeper().exists(znode, null);<a name="line.587"></a>
 <span class="sourceLineNo">588</span>      return stat == null ? 0 : stat.getNumChildren();<a name="line.588"></a>
@@ -641,7 +641,7 @@
 <span class="sourceLineNo">633</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.633"></a>
 <span class="sourceLineNo">634</span>   */<a name="line.634"></a>
 <span class="sourceLineNo">635</span>  public static byte [] getDataAndWatch(ZKWatcher zkw, String znode)<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  throws KeeperException {<a name="line.636"></a>
+<span class="sourceLineNo">636</span>    throws KeeperException {<a name="line.636"></a>
 <span class="sourceLineNo">637</span>    return getDataInternal(zkw, znode, null, true);<a name="line.637"></a>
 <span class="sourceLineNo">638</span>  }<a name="line.638"></a>
 <span class="sourceLineNo">639</span><a name="line.639"></a>
@@ -703,7 +703,7 @@
 <span class="sourceLineNo">695</span>   */<a name="line.695"></a>
 <span class="sourceLineNo">696</span>  public static byte [] getDataNoWatch(ZKWatcher zkw, String znode,<a name="line.696"></a>
 <span class="sourceLineNo">697</span>                                       Stat stat)<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  throws KeeperException {<a name="line.698"></a>
+<span class="sourceLineNo">698</span>    throws KeeperException {<a name="line.698"></a>
 <span class="sourceLineNo">699</span>    try {<a name="line.699"></a>
 <span class="sourceLineNo">700</span>      byte [] data = zkw.getRecoverableZooKeeper().getData(znode, null, stat);<a name="line.700"></a>
 <span class="sourceLineNo">701</span>      logRetrievedMsg(zkw, znode, data, false);<a name="line.701"></a>
@@ -809,7 +809,7 @@
 <span class="sourceLineNo">801</span>   */<a name="line.801"></a>
 <span class="sourceLineNo">802</span>  public static boolean setData(ZKWatcher zkw, String znode,<a name="line.802"></a>
 <span class="sourceLineNo">803</span>                                byte [] data, int expectedVersion)<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.804"></a>
+<span class="sourceLineNo">804</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.804"></a>
 <span class="sourceLineNo">805</span>    try {<a name="line.805"></a>
 <span class="sourceLineNo">806</span>      return zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion) != null;<a name="line.806"></a>
 <span class="sourceLineNo">807</span>    } catch (InterruptedException e) {<a name="line.807"></a>
@@ -853,12 +853,12 @@
 <span class="sourceLineNo">845</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.845"></a>
 <span class="sourceLineNo">846</span>   */<a name="line.846"></a>
 <span class="sourceLineNo">847</span>  public static void setData(ZKWatcher zkw, String znode, byte [] data)<a name="line.847"></a>
-<span class="sourceLineNo">848</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.848"></a>
+<span class="sourceLineNo">848</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.848"></a>
 <span class="sourceLineNo">849</span>    setData(zkw, (SetData)ZKUtilOp.setData(znode, data));<a name="line.849"></a>
 <span class="sourceLineNo">850</span>  }<a name="line.850"></a>
 <span class="sourceLineNo">851</span><a name="line.851"></a>
 <span class="sourceLineNo">852</span>  private static void setData(ZKWatcher zkw, SetData setData)<a name="line.852"></a>
-<span class="sourceLineNo">853</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.853"></a>
+<span class="sourceLineNo">853</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.853"></a>
 <span class="sourceLineNo">854</span>    SetDataRequest sd = (SetDataRequest)toZooKeeperOp(zkw, setData).toRequestRecord();<a name="line.854"></a>
 <span class="sourceLineNo">855</span>    setData(zkw, sd.getPath(), sd.getData(), sd.getVersion());<a name="line.855"></a>
 <span class="sourceLineNo">856</span>  }<a name="line.856"></a>
@@ -899,7 +899,7 @@
 <span class="sourceLineNo">891</span><a name="line.891"></a>
 <span class="sourceLineNo">892</span>  public static ArrayList&lt;ACL&gt; createACL(ZKWatcher zkw, String node,<a name="line.892"></a>
 <span class="sourceLineNo">893</span>                                         boolean isSecureZooKeeper) {<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    if (!node.startsWith(zkw.znodePaths.baseZNode)) {<a name="line.894"></a>
+<span class="sourceLineNo">894</span>    if (!node.startsWith(zkw.getZNodePaths().baseZNode)) {<a name="line.894"></a>
 <span class="sourceLineNo">895</span>      return Ids.OPEN_ACL_UNSAFE;<a name="line.895"></a>
 <span class="sourceLineNo">896</span>    }<a name="line.896"></a>
 <span class="sourceLineNo">897</span>    if (isSecureZooKeeper) {<a name="line.897"></a>
@@ -931,7 +931,7 @@
 <span class="sourceLineNo">923</span>      }<a name="line.923"></a>
 <span class="sourceLineNo">924</span>      // Certain znodes are accessed directly by the client,<a name="line.924"></a>
 <span class="sourceLineNo">925</span>      // so they must be readable by non-authenticated clients<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      if (zkw.znodePaths.isClientReadable(node)) {<a name="line.926"></a>
+<span class="sourceLineNo">926</span>      if (zkw.getZNodePaths().isClientReadable(node)) {<a name="line.926"></a>
 <span class="sourceLineNo">927</span>        acls.addAll(Ids.CREATOR_ALL_ACL);<a name="line.927"></a>
 <span class="sourceLineNo">928</span>        acls.addAll(Ids.READ_ACL_UNSAFE);<a name="line.928"></a>
 <span class="sourceLineNo">929</span>      } else {<a name="line.929"></a>
@@ -967,7 +967,7 @@
 <span class="sourceLineNo">959</span>   */<a name="line.959"></a>
 <span class="sourceLineNo">960</span>  public static boolean createEphemeralNodeAndWatch(ZKWatcher zkw,<a name="line.960"></a>
 <span class="sourceLineNo">961</span>      String znode, byte [] data)<a name="line.961"></a>
-<span class="sourceLineNo">962</span>  throws KeeperException {<a name="line.962"></a>
+<span class="sourceLineNo">962</span>    throws KeeperException {<a name="line.962"></a>
 <span class="sourceLineNo">963</span>    boolean ret = true;<a name="line.963"></a>
 <span class="sourceLineNo">964</span>    try {<a name="line.964"></a>
 <span class="sourceLineNo">965</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.965"></a>
@@ -1007,7 +1007,7 @@
 <span class="sourceLineNo">999</span>   */<a name="line.999"></a>
 <span class="sourceLineNo">1000</span>  public static boolean createNodeIfNotExistsAndWatch(<a name="line.1000"></a>
 <span class="sourceLineNo">1001</span>          ZKWatcher zkw, String znode, byte [] data)<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>  throws KeeperException {<a name="line.1002"></a>
+<span class="sourceLineNo">1002</span>    throws KeeperException {<a name="line.1002"></a>
 <span class="sourceLineNo">1003</span>    boolean ret = true;<a name="line.1003"></a>
 <span class="sourceLineNo">1004</span>    try {<a name="line.1004"></a>
 <span class="sourceLineNo">1005</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1005"></a>
@@ -1074,7 +1074,7 @@
 <span class="sourceLineNo">1066</span>   */<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>  public static int createAndWatch(ZKWatcher zkw,<a name="line.1067"></a>
 <span class="sourceLineNo">1068</span>      String znode, byte [] data)<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>  throws KeeperException, KeeperException.NodeExistsException {<a name="line.1069"></a>
+<span class="sourceLineNo">1069</span>    throws KeeperException, KeeperException.NodeExistsException {<a name="line.1069"></a>
 <span class="sourceLineNo">1070</span>    try {<a name="line.1070"></a>
 <span class="sourceLineNo">1071</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1071"></a>
 <span class="sourceLineNo">1072</span>          CreateMode.PERSISTENT);<a name="line.1072"></a>
@@ -1140,13 +1140,13 @@
 <span class="sourceLineNo">1132</span>   */<a name="line.1132"></a>
 <span class="sourceLineNo">1133</span>  public static void createAndFailSilent(ZKWatcher zkw,<a name="line.1133"></a>
 <span class="sourceLineNo">1134</span>      String znode, byte[] data)<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>  throws KeeperException {<a name="line.1135"></a>
+<span class="sourceLineNo">1135</span>    throws KeeperException {<a name="line.1135"></a>
 <span class="sourceLineNo">1136</span>    createAndFailSilent(zkw,<a name="line.1136"></a>
 <span class="sourceLineNo">1137</span>        (CreateAndFailSilent)ZKUtilOp.createAndFailSilent(znode, data));<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>  }<a name="line.1138"></a>
 <span class="sourceLineNo">1139</span><a name="line.1139"></a>
 <span class="sourceLineNo">1140</span>  private static void createAndFailSilent(ZKWatcher zkw, CreateAndFailSilent cafs)<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>  throws KeeperException {<a name="line.1141"></a>
+<span class="sourceLineNo">1141</span>    throws KeeperException {<a name="line.1141"></a>
 <span class="sourceLineNo">1142</span>    CreateRequest create = (CreateRequest)toZooKeeperOp(zkw, cafs).toRequestRecord();<a name="line.1142"></a>
 <span class="sourceLineNo">1143</span>    String znode = create.getPath();<a name="line.1143"></a>
 <span class="sourceLineNo">1144</span>    try {<a name="line.1144"></a>
@@ -1181,7 +1181,7 @@
 <span class="sourceLineNo">1173</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1173"></a>
 <span class="sourceLineNo">1174</span>   */<a name="line.1174"></a>
 <span class="sourceLineNo">1175</span>  public static void createWithParents(ZKWatcher zkw, String znode)<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>  throws KeeperException {<a name="line.1176"></a>
+<span class="sourceLineNo">1176</span>    throws KeeperException {<a name="line.1176"></a>
 <span class="sourceLineNo">1177</span>    createWithParents(zkw, znode, new byte[0]);<a name="line.1177"></a>
 <span class="sourceLineNo">1178</span>  }<a name="line.1178"></a>
 <span class="sourceLineNo">1179</span><a name="line.1179"></a>
@@ -1199,7 +1199,7 @@
 <span class="sourceLineNo">1191</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1191"></a>
 <span class="sourceLineNo">1192</span>   */<a name="line.1192"></a>
 <span class="sourceLineNo">1193</span>  public static void createWithParents(ZKWatcher zkw, String znode, byte[] data)<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>  throws KeeperException {<a name="line.1194"></a>
+<span class="sourceLineNo">1194</span>    throws KeeperException {<a name="line.1194"></a>
 <span class="sourceLineNo">1195</span>    try {<a name="line.1195"></a>
 <span class="sourceLineNo">1196</span>      if(znode == null) {<a name="line.1196"></a>
 <span class="sourceLineNo">1197</span>        return;<a name="line.1197"></a>
@@ -1224,7 +1224,7 @@
 <span class="sourceLineNo">1216</span>   * Delete the specified node.  Sets no watches.  Throws all exceptions.<a name="line.1216"></a>
 <span class="sourceLineNo">1217</span>   */<a name="line.1217"></a>
 <span class="sourceLineNo">1218</span>  public static void deleteNode(ZKWatcher zkw, String node)<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  throws KeeperException {<a name="line.1219"></a>
+<span class="sourceLineNo">1219</span>    throws KeeperException {<a name="line.1219"></a>
 <span class="sourceLineNo">1220</span>    deleteNode(zkw, node, -1);<a name="line.1220"></a>
 <span class="sourceLineNo">1221</span>  }<a name="line.1221"></a>
 <span class="sourceLineNo">1222</span><a name="line.1222"></a>
@@ -1234,7 +1234,7 @@
 <span class="sourceLineNo">1226</span>   */<a name="line.1226"></a>
 <span class="sourceLineNo">1227</span>  public static boolean deleteNode(ZKWatcher zkw, String node,<a name="line.1227"></a>
 <span class="sourceLineNo">1228</span>                                   int version)<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>  throws KeeperException {<a name="line.1229"></a>
+<span class="sourceLineNo">1229</span>    throws KeeperException {<a name="line.1229"></a>
 <span class="sourceLineNo">1230</span>    try {<a name="line.1230"></a>
 <span class="sourceLineNo">1231</span>      zkw.getRecoverableZooKeeper().delete(node, version);<a name="line.1231"></a>
 <span class="sourceLineNo">1232</span>      return true;<a name="line.1232"></a>
@@ -1254,7 +1254,7 @@
 <span class="sourceLineNo">1246</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1246"></a>
 <span class="sourceLineNo">1247</span>   */<a name="line.1247"></a>
 <span class="sourceLineNo">1248</span>  public static void deleteNodeFailSilent(ZKWatcher zkw, String node)<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>  throws KeeperException {<a name="line.1249"></a>
+<span class="sourceLineNo">1249</span>    throws KeeperException {<a name="line.1249"></a>
 <span class="sourceLineNo">1250</span>    deleteNodeFailSilent(zkw,<a name="line.1250"></a>
 <span class="sourceLineNo">1251</span>      (DeleteNodeFailSilent)ZKUtilOp.deleteNodeFailSilent(node));<a name="line.1251"></a>
 <span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
@@ -1280,7 +1280,7 @@
 <span class="sourceLineNo">1272</span>   * children.<a name="line.1272"></a>
 <span class="sourceLineNo">1273</span>   */<a name="line.1273"></a>
 <span class="sourceLineNo">1274</span>  public static void deleteNodeRecursively(ZKWatcher zkw, String node)<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>  throws KeeperException {<a name="line.1275"></a>
+<span class="sourceLineNo">1275</span>    throws KeeperException {<a name="line.1275"></a>
 <span class="sourceLineNo">1276</span>    deleteNodeRecursivelyMultiOrSequential(zkw, true, node);<a name="line.1276"></a>
 <span class="sourceLineNo">1277</span>  }<a name="line.1277"></a>
 <span class="sourceLineNo">1278</span><a name="line.1278"></a>
@@ -1743,7 +1743,7 @@
 <span class="sourceLineNo">1735</span>  public static String dump(ZKWatcher zkw) {<a name="line.1735"></a>
 <span class="sourceLineNo">1736</span>    StringBuilder sb = new StringBuilder();<a name="line.1736"></a>
 <span class="sourceLineNo">1737</span>    try {<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>      sb.append("HBase is rooted at ").append(zkw.znodePaths.baseZNode);<a name="line.1738"></a>
+<span class="sourceLineNo">1738</span>      sb.append("HBase is rooted at ").append(zkw.getZNodePaths().baseZNode);<a name="line.1738"></a>
 <span class="sourceLineNo">1739</span>      sb.append("\nActive master address: ");<a name="line.1739"></a>
 <span class="sourceLineNo">1740</span>      try {<a name="line.1740"></a>
 <span class="sourceLineNo">1741</span>        sb.append(MasterAddressTracker.getMasterAddress(zkw));<a name="line.1741"></a>
@@ -1751,400 +1751,401 @@
 <span class="sourceLineNo">1743</span>        sb.append("&lt;&lt;FAILED LOOKUP: " + e.getMessage() + "&gt;&gt;");<a name="line.1743"></a>
 <span class="sourceLineNo">1744</span>      }<a name="line.1744"></a>
 <span class="sourceLineNo">1745</span>      sb.append("\nBackup master addresses:");<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      for (String child : listChildrenNoWatch(zkw, zkw.znodePaths.backupMasterAddressesZNode)) {<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        sb.append("\n ").append(child);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      }<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        + new MetaTableLocator().getMetaRegionLocation(zkw));<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>                    + new MetaTableLocator().getMetaRegionLocation(zkw, i));<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      }<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      sb.append("\nRegion servers:");<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>      for (String child : listChildrenNoWatch(zkw, zkw.znodePaths.rsZNode)) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        sb.append("\n ").append(child);<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      try {<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      } catch (KeeperException ke) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>      }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>      for (String server : servers) {<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>        sb.append("\n ").append(server);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        try {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          if (stat == null) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>            break;<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>          }<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span><a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>          for (String s : stat) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            sb.append("\n  ").append(s);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>          }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>        } catch (Exception e) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>        }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    } catch (KeeperException ke) {<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      sb.append("\n" + ke.getMessage());<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    return sb.toString();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>  }<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span><a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>  /**<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>   *<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>   */<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>      throws KeeperException {<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    String replicationZnode = zkw.znodePaths.replicationZNode;<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span><a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>      return;<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>    }<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span><a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>    // do a ls -r on this znode<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    for (String child : children) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      String znode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (znode.equals(zkw.znodePaths.peersZNode)) {<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>        appendPeersZnodes(zkw, znode, sb);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      } else if (znode.equals(zkw.znodePaths.queuesZNode)) {<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        appendRSZnodes(zkw, znode, sb);<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      } else if (znode.equals(zkw.znodePaths.hfileRefsZNode)) {<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>        appendHFileRefsZnodes(zkw, znode, sb);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>      }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>    }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>  }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span><a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>  private static void appendHFileRefsZnodes(ZKWatcher zkw, String hfileRefsZnode,<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    sb.append("\n").append(hfileRefsZnode).append(": ");<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, hfileRefsZnode)) {<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      String znodeToProcess = ZNodePaths.joinZNode(hfileRefsZnode, peerIdZnode);<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>      List&lt;String&gt; peerHFileRefsZnodes = ZKUtil.listChildrenNoWatch(zkw, znodeToProcess);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      int size = peerHFileRefsZnodes.size();<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      for (int i = 0; i &lt; size; i++) {<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        sb.append(peerHFileRefsZnodes.get(i));<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        if (i != size - 1) {<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          sb.append(", ");<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>        }<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>      }<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    }<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>  }<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span><a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>  /**<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>   * @return aq string of replication znodes and log positions<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>   */<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>    StringBuilder sb = new StringBuilder();<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>    return sb.toString();<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>  }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span><a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>      throws KeeperException {<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>    stack.add(znode);<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>    do {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      byte[] data;<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      try {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      } catch (InterruptedException e) {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>        zkw.interruptedException(e);<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>        return;<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      }<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        long position = 0;<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        try {<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>          sb.append(position);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        } catch (DeserializationException ignored) {<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>        } catch (InterruptedException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>          zkw.interruptedException(e);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>          return;<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>        }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>      }<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>    } while (stack.size() &gt; 0);<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>  }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span><a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      byte[] data;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>      try {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      } catch (InterruptedException e) {<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>        zkw.interruptedException(e);<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        return;<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>      }<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>      // parse the data of the above peer znode.<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      try {<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>        String clusterKey = builder.getClusterkey();<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        // add the peer-state.<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>      } catch (IOException ipbe) {<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>  }<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span><a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      "peer-state");<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>      if (!child.equals(peerState)) {<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>        continue;<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span><a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      byte[] peerStateData;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>      try {<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>        sb.append(builder.getState().name());<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      } catch (IOException ipbe) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      } catch (InterruptedException e) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>        zkw.interruptedException(e);<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>        return;<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  }<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span><a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>  /**<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>   * Gets the statistics from the given server.<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>   *<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * @param server  The server to get the statistics from.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param timeout  The socket timeout to use.<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @return The array of response strings.<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   * @throws IOException When the socket communication fails.<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>   */<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>  public static String[] getServerStats(String server, int timeout)<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>  throws IOException {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    String[] sp = server.split(":");<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    if (sp == null || sp.length == 0) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>      return null;<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    }<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span><a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>    String host = sp[0];<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span><a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    try (Socket socket = new Socket()) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      socket.connect(sockAddr, timeout);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span><a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      socket.setSoTimeout(timeout);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          BufferedReader in = new BufferedReader(<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>        out.println("stat");<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>        out.flush();<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>        while (true) {<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>          String line = in.readLine();<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>          if (line != null) {<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>            res.add(line);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>          } else {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>            break;<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        }<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        return res.toArray(new String[res.size()]);<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>      }<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    }<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>  }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    if (!LOG.isTraceEnabled()) {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>      return;<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    }<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span><a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      " byte(s) of data from znode " + znode +<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>          znode.startsWith(zkw.znodePaths.metaZNodePrefix)?<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>            getServerNameOrEmptyString(data):<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>          znode.startsWith(zkw.znodePaths.backupMasterAddressesZNode)?<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>            getServerNameOrEmptyString(data):<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>  }<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    try {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    } catch (DeserializationException e) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>      return "";<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    }<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>  }<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span><a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>  /**<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>   * @throws IOException on ZK errors<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>   */<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>  public static void waitForBaseZNode(Configuration conf) throws IOException {<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    LOG.info("Waiting until the base znode is available");<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>    String parentZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>        HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>    ZooKeeper zk = new ZooKeeper(ZKConfig.getZKQuorumServersString(conf),<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>        conf.getInt(HConstants.ZK_SESSION_TIMEOUT,<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>        HConstants.DEFAULT_ZK_SESSION_TIMEOUT), EmptyWatcher.instance);<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span><a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final int maxTimeMs = 10000;<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span><a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>    KeeperException keeperEx = null;<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    try {<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      try {<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>        for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>          try {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>            if (zk.exists(parentZNode, false) != null) {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>              LOG.info("Parent znode exists: " + parentZNode);<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>              keeperEx = null;<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>              break;<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>            }<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          } catch (KeeperException e) {<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>            keeperEx = e;<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          }<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>          Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>        }<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>      } finally {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>        zk.close();<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>      }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    } catch (InterruptedException ex) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>      Thread.currentThread().interrupt();<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    if (keeperEx != null) {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>      throw new IOException(keeperEx);<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span><a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>  /**<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>   * Convert a {@link DeserializationException} to a more palatable {@link KeeperException}.<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>   * Used when can't let a {@link DeserializationException} out w/o changing public API.<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>   * @param e Exception to convert<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>   * @return Converted exception<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>   */<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>  public static KeeperException convert(final DeserializationException e) {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    KeeperException ke = new KeeperException.DataInconsistencyException();<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>    ke.initCause(e);<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>    return ke;<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>  }<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span><a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>  /**<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>   * Recursively print the current state of ZK (non-transactional)<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>   * @param root name of the root directory in zk to print<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>   */<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>  public static void logZKTree(ZKWatcher zkw, String root) {<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    if (!LOG.isDebugEnabled()) {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      return;<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    }<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span><a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>    LOG.debug("Current zk system:");<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>    String prefix = "|-";<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>    LOG.debug(prefix + root);<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    try {<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      logZKTree(zkw, root, prefix);<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>    } catch (KeeperException e) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      throw new RuntimeException(e);<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    }<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>  }<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span><a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>  /**<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>   * Helper method to print the current state of the ZK tree.<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * @see #logZKTree(ZKWatcher, String)<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * @throws KeeperException if an unexpected exception occurs<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   */<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>  protected static void logZKTree(ZKWatcher zkw, String root, String prefix)<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      throws KeeperException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, root);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span><a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>    if (children == null) {<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      return;<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>    }<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span><a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    for (String child : children) {<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>      LOG.debug(prefix + child);<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      String node = ZNodePaths.joinZNode(root.equals("/") ? "" : root, child);<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      logZKTree(zkw, node, prefix + "---");<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span><a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  /**<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>   * @param position the position to serialize<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>   * @return Serialized protobuf of &lt;code&gt;position&lt;/code&gt; with pb magic prefix prepended suitable<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>   *         for use as content of an wal position in a replication queue.<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>   */<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>  public static byte[] positionToByteArray(final long position) {<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>    byte[] bytes = ReplicationProtos.ReplicationHLogPosition.newBuilder().setPosition(position)<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>        .build().toByteArray();<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    return ProtobufUtil.prependPBMagic(bytes);<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>  }<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span><a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  /**<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>   * @param bytes - Content of a WAL position znode.<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>   * @return long - The current WAL position.<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>   * @throws DeserializationException if the WAL position cannot be parsed<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>   */<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>  public static long parseWALPositionFrom(final byte[] bytes) throws DeserializationException {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>    if (bytes == null) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      throw new DeserializationException("Unable to parse null WAL position.");<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>    }<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    if (ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      ReplicationProtos.ReplicationHLogPosition.Builder builder =<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          ReplicationProtos.ReplicationHLogPosition.newBuilder();<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>      ReplicationProtos.ReplicationHLogPosition position;<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>      try {<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        position = builder.build();<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      } catch (IOException e) {<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>        throw new DeserializationException(e);<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      return position.getPosition();<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    } else {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>      if (bytes.length &gt; 0) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>        return Bytes.toLong(bytes);<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>      return 0;<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  }<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>}<a name="line.2139"></a>
+<span class="sourceLineNo">1746</span>      for (String child : listChildrenNoWatch(zkw,<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>              zkw.getZNodePaths().backupMasterAddressesZNode)) {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        sb.append("\n ").append(child);<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>      }<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        + new MetaTableLocator().getMetaRegionLocation(zkw));<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>                    + new MetaTableLocator().getMetaRegionLocation(zkw, i));<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      }<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      sb.append("\nRegion servers:");<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      for (String child : listChildrenNoWatch(zkw, zkw.getZNodePaths().rsZNode)) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>        sb.append("\n ").append(child);<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>      }<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>      try {<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      } catch (KeeperException ke) {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>      for (String server : servers) {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>        sb.append("\n ").append(server);<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        try {<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>          if (stat == null) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>            break;<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>          }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span><a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          for (String s : stat) {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>            sb.append("\n  ").append(s);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          }<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>        } catch (Exception e) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        }<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>      }<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    } catch (KeeperException ke) {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      sb.append("\n" + ke.getMessage());<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>    }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    return sb.toString();<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  /**<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>   *<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>   */<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      throws KeeperException {<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>    String replicationZnode = zkw.getZNodePaths().replicationZNode;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span><a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>      return;<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    }<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span><a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // do a ls -r on this znode<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>    for (String child : children) {<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      String znode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>      if (znode.equals(zkw.getZNodePaths().peersZNode)) {<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>        appendPeersZnodes(zkw, znode, sb);<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>      } else if (znode.equals(zkw.getZNodePaths().queuesZNode)) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        appendRSZnodes(zkw, znode, sb);<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      } else if (znode.equals(zkw.getZNodePaths().hfileRefsZNode)) {<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>        appendHFileRefsZnodes(zkw, znode, sb);<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      }<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>    }<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>  }<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span><a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>  private static void appendHFileRefsZnodes(ZKWatcher zkw, String hfileRefsZnode,<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>    sb.append("\n").append(hfileRefsZnode).append(": ");<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, hfileRefsZnode)) {<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      String znodeToProcess = ZNodePaths.joinZNode(hfileRefsZnode, peerIdZnode);<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>      List&lt;String&gt; peerHFileRefsZnodes = ZKUtil.listChildrenNoWatch(zkw, znodeToProcess);<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>      int size = peerHFileRefsZnodes.size();<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>      for (int i = 0; i &lt; size; i++) {<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>        sb.append(peerHFileRefsZnodes.get(i));<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (i != size - 1) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          sb.append(", ");<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>      }<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    }<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>  }<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span><a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>  /**<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>   * @return aq string of replication znodes and log positions<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>   */<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>    StringBuilder sb = new StringBuilder();<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    return sb.toString();<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>  }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span><a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>      throws KeeperException {<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    stack.add(znode);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>    do {<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      byte[] data;<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      try {<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      } catch (InterruptedException e) {<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>        zkw.interruptedException(e);<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>        return;<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      }<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>        long position = 0;<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>        try {<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>          sb.append(position);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        } catch (DeserializationException ignored) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        } catch (InterruptedException e) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>          zkw.interruptedException(e);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>          return;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      }<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    } while (stack.size() &gt; 0);<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>  }<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span><a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>      byte[] data;<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>      try {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>      } catch (InterruptedException e) {<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>        zkw.interruptedException(e);<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>        return;<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>      }<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // parse the data of the above peer znode.<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      try {<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>        String clusterKey = builder.getClusterkey();<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        // add the peer-state.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>      } catch (IOException ipbe) {<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>      }<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>    }<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>  }<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span><a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      "peer-state");<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (!child.equals(peerState)) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        continue;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span><a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>      byte[] peerStateData;<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>      try {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        sb.append(builder.getState().name());<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>      } catch (IOException ipbe) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      } catch (InterruptedException e) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>        zkw.interruptedException(e);<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>    }<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>  }<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span><a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>  /**<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>   * Gets the statistics from the given server.<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>   *<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>   * @param server  The server to get the statistics from.<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>   * @param timeout  The socket timeout to use.<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>   * @return The array of response strings.<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>   * @throws IOException When the socket communication fails.<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   */<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>  public static String[] getServerStats(String server, int timeout)<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>    throws IOException {<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>    String[] sp = server.split(":");<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>    if (sp == null || sp.length == 0) {<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>      return null;<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>    }<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span><a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    String host = sp[0];<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span><a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    try (Socket socket = new Socket()) {<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>      socket.connect(sockAddr, timeout);<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span><a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>      socket.setSoTimeout(timeout);<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>          BufferedReader in = new BufferedReader(<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        out.println("stat");<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>        out.flush();<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>        while (true) {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>          String line = in.readLine();<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>          if (line != null) {<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            res.add(line);<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          } else {<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>            break;<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>          }<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>        }<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>        return res.toArray(new String[res.size()]);<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>      }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    }<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>  }<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>    if (!LOG.isTraceEnabled()) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      return;<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>    }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span><a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>      " byte(s) of data from znode " + znode +<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>          znode.startsWith(zkw.getZNodePaths().metaZNodePrefix)?<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>            getServerNameOrEmptyString(data):<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>          znode.startsWith(zkw.getZNodePaths().backupMasterAddressesZNode)?<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>            getServerNameOrEmptyString(data):<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>  }<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span><a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    try {<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>    } catch (DeserializationException e) {<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>      return "";<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    }<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>  }<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span><a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>  /**<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>   * @thr

<TRUNCATED>

[19/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.JaasConfiguration.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.JaasConfiguration.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.JaasConfiguration.html
index 6d59738..61e3cd8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.JaasConfiguration.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.JaasConfiguration.html
@@ -116,20 +116,20 @@
 <span class="sourceLineNo">108</span>   * @throws IOException if unable to connect to zk or config problem<a name="line.108"></a>
 <span class="sourceLineNo">109</span>   */<a name="line.109"></a>
 <span class="sourceLineNo">110</span>  public static RecoverableZooKeeper connect(Configuration conf, Watcher watcher)<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  throws IOException {<a name="line.111"></a>
+<span class="sourceLineNo">111</span>    throws IOException {<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    String ensemble = ZKConfig.getZKQuorumServersString(conf);<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    return connect(conf, ensemble, watcher);<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>  public static RecoverableZooKeeper connect(Configuration conf, String ensemble,<a name="line.116"></a>
 <span class="sourceLineNo">117</span>      Watcher watcher)<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  throws IOException {<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    throws IOException {<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    return connect(conf, ensemble, watcher, null);<a name="line.119"></a>
 <span class="sourceLineNo">120</span>  }<a name="line.120"></a>
 <span class="sourceLineNo">121</span><a name="line.121"></a>
 <span class="sourceLineNo">122</span>  public static RecoverableZooKeeper connect(Configuration conf, String ensemble,<a name="line.122"></a>
 <span class="sourceLineNo">123</span>      Watcher watcher, final String identifier)<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  throws IOException {<a name="line.124"></a>
+<span class="sourceLineNo">124</span>    throws IOException {<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    if(ensemble == null) {<a name="line.125"></a>
 <span class="sourceLineNo">126</span>      throw new IOException("Unable to determine ZooKeeper ensemble");<a name="line.126"></a>
 <span class="sourceLineNo">127</span>    }<a name="line.127"></a>
@@ -355,7 +355,7 @@
 <span class="sourceLineNo">347</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.347"></a>
 <span class="sourceLineNo">348</span>   */<a name="line.348"></a>
 <span class="sourceLineNo">349</span>  public static boolean watchAndCheckExists(ZKWatcher zkw, String znode)<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  throws KeeperException {<a name="line.350"></a>
+<span class="sourceLineNo">350</span>    throws KeeperException {<a name="line.350"></a>
 <span class="sourceLineNo">351</span>    try {<a name="line.351"></a>
 <span class="sourceLineNo">352</span>      Stat s = zkw.getRecoverableZooKeeper().exists(znode, zkw);<a name="line.352"></a>
 <span class="sourceLineNo">353</span>      boolean exists = s != null ? true : false;<a name="line.353"></a>
@@ -409,7 +409,7 @@
 <span class="sourceLineNo">401</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.401"></a>
 <span class="sourceLineNo">402</span>   */<a name="line.402"></a>
 <span class="sourceLineNo">403</span>  public static int checkExists(ZKWatcher zkw, String znode)<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  throws KeeperException {<a name="line.404"></a>
+<span class="sourceLineNo">404</span>    throws KeeperException {<a name="line.404"></a>
 <span class="sourceLineNo">405</span>    try {<a name="line.405"></a>
 <span class="sourceLineNo">406</span>      Stat s = zkw.getRecoverableZooKeeper().exists(znode, null);<a name="line.406"></a>
 <span class="sourceLineNo">407</span>      return s != null ? s.getVersion() : -1;<a name="line.407"></a>
@@ -446,7 +446,7 @@
 <span class="sourceLineNo">438</span>   */<a name="line.438"></a>
 <span class="sourceLineNo">439</span>  public static List&lt;String&gt; listChildrenAndWatchForNewChildren(<a name="line.439"></a>
 <span class="sourceLineNo">440</span>          ZKWatcher zkw, String znode)<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  throws KeeperException {<a name="line.441"></a>
+<span class="sourceLineNo">441</span>    throws KeeperException {<a name="line.441"></a>
 <span class="sourceLineNo">442</span>    try {<a name="line.442"></a>
 <span class="sourceLineNo">443</span>      List&lt;String&gt; children = zkw.getRecoverableZooKeeper().getChildren(znode, zkw);<a name="line.443"></a>
 <span class="sourceLineNo">444</span>      return children;<a name="line.444"></a>
@@ -501,7 +501,7 @@
 <span class="sourceLineNo">493</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.493"></a>
 <span class="sourceLineNo">494</span>   */<a name="line.494"></a>
 <span class="sourceLineNo">495</span>  public static List&lt;String&gt; listChildrenNoWatch(ZKWatcher zkw, String znode)<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  throws KeeperException {<a name="line.496"></a>
+<span class="sourceLineNo">496</span>    throws KeeperException {<a name="line.496"></a>
 <span class="sourceLineNo">497</span>    List&lt;String&gt; children = null;<a name="line.497"></a>
 <span class="sourceLineNo">498</span>    try {<a name="line.498"></a>
 <span class="sourceLineNo">499</span>      // List the children without watching<a name="line.499"></a>
@@ -558,7 +558,7 @@
 <span class="sourceLineNo">550</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.550"></a>
 <span class="sourceLineNo">551</span>   */<a name="line.551"></a>
 <span class="sourceLineNo">552</span>  public static boolean nodeHasChildren(ZKWatcher zkw, String znode)<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  throws KeeperException {<a name="line.553"></a>
+<span class="sourceLineNo">553</span>    throws KeeperException {<a name="line.553"></a>
 <span class="sourceLineNo">554</span>    try {<a name="line.554"></a>
 <span class="sourceLineNo">555</span>      return !zkw.getRecoverableZooKeeper().getChildren(znode, null).isEmpty();<a name="line.555"></a>
 <span class="sourceLineNo">556</span>    } catch(KeeperException.NoNodeException ke) {<a name="line.556"></a>
@@ -590,7 +590,7 @@
 <span class="sourceLineNo">582</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.582"></a>
 <span class="sourceLineNo">583</span>   */<a name="line.583"></a>
 <span class="sourceLineNo">584</span>  public static int getNumberOfChildren(ZKWatcher zkw, String znode)<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  throws KeeperException {<a name="line.585"></a>
+<span class="sourceLineNo">585</span>    throws KeeperException {<a name="line.585"></a>
 <span class="sourceLineNo">586</span>    try {<a name="line.586"></a>
 <span class="sourceLineNo">587</span>      Stat stat = zkw.getRecoverableZooKeeper().exists(znode, null);<a name="line.587"></a>
 <span class="sourceLineNo">588</span>      return stat == null ? 0 : stat.getNumChildren();<a name="line.588"></a>
@@ -641,7 +641,7 @@
 <span class="sourceLineNo">633</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.633"></a>
 <span class="sourceLineNo">634</span>   */<a name="line.634"></a>
 <span class="sourceLineNo">635</span>  public static byte [] getDataAndWatch(ZKWatcher zkw, String znode)<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  throws KeeperException {<a name="line.636"></a>
+<span class="sourceLineNo">636</span>    throws KeeperException {<a name="line.636"></a>
 <span class="sourceLineNo">637</span>    return getDataInternal(zkw, znode, null, true);<a name="line.637"></a>
 <span class="sourceLineNo">638</span>  }<a name="line.638"></a>
 <span class="sourceLineNo">639</span><a name="line.639"></a>
@@ -703,7 +703,7 @@
 <span class="sourceLineNo">695</span>   */<a name="line.695"></a>
 <span class="sourceLineNo">696</span>  public static byte [] getDataNoWatch(ZKWatcher zkw, String znode,<a name="line.696"></a>
 <span class="sourceLineNo">697</span>                                       Stat stat)<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  throws KeeperException {<a name="line.698"></a>
+<span class="sourceLineNo">698</span>    throws KeeperException {<a name="line.698"></a>
 <span class="sourceLineNo">699</span>    try {<a name="line.699"></a>
 <span class="sourceLineNo">700</span>      byte [] data = zkw.getRecoverableZooKeeper().getData(znode, null, stat);<a name="line.700"></a>
 <span class="sourceLineNo">701</span>      logRetrievedMsg(zkw, znode, data, false);<a name="line.701"></a>
@@ -809,7 +809,7 @@
 <span class="sourceLineNo">801</span>   */<a name="line.801"></a>
 <span class="sourceLineNo">802</span>  public static boolean setData(ZKWatcher zkw, String znode,<a name="line.802"></a>
 <span class="sourceLineNo">803</span>                                byte [] data, int expectedVersion)<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.804"></a>
+<span class="sourceLineNo">804</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.804"></a>
 <span class="sourceLineNo">805</span>    try {<a name="line.805"></a>
 <span class="sourceLineNo">806</span>      return zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion) != null;<a name="line.806"></a>
 <span class="sourceLineNo">807</span>    } catch (InterruptedException e) {<a name="line.807"></a>
@@ -853,12 +853,12 @@
 <span class="sourceLineNo">845</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.845"></a>
 <span class="sourceLineNo">846</span>   */<a name="line.846"></a>
 <span class="sourceLineNo">847</span>  public static void setData(ZKWatcher zkw, String znode, byte [] data)<a name="line.847"></a>
-<span class="sourceLineNo">848</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.848"></a>
+<span class="sourceLineNo">848</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.848"></a>
 <span class="sourceLineNo">849</span>    setData(zkw, (SetData)ZKUtilOp.setData(znode, data));<a name="line.849"></a>
 <span class="sourceLineNo">850</span>  }<a name="line.850"></a>
 <span class="sourceLineNo">851</span><a name="line.851"></a>
 <span class="sourceLineNo">852</span>  private static void setData(ZKWatcher zkw, SetData setData)<a name="line.852"></a>
-<span class="sourceLineNo">853</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.853"></a>
+<span class="sourceLineNo">853</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.853"></a>
 <span class="sourceLineNo">854</span>    SetDataRequest sd = (SetDataRequest)toZooKeeperOp(zkw, setData).toRequestRecord();<a name="line.854"></a>
 <span class="sourceLineNo">855</span>    setData(zkw, sd.getPath(), sd.getData(), sd.getVersion());<a name="line.855"></a>
 <span class="sourceLineNo">856</span>  }<a name="line.856"></a>
@@ -899,7 +899,7 @@
 <span class="sourceLineNo">891</span><a name="line.891"></a>
 <span class="sourceLineNo">892</span>  public static ArrayList&lt;ACL&gt; createACL(ZKWatcher zkw, String node,<a name="line.892"></a>
 <span class="sourceLineNo">893</span>                                         boolean isSecureZooKeeper) {<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    if (!node.startsWith(zkw.znodePaths.baseZNode)) {<a name="line.894"></a>
+<span class="sourceLineNo">894</span>    if (!node.startsWith(zkw.getZNodePaths().baseZNode)) {<a name="line.894"></a>
 <span class="sourceLineNo">895</span>      return Ids.OPEN_ACL_UNSAFE;<a name="line.895"></a>
 <span class="sourceLineNo">896</span>    }<a name="line.896"></a>
 <span class="sourceLineNo">897</span>    if (isSecureZooKeeper) {<a name="line.897"></a>
@@ -931,7 +931,7 @@
 <span class="sourceLineNo">923</span>      }<a name="line.923"></a>
 <span class="sourceLineNo">924</span>      // Certain znodes are accessed directly by the client,<a name="line.924"></a>
 <span class="sourceLineNo">925</span>      // so they must be readable by non-authenticated clients<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      if (zkw.znodePaths.isClientReadable(node)) {<a name="line.926"></a>
+<span class="sourceLineNo">926</span>      if (zkw.getZNodePaths().isClientReadable(node)) {<a name="line.926"></a>
 <span class="sourceLineNo">927</span>        acls.addAll(Ids.CREATOR_ALL_ACL);<a name="line.927"></a>
 <span class="sourceLineNo">928</span>        acls.addAll(Ids.READ_ACL_UNSAFE);<a name="line.928"></a>
 <span class="sourceLineNo">929</span>      } else {<a name="line.929"></a>
@@ -967,7 +967,7 @@
 <span class="sourceLineNo">959</span>   */<a name="line.959"></a>
 <span class="sourceLineNo">960</span>  public static boolean createEphemeralNodeAndWatch(ZKWatcher zkw,<a name="line.960"></a>
 <span class="sourceLineNo">961</span>      String znode, byte [] data)<a name="line.961"></a>
-<span class="sourceLineNo">962</span>  throws KeeperException {<a name="line.962"></a>
+<span class="sourceLineNo">962</span>    throws KeeperException {<a name="line.962"></a>
 <span class="sourceLineNo">963</span>    boolean ret = true;<a name="line.963"></a>
 <span class="sourceLineNo">964</span>    try {<a name="line.964"></a>
 <span class="sourceLineNo">965</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.965"></a>
@@ -1007,7 +1007,7 @@
 <span class="sourceLineNo">999</span>   */<a name="line.999"></a>
 <span class="sourceLineNo">1000</span>  public static boolean createNodeIfNotExistsAndWatch(<a name="line.1000"></a>
 <span class="sourceLineNo">1001</span>          ZKWatcher zkw, String znode, byte [] data)<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>  throws KeeperException {<a name="line.1002"></a>
+<span class="sourceLineNo">1002</span>    throws KeeperException {<a name="line.1002"></a>
 <span class="sourceLineNo">1003</span>    boolean ret = true;<a name="line.1003"></a>
 <span class="sourceLineNo">1004</span>    try {<a name="line.1004"></a>
 <span class="sourceLineNo">1005</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1005"></a>
@@ -1074,7 +1074,7 @@
 <span class="sourceLineNo">1066</span>   */<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>  public static int createAndWatch(ZKWatcher zkw,<a name="line.1067"></a>
 <span class="sourceLineNo">1068</span>      String znode, byte [] data)<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>  throws KeeperException, KeeperException.NodeExistsException {<a name="line.1069"></a>
+<span class="sourceLineNo">1069</span>    throws KeeperException, KeeperException.NodeExistsException {<a name="line.1069"></a>
 <span class="sourceLineNo">1070</span>    try {<a name="line.1070"></a>
 <span class="sourceLineNo">1071</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1071"></a>
 <span class="sourceLineNo">1072</span>          CreateMode.PERSISTENT);<a name="line.1072"></a>
@@ -1140,13 +1140,13 @@
 <span class="sourceLineNo">1132</span>   */<a name="line.1132"></a>
 <span class="sourceLineNo">1133</span>  public static void createAndFailSilent(ZKWatcher zkw,<a name="line.1133"></a>
 <span class="sourceLineNo">1134</span>      String znode, byte[] data)<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>  throws KeeperException {<a name="line.1135"></a>
+<span class="sourceLineNo">1135</span>    throws KeeperException {<a name="line.1135"></a>
 <span class="sourceLineNo">1136</span>    createAndFailSilent(zkw,<a name="line.1136"></a>
 <span class="sourceLineNo">1137</span>        (CreateAndFailSilent)ZKUtilOp.createAndFailSilent(znode, data));<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>  }<a name="line.1138"></a>
 <span class="sourceLineNo">1139</span><a name="line.1139"></a>
 <span class="sourceLineNo">1140</span>  private static void createAndFailSilent(ZKWatcher zkw, CreateAndFailSilent cafs)<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>  throws KeeperException {<a name="line.1141"></a>
+<span class="sourceLineNo">1141</span>    throws KeeperException {<a name="line.1141"></a>
 <span class="sourceLineNo">1142</span>    CreateRequest create = (CreateRequest)toZooKeeperOp(zkw, cafs).toRequestRecord();<a name="line.1142"></a>
 <span class="sourceLineNo">1143</span>    String znode = create.getPath();<a name="line.1143"></a>
 <span class="sourceLineNo">1144</span>    try {<a name="line.1144"></a>
@@ -1181,7 +1181,7 @@
 <span class="sourceLineNo">1173</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1173"></a>
 <span class="sourceLineNo">1174</span>   */<a name="line.1174"></a>
 <span class="sourceLineNo">1175</span>  public static void createWithParents(ZKWatcher zkw, String znode)<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>  throws KeeperException {<a name="line.1176"></a>
+<span class="sourceLineNo">1176</span>    throws KeeperException {<a name="line.1176"></a>
 <span class="sourceLineNo">1177</span>    createWithParents(zkw, znode, new byte[0]);<a name="line.1177"></a>
 <span class="sourceLineNo">1178</span>  }<a name="line.1178"></a>
 <span class="sourceLineNo">1179</span><a name="line.1179"></a>
@@ -1199,7 +1199,7 @@
 <span class="sourceLineNo">1191</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1191"></a>
 <span class="sourceLineNo">1192</span>   */<a name="line.1192"></a>
 <span class="sourceLineNo">1193</span>  public static void createWithParents(ZKWatcher zkw, String znode, byte[] data)<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>  throws KeeperException {<a name="line.1194"></a>
+<span class="sourceLineNo">1194</span>    throws KeeperException {<a name="line.1194"></a>
 <span class="sourceLineNo">1195</span>    try {<a name="line.1195"></a>
 <span class="sourceLineNo">1196</span>      if(znode == null) {<a name="line.1196"></a>
 <span class="sourceLineNo">1197</span>        return;<a name="line.1197"></a>
@@ -1224,7 +1224,7 @@
 <span class="sourceLineNo">1216</span>   * Delete the specified node.  Sets no watches.  Throws all exceptions.<a name="line.1216"></a>
 <span class="sourceLineNo">1217</span>   */<a name="line.1217"></a>
 <span class="sourceLineNo">1218</span>  public static void deleteNode(ZKWatcher zkw, String node)<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  throws KeeperException {<a name="line.1219"></a>
+<span class="sourceLineNo">1219</span>    throws KeeperException {<a name="line.1219"></a>
 <span class="sourceLineNo">1220</span>    deleteNode(zkw, node, -1);<a name="line.1220"></a>
 <span class="sourceLineNo">1221</span>  }<a name="line.1221"></a>
 <span class="sourceLineNo">1222</span><a name="line.1222"></a>
@@ -1234,7 +1234,7 @@
 <span class="sourceLineNo">1226</span>   */<a name="line.1226"></a>
 <span class="sourceLineNo">1227</span>  public static boolean deleteNode(ZKWatcher zkw, String node,<a name="line.1227"></a>
 <span class="sourceLineNo">1228</span>                                   int version)<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>  throws KeeperException {<a name="line.1229"></a>
+<span class="sourceLineNo">1229</span>    throws KeeperException {<a name="line.1229"></a>
 <span class="sourceLineNo">1230</span>    try {<a name="line.1230"></a>
 <span class="sourceLineNo">1231</span>      zkw.getRecoverableZooKeeper().delete(node, version);<a name="line.1231"></a>
 <span class="sourceLineNo">1232</span>      return true;<a name="line.1232"></a>
@@ -1254,7 +1254,7 @@
 <span class="sourceLineNo">1246</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1246"></a>
 <span class="sourceLineNo">1247</span>   */<a name="line.1247"></a>
 <span class="sourceLineNo">1248</span>  public static void deleteNodeFailSilent(ZKWatcher zkw, String node)<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>  throws KeeperException {<a name="line.1249"></a>
+<span class="sourceLineNo">1249</span>    throws KeeperException {<a name="line.1249"></a>
 <span class="sourceLineNo">1250</span>    deleteNodeFailSilent(zkw,<a name="line.1250"></a>
 <span class="sourceLineNo">1251</span>      (DeleteNodeFailSilent)ZKUtilOp.deleteNodeFailSilent(node));<a name="line.1251"></a>
 <span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
@@ -1280,7 +1280,7 @@
 <span class="sourceLineNo">1272</span>   * children.<a name="line.1272"></a>
 <span class="sourceLineNo">1273</span>   */<a name="line.1273"></a>
 <span class="sourceLineNo">1274</span>  public static void deleteNodeRecursively(ZKWatcher zkw, String node)<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>  throws KeeperException {<a name="line.1275"></a>
+<span class="sourceLineNo">1275</span>    throws KeeperException {<a name="line.1275"></a>
 <span class="sourceLineNo">1276</span>    deleteNodeRecursivelyMultiOrSequential(zkw, true, node);<a name="line.1276"></a>
 <span class="sourceLineNo">1277</span>  }<a name="line.1277"></a>
 <span class="sourceLineNo">1278</span><a name="line.1278"></a>
@@ -1743,7 +1743,7 @@
 <span class="sourceLineNo">1735</span>  public static String dump(ZKWatcher zkw) {<a name="line.1735"></a>
 <span class="sourceLineNo">1736</span>    StringBuilder sb = new StringBuilder();<a name="line.1736"></a>
 <span class="sourceLineNo">1737</span>    try {<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>      sb.append("HBase is rooted at ").append(zkw.znodePaths.baseZNode);<a name="line.1738"></a>
+<span class="sourceLineNo">1738</span>      sb.append("HBase is rooted at ").append(zkw.getZNodePaths().baseZNode);<a name="line.1738"></a>
 <span class="sourceLineNo">1739</span>      sb.append("\nActive master address: ");<a name="line.1739"></a>
 <span class="sourceLineNo">1740</span>      try {<a name="line.1740"></a>
 <span class="sourceLineNo">1741</span>        sb.append(MasterAddressTracker.getMasterAddress(zkw));<a name="line.1741"></a>
@@ -1751,400 +1751,401 @@
 <span class="sourceLineNo">1743</span>        sb.append("&lt;&lt;FAILED LOOKUP: " + e.getMessage() + "&gt;&gt;");<a name="line.1743"></a>
 <span class="sourceLineNo">1744</span>      }<a name="line.1744"></a>
 <span class="sourceLineNo">1745</span>      sb.append("\nBackup master addresses:");<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      for (String child : listChildrenNoWatch(zkw, zkw.znodePaths.backupMasterAddressesZNode)) {<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        sb.append("\n ").append(child);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      }<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        + new MetaTableLocator().getMetaRegionLocation(zkw));<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>                    + new MetaTableLocator().getMetaRegionLocation(zkw, i));<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      }<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      sb.append("\nRegion servers:");<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>      for (String child : listChildrenNoWatch(zkw, zkw.znodePaths.rsZNode)) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        sb.append("\n ").append(child);<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      try {<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      } catch (KeeperException ke) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>      }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>      for (String server : servers) {<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>        sb.append("\n ").append(server);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        try {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          if (stat == null) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>            break;<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>          }<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span><a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>          for (String s : stat) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            sb.append("\n  ").append(s);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>          }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>        } catch (Exception e) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>        }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    } catch (KeeperException ke) {<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      sb.append("\n" + ke.getMessage());<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    return sb.toString();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>  }<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span><a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>  /**<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>   *<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>   */<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>      throws KeeperException {<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    String replicationZnode = zkw.znodePaths.replicationZNode;<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span><a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>      return;<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>    }<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span><a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>    // do a ls -r on this znode<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    for (String child : children) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      String znode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (znode.equals(zkw.znodePaths.peersZNode)) {<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>        appendPeersZnodes(zkw, znode, sb);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      } else if (znode.equals(zkw.znodePaths.queuesZNode)) {<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        appendRSZnodes(zkw, znode, sb);<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      } else if (znode.equals(zkw.znodePaths.hfileRefsZNode)) {<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>        appendHFileRefsZnodes(zkw, znode, sb);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>      }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>    }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>  }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span><a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>  private static void appendHFileRefsZnodes(ZKWatcher zkw, String hfileRefsZnode,<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    sb.append("\n").append(hfileRefsZnode).append(": ");<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, hfileRefsZnode)) {<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      String znodeToProcess = ZNodePaths.joinZNode(hfileRefsZnode, peerIdZnode);<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>      List&lt;String&gt; peerHFileRefsZnodes = ZKUtil.listChildrenNoWatch(zkw, znodeToProcess);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      int size = peerHFileRefsZnodes.size();<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      for (int i = 0; i &lt; size; i++) {<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        sb.append(peerHFileRefsZnodes.get(i));<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        if (i != size - 1) {<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          sb.append(", ");<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>        }<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>      }<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    }<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>  }<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span><a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>  /**<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>   * @return aq string of replication znodes and log positions<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>   */<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>    StringBuilder sb = new StringBuilder();<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>    return sb.toString();<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>  }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span><a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>      throws KeeperException {<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>    stack.add(znode);<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>    do {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      byte[] data;<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      try {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      } catch (InterruptedException e) {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>        zkw.interruptedException(e);<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>        return;<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      }<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        long position = 0;<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        try {<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>          sb.append(position);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        } catch (DeserializationException ignored) {<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>        } catch (InterruptedException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>          zkw.interruptedException(e);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>          return;<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>        }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>      }<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>    } while (stack.size() &gt; 0);<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>  }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span><a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      byte[] data;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>      try {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      } catch (InterruptedException e) {<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>        zkw.interruptedException(e);<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        return;<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>      }<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>      // parse the data of the above peer znode.<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      try {<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>        String clusterKey = builder.getClusterkey();<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        // add the peer-state.<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>      } catch (IOException ipbe) {<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>  }<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span><a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      "peer-state");<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>      if (!child.equals(peerState)) {<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>        continue;<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span><a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      byte[] peerStateData;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>      try {<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>        sb.append(builder.getState().name());<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      } catch (IOException ipbe) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      } catch (InterruptedException e) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>        zkw.interruptedException(e);<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>        return;<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  }<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span><a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>  /**<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>   * Gets the statistics from the given server.<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>   *<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * @param server  The server to get the statistics from.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param timeout  The socket timeout to use.<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @return The array of response strings.<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   * @throws IOException When the socket communication fails.<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>   */<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>  public static String[] getServerStats(String server, int timeout)<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>  throws IOException {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    String[] sp = server.split(":");<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    if (sp == null || sp.length == 0) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>      return null;<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    }<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span><a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>    String host = sp[0];<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span><a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    try (Socket socket = new Socket()) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      socket.connect(sockAddr, timeout);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span><a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      socket.setSoTimeout(timeout);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          BufferedReader in = new BufferedReader(<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>        out.println("stat");<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>        out.flush();<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>        while (true) {<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>          String line = in.readLine();<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>          if (line != null) {<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>            res.add(line);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>          } else {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>            break;<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        }<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        return res.toArray(new String[res.size()]);<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>      }<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    }<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>  }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    if (!LOG.isTraceEnabled()) {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>      return;<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    }<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span><a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      " byte(s) of data from znode " + znode +<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>          znode.startsWith(zkw.znodePaths.metaZNodePrefix)?<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>            getServerNameOrEmptyString(data):<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>          znode.startsWith(zkw.znodePaths.backupMasterAddressesZNode)?<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>            getServerNameOrEmptyString(data):<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>  }<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    try {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    } catch (DeserializationException e) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>      return "";<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    }<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>  }<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span><a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>  /**<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>   * @throws IOException on ZK errors<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>   */<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>  public static void waitForBaseZNode(Configuration conf) throws IOException {<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    LOG.info("Waiting until the base znode is available");<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>    String parentZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>        HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>    ZooKeeper zk = new ZooKeeper(ZKConfig.getZKQuorumServersString(conf),<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>        conf.getInt(HConstants.ZK_SESSION_TIMEOUT,<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>        HConstants.DEFAULT_ZK_SESSION_TIMEOUT), EmptyWatcher.instance);<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span><a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final int maxTimeMs = 10000;<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span><a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>    KeeperException keeperEx = null;<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    try {<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      try {<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>        for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>          try {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>            if (zk.exists(parentZNode, false) != null) {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>              LOG.info("Parent znode exists: " + parentZNode);<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>              keeperEx = null;<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>              break;<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>            }<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          } catch (KeeperException e) {<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>            keeperEx = e;<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          }<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>          Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>        }<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>      } finally {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>        zk.close();<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>      }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    } catch (InterruptedException ex) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>      Thread.currentThread().interrupt();<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    if (keeperEx != null) {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>      throw new IOException(keeperEx);<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span><a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>  /**<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>   * Convert a {@link DeserializationException} to a more palatable {@link KeeperException}.<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>   * Used when can't let a {@link DeserializationException} out w/o changing public API.<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>   * @param e Exception to convert<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>   * @return Converted exception<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>   */<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>  public static KeeperException convert(final DeserializationException e) {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    KeeperException ke = new KeeperException.DataInconsistencyException();<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>    ke.initCause(e);<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>    return ke;<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>  }<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span><a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>  /**<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>   * Recursively print the current state of ZK (non-transactional)<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>   * @param root name of the root directory in zk to print<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>   */<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>  public static void logZKTree(ZKWatcher zkw, String root) {<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    if (!LOG.isDebugEnabled()) {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      return;<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    }<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span><a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>    LOG.debug("Current zk system:");<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>    String prefix = "|-";<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>    LOG.debug(prefix + root);<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    try {<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      logZKTree(zkw, root, prefix);<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>    } catch (KeeperException e) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      throw new RuntimeException(e);<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    }<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>  }<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span><a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>  /**<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>   * Helper method to print the current state of the ZK tree.<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * @see #logZKTree(ZKWatcher, String)<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * @throws KeeperException if an unexpected exception occurs<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   */<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>  protected static void logZKTree(ZKWatcher zkw, String root, String prefix)<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      throws KeeperException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, root);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span><a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>    if (children == null) {<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      return;<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>    }<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span><a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    for (String child : children) {<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>      LOG.debug(prefix + child);<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      String node = ZNodePaths.joinZNode(root.equals("/") ? "" : root, child);<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      logZKTree(zkw, node, prefix + "---");<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span><a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  /**<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>   * @param position the position to serialize<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>   * @return Serialized protobuf of &lt;code&gt;position&lt;/code&gt; with pb magic prefix prepended suitable<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>   *         for use as content of an wal position in a replication queue.<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>   */<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>  public static byte[] positionToByteArray(final long position) {<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>    byte[] bytes = ReplicationProtos.ReplicationHLogPosition.newBuilder().setPosition(position)<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>        .build().toByteArray();<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    return ProtobufUtil.prependPBMagic(bytes);<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>  }<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span><a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  /**<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>   * @param bytes - Content of a WAL position znode.<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>   * @return long - The current WAL position.<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>   * @throws DeserializationException if the WAL position cannot be parsed<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>   */<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>  public static long parseWALPositionFrom(final byte[] bytes) throws DeserializationException {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>    if (bytes == null) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      throw new DeserializationException("Unable to parse null WAL position.");<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>    }<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    if (ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      ReplicationProtos.ReplicationHLogPosition.Builder builder =<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          ReplicationProtos.ReplicationHLogPosition.newBuilder();<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>      ReplicationProtos.ReplicationHLogPosition position;<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>      try {<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        position = builder.build();<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      } catch (IOException e) {<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>        throw new DeserializationException(e);<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      return position.getPosition();<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    } else {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>      if (bytes.length &gt; 0) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>        return Bytes.toLong(bytes);<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>      return 0;<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  }<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>}<a name="line.2139"></a>
+<span class="sourceLineNo">1746</span>      for (String child : listChildrenNoWatch(zkw,<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>              zkw.getZNodePaths().backupMasterAddressesZNode)) {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        sb.append("\n ").append(child);<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>      }<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        + new MetaTableLocator().getMetaRegionLocation(zkw));<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>                    + new MetaTableLocator().getMetaRegionLocation(zkw, i));<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      }<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      sb.append("\nRegion servers:");<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      for (String child : listChildrenNoWatch(zkw, zkw.getZNodePaths().rsZNode)) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>        sb.append("\n ").append(child);<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>      }<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>      try {<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      } catch (KeeperException ke) {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>      for (String server : servers) {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>        sb.append("\n ").append(server);<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        try {<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>          if (stat == null) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>            break;<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>          }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span><a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          for (String s : stat) {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>            sb.append("\n  ").append(s);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          }<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>        } catch (Exception e) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        }<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>      }<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    } catch (KeeperException ke) {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      sb.append("\n" + ke.getMessage());<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>    }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    return sb.toString();<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  /**<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>   *<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>   */<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      throws KeeperException {<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>    String replicationZnode = zkw.getZNodePaths().replicationZNode;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span><a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>      return;<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    }<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span><a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // do a ls -r on this znode<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>    for (String child : children) {<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      String znode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>      if (znode.equals(zkw.getZNodePaths().peersZNode)) {<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>        appendPeersZnodes(zkw, znode, sb);<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>      } else if (znode.equals(zkw.getZNodePaths().queuesZNode)) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        appendRSZnodes(zkw, znode, sb);<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      } else if (znode.equals(zkw.getZNodePaths().hfileRefsZNode)) {<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>        appendHFileRefsZnodes(zkw, znode, sb);<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      }<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>    }<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>  }<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span><a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>  private static void appendHFileRefsZnodes(ZKWatcher zkw, String hfileRefsZnode,<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>    sb.append("\n").append(hfileRefsZnode).append(": ");<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, hfileRefsZnode)) {<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      String znodeToProcess = ZNodePaths.joinZNode(hfileRefsZnode, peerIdZnode);<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>      List&lt;String&gt; peerHFileRefsZnodes = ZKUtil.listChildrenNoWatch(zkw, znodeToProcess);<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>      int size = peerHFileRefsZnodes.size();<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>      for (int i = 0; i &lt; size; i++) {<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>        sb.append(peerHFileRefsZnodes.get(i));<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (i != size - 1) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          sb.append(", ");<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>      }<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    }<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>  }<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span><a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>  /**<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>   * @return aq string of replication znodes and log positions<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>   */<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>    StringBuilder sb = new StringBuilder();<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    return sb.toString();<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>  }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span><a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>      throws KeeperException {<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    stack.add(znode);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>    do {<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      byte[] data;<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      try {<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      } catch (InterruptedException e) {<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>        zkw.interruptedException(e);<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>        return;<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      }<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>        long position = 0;<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>        try {<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>          sb.append(position);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        } catch (DeserializationException ignored) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        } catch (InterruptedException e) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>          zkw.interruptedException(e);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>          return;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      }<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    } while (stack.size() &gt; 0);<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>  }<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span><a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>      byte[] data;<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>      try {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>      } catch (InterruptedException e) {<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>        zkw.interruptedException(e);<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>        return;<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>      }<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // parse the data of the above peer znode.<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      try {<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>        String clusterKey = builder.getClusterkey();<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        // add the peer-state.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>      } catch (IOException ipbe) {<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>      }<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>    }<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>  }<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span><a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      "peer-state");<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (!child.equals(peerState)) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        continue;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span><a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>      byte[] peerStateData;<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>      try {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        sb.append(builder.getState().name());<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>      } catch (IOException ipbe) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      } catch (InterruptedException e) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>        zkw.interruptedException(e);<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>    }<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>  }<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span><a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>  /**<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>   * Gets the statistics from the given server.<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>   *<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>   * @param server  The server to get the statistics from.<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>   * @param timeout  The socket timeout to use.<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>   * @return The array of response strings.<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>   * @throws IOException When the socket communication fails.<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   */<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>  public static String[] getServerStats(String server, int timeout)<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>    throws IOException {<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>    String[] sp = server.split(":");<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>    if (sp == null || sp.length == 0) {<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>      return null;<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>    }<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span><a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    String host = sp[0];<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span><a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    try (Socket socket = new Socket()) {<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>      socket.connect(sockAddr, timeout);<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span><a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>      socket.setSoTimeout(timeout);<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>          BufferedReader in = new BufferedReader(<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        out.println("stat");<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>        out.flush();<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>        while (true) {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>          String line = in.readLine();<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>          if (line != null) {<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            res.add(line);<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          } else {<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>            break;<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>          }<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>        }<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>        return res.toArray(new String[res.size()]);<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>      }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    }<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>  }<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>    if (!LOG.isTraceEnabled()) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      return;<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>    }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span><a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>      " byte(s) of data from znode " + znode +<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>          znode.startsWith(zkw.getZNodePaths().metaZNodePrefix)?<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>            getServerNameOrEmptyString(data):<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>          znode.startsWith(zkw.getZNodePaths().backupMasterAddressesZNode)?<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>            getServerNameOrEmptyString(data):<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>  }<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span><a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    try {<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>    } catch (DeserializationException e) {<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>      return "";<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    }<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>  }<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span><a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>  /**<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>   *

<TRUNCATED>

[43/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 19dc314..e8365bd 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:20180601142952+00'00')
-/CreationDate (D:20180601144528+00'00')
+/ModDate (D:20180602142949+00'00')
+/CreationDate (D:20180602144437+00'00')
 >>
 endobj
 2 0 obj
 << /Type /Catalog
 /Pages 3 0 R
 /Names 26 0 R
-/Outlines 4647 0 R
-/PageLabels 4874 0 R
+/Outlines 4655 0 R
+/PageLabels 4882 0 R
 /PageMode /UseOutlines
 /OpenAction [7 0 R /FitH 842.89]
 /ViewerPreferences << /DisplayDocTitle true
@@ -23,8 +23,8 @@ endobj
 endobj
 3 0 obj
 << /Type /Pages
-/Count 725
-/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 44 0 R 47 0 R 50 0 R 54 0 R 61 0 R 63 0 R 67 0 R 69 0 R 71 0 R 78 0 R 81 0 R 83 0 R 89 0 R 92 0 R 94 0 R 96 0 R 103 0 R 110 0 R 115 0 R 117 0 R 133 0 R 138 0 R 146 0 R 155 0 R 163 0 R 172 0 R 183 0 R 187 0 R 189 0 R 193 0 R 202 0 R 211 0 R 219 0 R 228 0 R 233 0 R 242 0 R 250 0 R 259 0 R 272 0 R 279 0 R 289 0 R 297 0 R 305 0 R 312 0 R 320 0 R 327 0 R 333 0 R 340 0 R 348 0 R 357 0 R 366 0 R 380 0 R 387 0 R 395 0 R 402 0 R 410 0 R 419 0 R 429 0 R 437 0 R 444 0 R 453 0 R 465 0 R 475 0 R 482 0 R 489 0 R 497 0 R 506 0 R 514 0 R 519 0 R 523 0 R 528 0 R 532 0 R 548 0 R 559 0 R 563 0 R 578 0 R 583 0 R 588 0 R 590 0 R 592 0 R 595 0 R 597 0 R 599 0 R 607 0 R 613 0 R 616 0 R 620 0 R 629 0 R 640 0 R 648 0 R 652 0 R 656 0 R 658 0 R 668 0 R 683 0 R 690 0 R 702 0 R 711 0 R 721 0 R 734 0 R 755 0 R 762 0 R 766 0 R 772 0 R 775 0 R 779 0 R 783 0 R 786 0 R 789 0 R 791 0 R 794 0 R 798 0 R 800 0 R 804 0 R 810 0 R 815 0 R 819 0 R 822 0 R 828 0 R
  830 0 R 834 0 R 842 0 R 844 0 R 847 0 R 850 0 R 853 0 R 856 0 R 870 0 R 878 0 R 889 0 R 900 0 R 906 0 R 916 0 R 927 0 R 930 0 R 934 0 R 937 0 R 942 0 R 951 0 R 959 0 R 963 0 R 967 0 R 972 0 R 976 0 R 978 0 R 994 0 R 1005 0 R 1010 0 R 1017 0 R 1020 0 R 1028 0 R 1036 0 R 1041 0 R 1046 0 R 1051 0 R 1053 0 R 1055 0 R 1057 0 R 1067 0 R 1075 0 R 1079 0 R 1086 0 R 1093 0 R 1101 0 R 1105 0 R 1111 0 R 1116 0 R 1124 0 R 1128 0 R 1133 0 R 1135 0 R 1141 0 R 1149 0 R 1155 0 R 1162 0 R 1173 0 R 1177 0 R 1179 0 R 1181 0 R 1185 0 R 1188 0 R 1193 0 R 1196 0 R 1208 0 R 1212 0 R 1218 0 R 1226 0 R 1231 0 R 1235 0 R 1239 0 R 1241 0 R 1244 0 R 1247 0 R 1250 0 R 1254 0 R 1258 0 R 1262 0 R 1267 0 R 1271 0 R 1274 0 R 1276 0 R 1286 0 R 1289 0 R 1297 0 R 1306 0 R 1312 0 R 1316 0 R 1318 0 R 1329 0 R 1332 0 R 1338 0 R 1346 0 R 1349 0 R 1356 0 R 1364 0 R 1366 0 R 1368 0 R 1377 0 R 1379 0 R 1381 0 R 1384 0 R 1386 0 R 1388 0 R 1390 0 R 1392 0 R 1395 0 R 1399 0 R 1404 0 R 1406 0 R 1408 0 R 1410 0 R 1415 0 R 1422 0
  R 1428 0 R 1431 0 R 1433 0 R 1436 0 R 1440 0 R 1444 0 R 1447 0 R 1449 0 R 1451 0 R 1454 0 R 1459 0 R 1465 0 R 1473 0 R 1487 0 R 1501 0 R 1504 0 R 1509 0 R 1522 0 R 1527 0 R 1542 0 R 1550 0 R 1554 0 R 1563 0 R 1578 0 R 1592 0 R 1600 0 R 1605 0 R 1616 0 R 1621 0 R 1627 0 R 1633 0 R 1645 0 R 1648 0 R 1657 0 R 1660 0 R 1669 0 R 1675 0 R 1679 0 R 1691 0 R 1696 0 R 1702 0 R 1704 0 R 1711 0 R 1719 0 R 1727 0 R 1731 0 R 1733 0 R 1735 0 R 1747 0 R 1753 0 R 1762 0 R 1768 0 R 1781 0 R 1787 0 R 1793 0 R 1804 0 R 1810 0 R 1815 0 R 1820 0 R 1823 0 R 1826 0 R 1831 0 R 1836 0 R 1843 0 R 1847 0 R 1852 0 R 1861 0 R 1866 0 R 1871 0 R 1873 0 R 1882 0 R 1889 0 R 1895 0 R 1900 0 R 1904 0 R 1908 0 R 1913 0 R 1918 0 R 1924 0 R 1926 0 R 1928 0 R 1931 0 R 1942 0 R 1945 0 R 1952 0 R 1960 0 R 1965 0 R 1969 0 R 1974 0 R 1976 0 R 1979 0 R 1984 0 R 1987 0 R 1989 0 R 1992 0 R 1995 0 R 1998 0 R 2008 0 R 2013 0 R 2018 0 R 2020 0 R 2028 0 R 2035 0 R 2042 0 R 2048 0 R 2053 0 R 2055 0 R 2064 0 R 2074 0 R 2084 0 R 2090
  0 R 2097 0 R 2099 0 R 2104 0 R 2106 0 R 2108 0 R 2112 0 R 2115 0 R 2118 0 R 2123 0 R 2127 0 R 2138 0 R 2141 0 R 2146 0 R 2149 0 R 2151 0 R 2156 0 R 2166 0 R 2168 0 R 2170 0 R 2172 0 R 2174 0 R 2177 0 R 2179 0 R 2181 0 R 2184 0 R 2186 0 R 2188 0 R 2192 0 R 2197 0 R 2206 0 R 2208 0 R 2210 0 R 2216 0 R 2218 0 R 2223 0 R 2225 0 R 2227 0 R 2234 0 R 2239 0 R 2243 0 R 2248 0 R 2252 0 R 2254 0 R 2256 0 R 2260 0 R 2263 0 R 2265 0 R 2267 0 R 2271 0 R 2273 0 R 2276 0 R 2278 0 R 2280 0 R 2282 0 R 2289 0 R 2292 0 R 2297 0 R 2299 0 R 2301 0 R 2303 0 R 2305 0 R 2313 0 R 2324 0 R 2338 0 R 2349 0 R 2353 0 R 2358 0 R 2362 0 R 2365 0 R 2370 0 R 2376 0 R 2378 0 R 2381 0 R 2383 0 R 2385 0 R 2387 0 R 2392 0 R 2394 0 R 2407 0 R 2410 0 R 2418 0 R 2424 0 R 2436 0 R 2450 0 R 2463 0 R 2482 0 R 2484 0 R 2486 0 R 2490 0 R 2508 0 R 2514 0 R 2526 0 R 2530 0 R 2534 0 R 2543 0 R 2555 0 R 2560 0 R 2570 0 R 2583 0 R 2602 0 R 2611 0 R 2614 0 R 2623 0 R 2640 0 R 2647 0 R 2650 0 R 2655 0 R 2659 0 R 2662 0 R 2671 0 R 26
 80 0 R 2683 0 R 2685 0 R 2689 0 R 2703 0 R 2712 0 R 2717 0 R 2721 0 R 2724 0 R 2726 0 R 2728 0 R 2730 0 R 2735 0 R 2748 0 R 2758 0 R 2766 0 R 2772 0 R 2777 0 R 2788 0 R 2795 0 R 2801 0 R 2803 0 R 2812 0 R 2820 0 R 2822 0 R 2830 0 R 2838 0 R 2840 0 R 2849 0 R 2852 0 R 2862 0 R 2866 0 R 2875 0 R 2883 0 R 2888 0 R 2892 0 R 2896 0 R 2898 0 R 2904 0 R 2908 0 R 2912 0 R 2918 0 R 2924 0 R 2927 0 R 2933 0 R 2937 0 R 2946 0 R 2951 0 R 2957 0 R 2967 0 R 2973 0 R 2980 0 R 2983 0 R 2986 0 R 2993 0 R 2998 0 R 3001 0 R 3006 0 R 3016 0 R 3021 0 R 3023 0 R 3027 0 R 3034 0 R 3037 0 R 3048 0 R 3051 0 R 3058 0 R 3066 0 R 3070 0 R 3080 0 R 3085 0 R 3089 0 R 3097 0 R 3102 0 R 3106 0 R 3108 0 R 3119 0 R 3124 0 R 3127 0 R 3129 0 R 3131 0 R 3141 0 R 3148 0 R 3152 0 R 3155 0 R 3161 0 R 3165 0 R 3168 0 R 3172 0 R 3177 0 R 3185 0 R 3190 0 R 3195 0 R 3200 0 R 3202 0 R 3205 0 R 3207 0 R 3211 0 R 3222 0 R 3224 0 R 3228 0 R 3231 0 R 3235 0 R 3238 0 R 3242 0 R 3244 0 R 3257 0 R 3262 0 R 3267 0 R 3273 0 R 3281 0 R 
 3283 0 R 3291 0 R 3309 0 R 3320 0 R 3327 0 R 3343 0 R 3346 0 R 3351 0 R 3353 0 R 3360 0 R 3363 0 R 3368 0 R 3371 0 R 3373 0 R 3375 0 R 3377 0 R 3380 0 R 3398 0 R 3401 0 R 3406 0 R 3412 0 R 3422 0 R 3427 0 R 3437 0 R 3447 0 R 3455 0 R 3460 0 R 3466 0 R 3471 0 R 3474 0 R 3482 0 R 3486 0 R 3491 0 R 3496 0 R 3509 0 R 3512 0 R 3518 0 R 3524 0 R 3529 0 R 3538 0 R 3547 0 R 3553 0 R 3562 0 R 3571 0 R 3576 0 R 3582 0 R 3588 0 R 3592 0 R 3594 0 R 3600 0 R 3607 0 R 3609 0 R 3615 0 R 3617 0 R 3623 0 R 3631 0 R 3637 0 R 3646 0 R 3653 0 R 3664 0 R 3674 0 R 3686 0 R 3699 0 R 3702 0 R 3704 0 R 3709 0 R 3724 0 R 3730 0 R 3736 0 R 3740 0 R 3743 0 R 3748 0 R 3750 0 R 3754 0 R 3756 0 R 3760 0 R 3763 0 R 3766 0 R 3774 0 R 3776 0 R 3780 0 R 3783 0 R 3791 0 R 3799 0 R 3803 0 R 3806 0 R 3808 0 R 3812 0 R 3817 0 R 3822 0 R 3825 0 R 3834 0 R 3839 0 R 3843 0 R 3846 0 R 3854 0 R 3859 0 R 3867 0 R 3872 0 R 3874 0 R 3880 0 R 3882 0 R 3887 0 R 3891 0 R 3897 0 R 3901 0 R 3913 0 R 3929 0 R 3944 0 R 3949 0 R 3952 0 
 R 3955 0 R 3961 0 R 3966 0 R 3968 0 R 3970 0 R 3972 0 R 3974 0 R 3976 0 R 3985 0 R 3989 0 R 3993 0 R 3997 0 R 3999 0 R 4006 0 R 4016 0 R 4025 0 R 4028 0 R 4031 0 R 4033 0 R 4040 0 R 4047 0 R 4057 0 R 4061 0 R 4064 0 R 4068 0 R 4072 0 R 4078 0 R 4081 0 R 4097 0 R 4102 0 R 4125 0 R 4129 0 R 4136 0 R 4147 0 R 4156 0 R 4159 0 R 4162 0 R 4165 0 R 4181 0 R 4186 0 R 4193 0 R]
+/Count 727
+/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 44 0 R 47 0 R 50 0 R 54 0 R 61 0 R 63 0 R 67 0 R 69 0 R 71 0 R 78 0 R 81 0 R 83 0 R 89 0 R 92 0 R 94 0 R 96 0 R 103 0 R 110 0 R 115 0 R 117 0 R 133 0 R 138 0 R 146 0 R 155 0 R 163 0 R 172 0 R 183 0 R 187 0 R 189 0 R 193 0 R 202 0 R 211 0 R 219 0 R 228 0 R 233 0 R 242 0 R 250 0 R 259 0 R 272 0 R 279 0 R 289 0 R 297 0 R 305 0 R 312 0 R 320 0 R 327 0 R 333 0 R 340 0 R 348 0 R 357 0 R 366 0 R 380 0 R 387 0 R 395 0 R 402 0 R 410 0 R 419 0 R 429 0 R 437 0 R 444 0 R 453 0 R 465 0 R 475 0 R 482 0 R 489 0 R 497 0 R 506 0 R 514 0 R 519 0 R 523 0 R 528 0 R 532 0 R 548 0 R 559 0 R 563 0 R 578 0 R 583 0 R 588 0 R 590 0 R 592 0 R 595 0 R 597 0 R 599 0 R 607 0 R 613 0 R 616 0 R 620 0 R 629 0 R 640 0 R 648 0 R 652 0 R 656 0 R 658 0 R 668 0 R 683 0 R 690 0 R 701 0 R 711 0 R 722 0 R 734 0 R 754 0 R 763 0 R 767 0 R 773 0 R 776 0 R 780 0 R 784 0 R 787 0 R 790 0 R 792 0 R 795 0 R 799 0 R 801 0 R 805 0 R 811 0 R 816 0 R 820 0 R 823 0 R 829 0 R
  831 0 R 835 0 R 843 0 R 845 0 R 848 0 R 851 0 R 854 0 R 857 0 R 871 0 R 879 0 R 890 0 R 901 0 R 907 0 R 917 0 R 928 0 R 931 0 R 935 0 R 938 0 R 943 0 R 952 0 R 960 0 R 964 0 R 968 0 R 973 0 R 977 0 R 979 0 R 995 0 R 1006 0 R 1011 0 R 1018 0 R 1021 0 R 1029 0 R 1037 0 R 1042 0 R 1047 0 R 1052 0 R 1054 0 R 1056 0 R 1058 0 R 1068 0 R 1076 0 R 1080 0 R 1087 0 R 1094 0 R 1102 0 R 1106 0 R 1112 0 R 1117 0 R 1125 0 R 1129 0 R 1134 0 R 1136 0 R 1142 0 R 1150 0 R 1156 0 R 1163 0 R 1174 0 R 1178 0 R 1180 0 R 1182 0 R 1186 0 R 1189 0 R 1194 0 R 1197 0 R 1209 0 R 1213 0 R 1219 0 R 1227 0 R 1232 0 R 1236 0 R 1240 0 R 1242 0 R 1245 0 R 1248 0 R 1251 0 R 1255 0 R 1259 0 R 1263 0 R 1268 0 R 1272 0 R 1275 0 R 1277 0 R 1287 0 R 1290 0 R 1298 0 R 1307 0 R 1313 0 R 1317 0 R 1319 0 R 1330 0 R 1333 0 R 1339 0 R 1347 0 R 1350 0 R 1357 0 R 1365 0 R 1367 0 R 1369 0 R 1378 0 R 1380 0 R 1382 0 R 1385 0 R 1387 0 R 1389 0 R 1391 0 R 1393 0 R 1396 0 R 1400 0 R 1405 0 R 1407 0 R 1409 0 R 1411 0 R 1416 0 R 1423 0
  R 1429 0 R 1432 0 R 1434 0 R 1437 0 R 1441 0 R 1445 0 R 1448 0 R 1450 0 R 1452 0 R 1455 0 R 1460 0 R 1466 0 R 1474 0 R 1488 0 R 1502 0 R 1505 0 R 1510 0 R 1523 0 R 1528 0 R 1543 0 R 1551 0 R 1555 0 R 1564 0 R 1579 0 R 1593 0 R 1601 0 R 1606 0 R 1617 0 R 1622 0 R 1628 0 R 1634 0 R 1646 0 R 1649 0 R 1658 0 R 1661 0 R 1670 0 R 1676 0 R 1680 0 R 1692 0 R 1697 0 R 1703 0 R 1705 0 R 1712 0 R 1720 0 R 1728 0 R 1732 0 R 1734 0 R 1736 0 R 1748 0 R 1754 0 R 1763 0 R 1769 0 R 1782 0 R 1788 0 R 1794 0 R 1805 0 R 1811 0 R 1816 0 R 1821 0 R 1824 0 R 1827 0 R 1832 0 R 1837 0 R 1844 0 R 1848 0 R 1853 0 R 1862 0 R 1867 0 R 1872 0 R 1874 0 R 1883 0 R 1890 0 R 1896 0 R 1901 0 R 1905 0 R 1909 0 R 1914 0 R 1919 0 R 1925 0 R 1927 0 R 1929 0 R 1932 0 R 1943 0 R 1946 0 R 1953 0 R 1961 0 R 1966 0 R 1970 0 R 1975 0 R 1977 0 R 1980 0 R 1985 0 R 1988 0 R 1990 0 R 1993 0 R 1996 0 R 1999 0 R 2009 0 R 2014 0 R 2019 0 R 2021 0 R 2029 0 R 2036 0 R 2043 0 R 2049 0 R 2054 0 R 2056 0 R 2065 0 R 2075 0 R 2085 0 R 2091
  0 R 2098 0 R 2100 0 R 2105 0 R 2107 0 R 2109 0 R 2113 0 R 2116 0 R 2119 0 R 2124 0 R 2128 0 R 2139 0 R 2142 0 R 2147 0 R 2150 0 R 2152 0 R 2157 0 R 2167 0 R 2169 0 R 2171 0 R 2173 0 R 2175 0 R 2178 0 R 2180 0 R 2182 0 R 2185 0 R 2187 0 R 2189 0 R 2193 0 R 2198 0 R 2207 0 R 2209 0 R 2211 0 R 2217 0 R 2219 0 R 2224 0 R 2226 0 R 2228 0 R 2235 0 R 2240 0 R 2244 0 R 2249 0 R 2253 0 R 2255 0 R 2257 0 R 2261 0 R 2264 0 R 2266 0 R 2268 0 R 2272 0 R 2274 0 R 2277 0 R 2279 0 R 2281 0 R 2283 0 R 2290 0 R 2293 0 R 2298 0 R 2300 0 R 2302 0 R 2304 0 R 2306 0 R 2314 0 R 2325 0 R 2339 0 R 2350 0 R 2354 0 R 2359 0 R 2363 0 R 2366 0 R 2371 0 R 2377 0 R 2379 0 R 2382 0 R 2384 0 R 2386 0 R 2388 0 R 2393 0 R 2395 0 R 2408 0 R 2411 0 R 2419 0 R 2425 0 R 2437 0 R 2451 0 R 2464 0 R 2483 0 R 2485 0 R 2487 0 R 2491 0 R 2509 0 R 2515 0 R 2527 0 R 2531 0 R 2535 0 R 2544 0 R 2556 0 R 2561 0 R 2571 0 R 2584 0 R 2603 0 R 2612 0 R 2615 0 R 2624 0 R 2641 0 R 2648 0 R 2651 0 R 2656 0 R 2660 0 R 2663 0 R 2672 0 R 26
 81 0 R 2684 0 R 2686 0 R 2690 0 R 2704 0 R 2713 0 R 2718 0 R 2722 0 R 2725 0 R 2727 0 R 2729 0 R 2731 0 R 2736 0 R 2749 0 R 2759 0 R 2767 0 R 2773 0 R 2778 0 R 2789 0 R 2796 0 R 2802 0 R 2804 0 R 2813 0 R 2821 0 R 2823 0 R 2831 0 R 2839 0 R 2841 0 R 2850 0 R 2853 0 R 2863 0 R 2867 0 R 2876 0 R 2884 0 R 2889 0 R 2893 0 R 2897 0 R 2899 0 R 2905 0 R 2909 0 R 2913 0 R 2919 0 R 2925 0 R 2928 0 R 2934 0 R 2938 0 R 2947 0 R 2952 0 R 2958 0 R 2968 0 R 2974 0 R 2981 0 R 2984 0 R 2987 0 R 2994 0 R 2999 0 R 3002 0 R 3007 0 R 3017 0 R 3022 0 R 3024 0 R 3028 0 R 3035 0 R 3038 0 R 3049 0 R 3052 0 R 3059 0 R 3067 0 R 3074 0 R 3078 0 R 3087 0 R 3092 0 R 3096 0 R 3104 0 R 3109 0 R 3113 0 R 3115 0 R 3126 0 R 3131 0 R 3134 0 R 3136 0 R 3138 0 R 3148 0 R 3155 0 R 3159 0 R 3162 0 R 3168 0 R 3172 0 R 3175 0 R 3179 0 R 3184 0 R 3192 0 R 3197 0 R 3202 0 R 3207 0 R 3209 0 R 3212 0 R 3214 0 R 3218 0 R 3229 0 R 3231 0 R 3235 0 R 3238 0 R 3242 0 R 3245 0 R 3249 0 R 3251 0 R 3264 0 R 3269 0 R 3274 0 R 3280 0 R 
 3288 0 R 3290 0 R 3298 0 R 3316 0 R 3328 0 R 3334 0 R 3350 0 R 3353 0 R 3358 0 R 3360 0 R 3367 0 R 3370 0 R 3375 0 R 3378 0 R 3380 0 R 3382 0 R 3384 0 R 3387 0 R 3405 0 R 3408 0 R 3413 0 R 3419 0 R 3429 0 R 3434 0 R 3444 0 R 3454 0 R 3462 0 R 3467 0 R 3473 0 R 3478 0 R 3481 0 R 3489 0 R 3493 0 R 3498 0 R 3503 0 R 3516 0 R 3519 0 R 3525 0 R 3531 0 R 3536 0 R 3545 0 R 3554 0 R 3560 0 R 3569 0 R 3578 0 R 3583 0 R 3589 0 R 3595 0 R 3599 0 R 3601 0 R 3607 0 R 3614 0 R 3616 0 R 3622 0 R 3624 0 R 3630 0 R 3638 0 R 3644 0 R 3653 0 R 3660 0 R 3671 0 R 3681 0 R 3693 0 R 3706 0 R 3709 0 R 3711 0 R 3715 0 R 3728 0 R 3734 0 R 3739 0 R 3745 0 R 3749 0 R 3752 0 R 3757 0 R 3759 0 R 3763 0 R 3765 0 R 3769 0 R 3772 0 R 3775 0 R 3783 0 R 3785 0 R 3789 0 R 3792 0 R 3800 0 R 3808 0 R 3812 0 R 3815 0 R 3817 0 R 3821 0 R 3826 0 R 3831 0 R 3834 0 R 3843 0 R 3848 0 R 3852 0 R 3855 0 R 3863 0 R 3868 0 R 3876 0 R 3881 0 R 3883 0 R 3889 0 R 3891 0 R 3896 0 R 3900 0 R 3906 0 R 3910 0 R 3922 0 R 3938 0 R 3953 0 
 R 3958 0 R 3961 0 R 3964 0 R 3970 0 R 3975 0 R 3977 0 R 3979 0 R 3981 0 R 3983 0 R 3985 0 R 3994 0 R 3998 0 R 4002 0 R 4006 0 R 4008 0 R 4015 0 R 4025 0 R 4034 0 R 4037 0 R 4040 0 R 4042 0 R 4049 0 R 4056 0 R 4066 0 R 4070 0 R 4073 0 R 4077 0 R 4081 0 R 4087 0 R 4090 0 R 4105 0 R 4110 0 R 4133 0 R 4137 0 R 4144 0 R 4155 0 R 4164 0 R 4167 0 R 4170 0 R 4173 0 R 4189 0 R 4194 0 R 4201 0 R]
 >>
 endobj
 4 0 obj
@@ -187,11 +187,11 @@ endobj
 << /Type /Font
 /BaseFont /71be00+NotoSerif
 /Subtype /TrueType
-/FontDescriptor 4876 0 R
+/FontDescriptor 4884 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4878 0 R
-/ToUnicode 4877 0 R
+/Widths 4886 0 R
+/ToUnicode 4885 0 R
 >>
 endobj
 11 0 obj
@@ -1750,7 +1750,7 @@ endobj
 /F1.0 10 0 R
 >>
 >>
-/Annots [4195 0 R 4196 0 R 4197 0 R 4198 0 R 4199 0 R 4200 0 R 4201 0 R 4202 0 R 4203 0 R 4204 0 R 4205 0 R 4206 0 R 4207 0 R 4208 0 R 4209 0 R 4210 0 R 4211 0 R 4212 0 R 4213 0 R 4214 0 R 4215 0 R 4216 0 R 4217 0 R 4218 0 R 4219 0 R 4220 0 R 4221 0 R 4222 0 R 4223 0 R 4224 0 R 4225 0 R 4226 0 R 4227 0 R 4228 0 R 4229 0 R 4230 0 R 4231 0 R 4232 0 R 4233 0 R 4234 0 R 4235 0 R 4236 0 R 4237 0 R 4238 0 R 4239 0 R 4240 0 R 4241 0 R 4242 0 R 4243 0 R 4244 0 R 4245 0 R 4246 0 R 4247 0 R 4248 0 R 4249 0 R 4250 0 R 4251 0 R 4252 0 R 4253 0 R 4254 0 R 4255 0 R 4256 0 R 4257 0 R 4258 0 R 4259 0 R 4260 0 R 4261 0 R 4262 0 R 4263 0 R 4264 0 R 4265 0 R 4266 0 R 4267 0 R 4268 0 R 4269 0 R 4270 0 R]
+/Annots [4203 0 R 4204 0 R 4205 0 R 4206 0 R 4207 0 R 4208 0 R 4209 0 R 4210 0 R 4211 0 R 4212 0 R 4213 0 R 4214 0 R 4215 0 R 4216 0 R 4217 0 R 4218 0 R 4219 0 R 4220 0 R 4221 0 R 4222 0 R 4223 0 R 4224 0 R 4225 0 R 4226 0 R 4227 0 R 4228 0 R 4229 0 R 4230 0 R 4231 0 R 4232 0 R 4233 0 R 4234 0 R 4235 0 R 4236 0 R 4237 0 R 4238 0 R 4239 0 R 4240 0 R 4241 0 R 4242 0 R 4243 0 R 4244 0 R 4245 0 R 4246 0 R 4247 0 R 4248 0 R 4249 0 R 4250 0 R 4251 0 R 4252 0 R 4253 0 R 4254 0 R 4255 0 R 4256 0 R 4257 0 R 4258 0 R 4259 0 R 4260 0 R 4261 0 R 4262 0 R 4263 0 R 4264 0 R 4265 0 R 4266 0 R 4267 0 R 4268 0 R 4269 0 R 4270 0 R 4271 0 R 4272 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R 4277 0 R 4278 0 R]
 >>
 endobj
 13 0 obj
@@ -3417,7 +3417,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4271 0 R 4272 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R 4277 0 R 4278 0 R 4279 0 R 4280 0 R 4281 0 R 4282 0 R 4283 0 R 4284 0 R 4285 0 R 4286 0 R 4287 0 R 4288 0 R 4289 0 R 4290 0 R 4291 0 R 4292 0 R 4293 0 R 4294 0 R 4295 0 R 4296 0 R 4297 0 R 4298 0 R 4299 0 R 4300 0 R 4301 0 R 4302 0 R 4303 0 R 4304 0 R 4305 0 R 4306 0 R 4307 0 R 4308 0 R 4309 0 R 4310 0 R 4311 0 R 4312 0 R 4313 0 R 4314 0 R 4315 0 R 4316 0 R 4317 0 R 4318 0 R 4319 0 R 4320 0 R 4321 0 R 4322 0 R 4323 0 R 4324 0 R 4325 0 R 4326 0 R 4327 0 R 4328 0 R 4329 0 R 4330 0 R 4331 0 R 4332 0 R 4333 0 R 4334 0 R 4335 0 R 4336 0 R 4337 0 R 4338 0 R 4339 0 R 4340 0 R 4341 0 R 4342 0 R 4343 0 R 4344 0 R 4345 0 R 4346 0 R 4347 0 R 4348 0 R 4349 0 R 4350 0 R 4351 0 R 4352 0 R]
+/Annots [4279 0 R 4280 0 R 4281 0 R 4282 0 R 4283 0 R 4284 0 R 4285 0 R 4286 0 R 4287 0 R 4288 0 R 4289 0 R 4290 0 R 4291 0 R 4292 0 R 4293 0 R 4294 0 R 4295 0 R 4296 0 R 4297 0 R 4298 0 R 4299 0 R 4300 0 R 4301 0 R 4302 0 R 4303 0 R 4304 0 R 4305 0 R 4306 0 R 4307 0 R 4308 0 R 4309 0 R 4310 0 R 4311 0 R 4312 0 R 4313 0 R 4314 0 R 4315 0 R 4316 0 R 4317 0 R 4318 0 R 4319 0 R 4320 0 R 4321 0 R 4322 0 R 4323 0 R 4324 0 R 4325 0 R 4326 0 R 4327 0 R 4328 0 R 4329 0 R 4330 0 R 4331 0 R 4332 0 R 4333 0 R 4334 0 R 4335 0 R 4336 0 R 4337 0 R 4338 0 R 4339 0 R 4340 0 R 4341 0 R 4342 0 R 4343 0 R 4344 0 R 4345 0 R 4346 0 R 4347 0 R 4348 0 R 4349 0 R 4350 0 R 4351 0 R 4352 0 R 4353 0 R 4354 0 R 4355 0 R 4356 0 R 4357 0 R 4358 0 R 4359 0 R 4360 0 R]
 >>
 endobj
 15 0 obj
@@ -5084,7 +5084,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4353 0 R 4354 0 R 4355 0 R 4356 0 R 4357 0 R 4358 0 R 4359 0 R 4360 0 R 4361 0 R 4362 0 R 4363 0 R 4364 0 R 4365 0 R 4366 0 R 4367 0 R 4368 0 R 4369 0 R 4370 0 R 4371 0 R 4372 0 R 4373 0 R 4374 0 R 4375 0 R 4376 0 R 4377 0 R 4378 0 R 4379 0 R 4380 0 R 4381 0 R 4382 0 R 4383 0 R 4384 0 R 4385 0 R 4386 0 R 4387 0 R 4388 0 R 4389 0 R 4390 0 R 4391 0 R 4392 0 R 4393 0 R 4394 0 R 4395 0 R 4396 0 R 4397 0 R 4398 0 R 4399 0 R 4400 0 R 4401 0 R 4402 0 R 4403 0 R 4404 0 R 4405 0 R 4406 0 R 4407 0 R 4408 0 R 4409 0 R 4410 0 R 4411 0 R 4412 0 R 4413 0 R 4414 0 R 4415 0 R 4416 0 R 4417 0 R 4418 0 R 4419 0 R 4420 0 R 4421 0 R 4422 0 R 4423 0 R 4424 0 R 4425 0 R 4426 0 R 4427 0 R 4428 0 R 4429 0 R 4430 0 R 4431 0 R 4432 0 R 4433 0 R 4434 0 R]
+/Annots [4361 0 R 4362 0 R 4363 0 R 4364 0 R 4365 0 R 4366 0 R 4367 0 R 4368 0 R 4369 0 R 4370 0 R 4371 0 R 4372 0 R 4373 0 R 4374 0 R 4375 0 R 4376 0 R 4377 0 R 4378 0 R 4379 0 R 4380 0 R 4381 0 R 4382 0 R 4383 0 R 4384 0 R 4385 0 R 4386 0 R 4387 0 R 4388 0 R 4389 0 R 4390 0 R 4391 0 R 4392 0 R 4393 0 R 4394 0 R 4395 0 R 4396 0 R 4397 0 R 4398 0 R 4399 0 R 4400 0 R 4401 0 R 4402 0 R 4403 0 R 4404 0 R 4405 0 R 4406 0 R 4407 0 R 4408 0 R 4409 0 R 4410 0 R 4411 0 R 4412 0 R 4413 0 R 4414 0 R 4415 0 R 4416 0 R 4417 0 R 4418 0 R 4419 0 R 4420 0 R 4421 0 R 4422 0 R 4423 0 R 4424 0 R 4425 0 R 4426 0 R 4427 0 R 4428 0 R 4429 0 R 4430 0 R 4431 0 R 4432 0 R 4433 0 R 4434 0 R 4435 0 R 4436 0 R 4437 0 R 4438 0 R 4439 0 R 4440 0 R 4441 0 R 4442 0 R]
 >>
 endobj
 17 0 obj
@@ -6751,7 +6751,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4435 0 R 4436 0 R 4437 0 R 4438 0 R 4439 0 R 4440 0 R 4441 0 R 4442 0 R 4443 0 R 4444 0 R 4445 0 R 4446 0 R 4447 0 R 4448 0 R 4449 0 R 4450 0 R 4451 0 R 4452 0 R 4453 0 R 4454 0 R 4455 0 R 4456 0 R 4457 0 R 4458 0 R 4459 0 R 4460 0 R 4461 0 R 4462 0 R 4463 0 R 4464 0 R 4465 0 R 4466 0 R 4467 0 R 4468 0 R 4469 0 R 4470 0 R 4471 0 R 4472 0 R 4473 0 R 4474 0 R 4475 0 R 4476 0 R 4477 0 R 4478 0 R 4479 0 R 4480 0 R 4481 0 R 4482 0 R 4483 0 R 4484 0 R 4485 0 R 4486 0 R 4487 0 R 4488 0 R 4489 0 R 4490 0 R 4491 0 R 4492 0 R 4493 0 R 4494 0 R 4495 0 R 4496 0 R 4497 0 R 4498 0 R 4499 0 R 4500 0 R 4501 0 R 4502 0 R 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]
+/Annots [4443 0 R 4444 0 R 4445 0 R 4446 0 R 4447 0 R 4448 0 R 4449 0 R 4450 0 R 4451 0 R 4452 0 R 4453 0 R 4454 0 R 4455 0 R 4456 0 R 4457 0 R 4458 0 R 4459 0 R 4460 0 R 4461 0 R 4462 0 R 4463 0 R 4464 0 R 4465 0 R 4466 0 R 4467 0 R 4468 0 R 4469 0 R 4470 0 R 4471 0 R 4472 0 R 4473 0 R 4474 0 R 4475 0 R 4476 0 R 4477 0 R 4478 0 R 4479 0 R 4480 0 R 4481 0 R 4482 0 R 4483 0 R 4484 0 R 4485 0 R 4486 0 R 4487 0 R 4488 0 R 4489 0 R 4490 0 R 4491 0 R 4492 0 R 4493 0 R 4494 0 R 4495 0 R 4496 0 R 4497 0 R 4498 0 R 4499 0 R 4500 0 R 4501 0 R 4502 0 R 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]
 >>
 endobj
 19 0 obj
@@ -7076,7 +7076,7 @@ ET
 BT
 529.4315 665.316 Td
 /F1.0 10.5 Tf
-<353234> Tj
+<353235> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7116,7 +7116,7 @@ ET
 BT
 529.4315 646.836 Td
 /F1.0 10.5 Tf
-<353235> Tj
+<353236> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7156,7 +7156,7 @@ ET
 BT
 529.4315 628.356 Td
 /F1.0 10.5 Tf
-<353331> Tj
+<353332> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7196,7 +7196,7 @@ ET
 BT
 529.4315 609.876 Td
 /F1.0 10.5 Tf
-<353336> Tj
+<353337> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7236,7 +7236,7 @@ ET
 BT
 529.4315 591.396 Td
 /F1.0 10.5 Tf
-<353430> Tj
+<353431> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7276,7 +7276,7 @@ ET
 BT
 529.4315 572.916 Td
 /F1.0 10.5 Tf
-<353533> Tj
+<353534> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7316,7 +7316,7 @@ ET
 BT
 529.4315 554.436 Td
 /F1.0 10.5 Tf
-<353631> Tj
+<353632> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7356,7 +7356,7 @@ ET
 BT
 529.4315 535.956 Td
 /F1.0 10.5 Tf
-<353633> Tj
+<353634> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7396,7 +7396,7 @@ ET
 BT
 529.4315 517.476 Td
 /F1.0 10.5 Tf
-<353637> Tj
+<353638> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7436,7 +7436,7 @@ ET
 BT
 529.4315 498.996 Td
 /F1.0 10.5 Tf
-<353638> Tj
+<353639> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7476,7 +7476,7 @@ ET
 BT
 529.4315 480.516 Td
 /F1.0 10.5 Tf
-<353732> Tj
+<353733> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7516,7 +7516,7 @@ ET
 BT
 529.4315 462.036 Td
 /F1.0 10.5 Tf
-<353733> Tj
+<353734> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7556,7 +7556,7 @@ ET
 BT
 529.4315 443.556 Td
 /F1.0 10.5 Tf
-<353737> Tj
+<353738> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7596,7 +7596,7 @@ ET
 BT
 529.4315 425.076 Td
 /F1.0 10.5 Tf
-<353832> Tj
+<353833> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7636,7 +7636,7 @@ ET
 BT
 529.4315 406.596 Td
 /F1.0 10.5 Tf
-<353833> Tj
+<353834> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7676,7 +7676,7 @@ ET
 BT
 529.4315 388.116 Td
 /F1.0 10.5 Tf
-<353836> Tj
+<353837> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7716,7 +7716,7 @@ ET
 BT
 529.4315 369.636 Td
 /F1.0 10.5 Tf
-<353837> Tj
+<353838> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7756,7 +7756,7 @@ ET
 BT
 529.4315 351.156 Td
 /F1.0 10.5 Tf
-<353930> Tj
+<353931> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7796,7 +7796,7 @@ ET
 BT
 529.4315 332.676 Td
 /F1.0 10.5 Tf
-<353934> Tj
+<353935> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7836,7 +7836,7 @@ ET
 BT
 529.4315 314.196 Td
 /F1.0 10.5 Tf
-<363032> Tj
+<363033> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7876,7 +7876,7 @@ ET
 BT
 529.4315 295.716 Td
 /F1.0 10.5 Tf
-<363033> Tj
+<363034> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7916,7 +7916,7 @@ ET
 BT
 529.4315 277.236 Td
 /F1.0 10.5 Tf
-<363034> Tj
+<363035> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7967,7 +7967,7 @@ ET
 BT
 529.4315 258.756 Td
 /F1.0 10.5 Tf
-<363035> Tj
+<363036> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8007,7 +8007,7 @@ ET
 BT
 529.4315 240.276 Td
 /F1.0 10.5 Tf
-<363036> Tj
+<363037> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8047,7 +8047,7 @@ ET
 BT
 529.4315 221.796 Td
 /F1.0 10.5 Tf
-<363230> Tj
+<363231> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8087,7 +8087,7 @@ ET
 BT
 529.4315 203.316 Td
 /F1.0 10.5 Tf
-<363334> Tj
+<363336> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8127,7 +8127,7 @@ ET
 BT
 529.4315 184.836 Td
 /F1.0 10.5 Tf
-<363335> Tj
+<363337> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8167,7 +8167,7 @@ ET
 BT
 529.4315 166.356 Td
 /F1.0 10.5 Tf
-<363337> Tj
+<363339> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8207,7 +8207,7 @@ ET
 BT
 529.4315 147.876 Td
 /F1.0 10.5 Tf
-<363339> Tj
+<363431> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8247,7 +8247,7 @@ ET
 BT
 529.4315 129.396 Td
 /F1.0 10.5 Tf
-<363431> Tj
+<363433> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8287,7 +8287,7 @@ ET
 BT
 529.4315 110.916 Td
 /F1.0 10.5 Tf
-<363433> Tj
+<363435> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8327,7 +8327,7 @@ ET
 BT
 529.4315 92.436 Td
 /F1.0 10.5 Tf
-<363434> Tj
+<363436> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8367,7 +8367,7 @@ ET
 BT
 529.4315 73.956 Td
 /F1.0 10.5 Tf
-<363436> Tj
+<363438> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8407,7 +8407,7 @@ ET
 BT
 529.4315 55.476 Td
 /F1.0 10.5 Tf
-<363438> Tj
+<363530> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8429,7 +8429,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [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 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]
+/Annots [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 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]
 >>
 endobj
 21 0 obj
@@ -8474,7 +8474,7 @@ ET
 BT
 529.4315 794.676 Td
 /F1.0 10.5 Tf
-<363439> Tj
+<363531> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8514,7 +8514,7 @@ ET
 BT
 529.4315 776.196 Td
 /F1.0 10.5 Tf
-<363536> Tj
+<363538> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8554,7 +8554,7 @@ ET
 BT
 529.4315 757.716 Td
 /F1.0 10.5 Tf
-<363537> Tj
+<363539> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8594,7 +8594,7 @@ ET
 BT
 529.4315 739.236 Td
 /F1.0 10.5 Tf
-<363538> Tj
+<363630> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8634,7 +8634,7 @@ ET
 BT
 529.4315 720.756 Td
 /F1.0 10.5 Tf
-<363539> Tj
+<363631> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8674,7 +8674,7 @@ ET
 BT
 529.4315 702.276 Td
 /F1.0 10.5 Tf
-<363630> Tj
+<363632> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8714,7 +8714,7 @@ ET
 BT
 529.4315 683.796 Td
 /F1.0 10.5 Tf
-<363631> Tj
+<363633> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8754,7 +8754,7 @@ ET
 BT
 529.4315 665.316 Td
 /F1.0 10.5 Tf
-<363732> Tj
+<363734> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8794,7 +8794,7 @@ ET
 BT
 529.4315 646.836 Td
 /F1.0 10.5 Tf
-<363735> Tj
+<363737> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8834,7 +8834,7 @@ ET
 BT
 529.4315 628.356 Td
 /F1.0 10.5 Tf
-<363739> Tj
+<363831> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8874,7 +8874,7 @@ ET
 BT
 529.4315 609.876 Td
 /F1.0 10.5 Tf
-<363835> Tj
+<363837> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8914,7 +8914,7 @@ ET
 BT
 529.4315 591.396 Td
 /F1.0 10.5 Tf
-<363936> Tj
+<363938> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8954,7 +8954,7 @@ ET
 BT
 529.4315 572.916 Td
 /F1.0 10.5 Tf
-<363937> Tj
+<363939> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8994,7 +8994,7 @@ ET
 BT
 529.4315 554.436 Td
 /F1.0 10.5 Tf
-<363938> Tj
+<373030> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9034,7 +9034,7 @@ ET
 BT
 529.4315 535.956 Td
 /F1.0 10.5 Tf
-<373037> Tj
+<373039> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9074,7 +9074,7 @@ ET
 BT
 529.4315 517.476 Td
 /F1.0 10.5 Tf
-<373038> Tj
+<373130> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9114,7 +9114,7 @@ ET
 BT
 529.4315 498.996 Td
 /F1.0 10.5 Tf
-<373039> Tj
+<373131> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9154,7 +9154,7 @@ ET
 BT
 529.4315 480.516 Td
 /F1.0 10.5 Tf
-<373130> Tj
+<373132> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9194,7 +9194,7 @@ ET
 BT
 529.4315 462.036 Td
 /F1.0 10.5 Tf
-<373131> Tj
+<373133> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9234,7 +9234,7 @@ ET
 BT
 529.4315 443.556 Td
 /F1.0 10.5 Tf
-<373133> Tj
+<373135> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9274,7 +9274,7 @@ ET
 BT
 529.4315 425.076 Td
 /F1.0 10.5 Tf
-<373134> Tj
+<373136> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9314,7 +9314,7 @@ ET
 BT
 529.4315 406.596 Td
 /F1.0 10.5 Tf
-<373135> Tj
+<373137> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9336,7 +9336,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [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]
+/Annots [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]
 >>
 endobj
 23 0 obj
@@ -10148,7 +10148,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [30 0 R 31 0 R 32 0 R 34 0 R 36 0 R 37 0 R 39 0 R 40 0 R 41 0 R]
@@ -10163,7 +10163,7 @@ endobj
 >>
 endobj
 27 0 obj
-<< /Kids [643 0 R 3662 0 R 1935 0 R 644 0 R 4022 0 R 1165 0 R 2550 0 R 3794 0 R]
+<< /Kids [643 0 R 3669 0 R 1936 0 R 644 0 R 4031 0 R 1166 0 R 2551 0 R 3803 0 R]
 >>
 endobj
 28 0 obj
@@ -10173,11 +10173,11 @@ endobj
 << /Type /Font
 /BaseFont /358635+NotoSerif-Bold
 /Subtype /TrueType
-/FontDescriptor 4880 0 R
+/FontDescriptor 4888 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4882 0 R
-/ToUnicode 4881 0 R
+/Widths 4890 0 R
+/ToUnicode 4889 0 R
 >>
 endobj
 30 0 obj
@@ -10217,11 +10217,11 @@ endobj
 << /Type /Font
 /BaseFont /260f03+NotoSerif-Italic
 /Subtype /TrueType
-/FontDescriptor 4884 0 R
+/FontDescriptor 4892 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4886 0 R
-/ToUnicode 4885 0 R
+/Widths 4894 0 R
+/ToUnicode 4893 0 R
 >>
 endobj
 34 0 obj
@@ -10239,11 +10239,11 @@ endobj
 << /Type /Font
 /BaseFont /c7d210+mplus1mn-regular
 /Subtype /TrueType
-/FontDescriptor 4888 0 R
+/FontDescriptor 4896 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4890 0 R
-/ToUnicode 4889 0 R
+/Widths 4898 0 R
+/ToUnicode 4897 0 R
 >>
 endobj
 36 0 obj
@@ -10269,11 +10269,11 @@ endobj
 << /Type /Font
 /BaseFont /34c70d+NotoSerif
 /Subtype /TrueType
-/FontDescriptor 4892 0 R
+/FontDescriptor 4900 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4894 0 R
-/ToUnicode 4893 0 R
+/Widths 4902 0 R
+/ToUnicode 4901 0 R
 >>
 endobj
 39 0 obj
@@ -10707,7 +10707,7 @@ endobj
 /F5.1 45 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -10716,11 +10716,11 @@ endobj
 << /Type /Font
 /BaseFont /26ec65+FontAwesome
 /Subtype /TrueType
-/FontDescriptor 4896 0 R
+/FontDescriptor 4904 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4898 0 R
-/ToUnicode 4897 0 R
+/Widths 4906 0 R
+/ToUnicode 4905 0 R
 >>
 endobj
 46 0 obj
@@ -10778,7 +10778,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -10863,7 +10863,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [52 0 R]
@@ -12436,7 +12436,7 @@ endobj
 /F1.1 38 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [57 0 R 59 0 R]
@@ -13556,7 +13556,7 @@ endobj
 /F1.0 10 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -14435,7 +14435,7 @@ endobj
 /F3.0 33 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [64 0 R]
@@ -15225,7 +15225,7 @@ endobj
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -15944,7 +15944,7 @@ endobj
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -16820,7 +16820,7 @@ endobj
 /F2.0 29 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [73 0 R 74 0 R 75 0 R 76 0 R]
@@ -17810,7 +17810,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [79 0 R]
@@ -18733,7 +18733,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -20244,7 +20244,7 @@ endobj
 /F4.0 35 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [84 0 R 86 0 R]
@@ -21592,7 +21592,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [90 0 R]
@@ -22666,7 +22666,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -23389,7 +23389,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -24028,7 +24028,7 @@ endobj
 /F4.0 35 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [97 0 R 98 0 R 99 0 R 101 0 R]
@@ -24272,7 +24272,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [105 0 R 106 0 R 107 0 R 108 0 R]
@@ -25144,7 +25144,7 @@ endobj
 /F4.0 35 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [112 0 R 113 0 R]
@@ -25424,7 +25424,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -26904,7 +26904,7 @@ endobj
 /F5.1 45 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 128 0 R 129 0 R 130 0 R 131 0 R]
@@ -27944,7 +27944,7 @@ endobj
 /F2.0 29 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [134 0 R 136 0 R]
@@ -28697,7 +28697,7 @@ endobj
 /F2.0 29 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [139 0 R 141 0 R 142 0 R 143 0 R 144 0 R]
@@ -32199,7 +32199,7 @@ endobj
 /F2.0 29 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R]
@@ -33000,7 +33000,7 @@ endobj
 /F2.0 29 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [159 0 R 160 0 R]
@@ -33011,12 +33011,12 @@ endobj
 endobj
 157 0 obj
 << /Limits [(__anchor-top) (adding.new.node)]
-/Names [(__anchor-top) 25 0 R (__indexterm-2002) 3556 0 R (__indexterm-2004) 3558 0 R (__indexterm-2006) 3560 0 R (__indexterm-2008) 3563 0 R (acid) 938 0 R (acl) 3361 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3656 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3658 0 R (add.metrics) 3654 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3898 0 R (adding.new.node) 3104 0 R]
+/Names [(__anchor-top) 25 0 R (__indexterm-2002) 3563 0 R (__indexterm-2004) 3565 0 R (__indexterm-2006) 3567 0 R (__indexterm-2008) 3570 0 R (acid) 939 0 R (acl) 3368 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3663 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3665 0 R (add.metrics) 3661 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3907 0 R (adding.new.node) 3111 0 R]
 >>
 endobj
 158 0 obj
 << /Limits [(io.storefile.bloom.block.size) (jdk-version-requirements)]
-/Names [(io.storefile.bloom.block.size) 358 0 R (irbrc) 801 0 R (irc) 3392 0 R (isolate-system-tables) 3355 0 R (java) 119 0 R (java-2) 1938 0 R (java-3) 1943 0 R (java.client.config) 516 0 R (jdk-issues) 2919 0 R (jdk-version-requirements) 56 0 R]
+/Names [(io.storefile.bloom.block.size) 358 0 R (irbrc) 802 0 R (irc) 3399 0 R (isolate-system-tables) 3362 0 R (java) 119 0 R (java-2) 1939 0 R (java-3) 1944 0 R (java.client.config) 516 0 R (jdk-issues) 2920 0 R (jdk-version-requirements) 56 0 R]
 >>
 endobj
 159 0 obj
@@ -34155,7 +34155,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [165 0 R 166 0 R 168 0 R]
@@ -34955,7 +34955,7 @@ endobj
 /F5.1 45 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [173 0 R 174 0 R 175 0 R 177 0 R 178 0 R 180 0 R 181 0 R]
@@ -36427,7 +36427,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [184 0 R 185 0 R]
@@ -36852,7 +36852,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -37508,7 +37508,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [191 0 R]
@@ -38275,7 +38275,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [196 0 R]
@@ -38806,7 +38806,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -38822,7 +38822,7 @@ endobj
 endobj
 206 0 obj
 << /Limits [(getshortmidpointkey-an-optimization-for-data-index-block) (handling-of-errors-during-log-splitting)]
-/Names [(getshortmidpointkey-an-optimization-for-data-index-block) 4079 0 R (getting.involved) 3381 0 R (getting_started) 48 0 R (git.best.practices) 3659 0 R (git.patch.flow) 3714 0 R (goals) 4173 0 R (guide-for-hbase-committers) 3688 0 R (guidelines-for-deploying-a-coprocessor) 2388 0 R (guidelines-for-reporting-effective-issues) 3399 0 R (hadoop) 140 0 R (hadoop.native.lib) 3995 0 R (hadoop.policy.file) 383 0 R (handling-of-errors-during-log-splitting) 1680 0 R]
+/Names [(getshortmidpointkey-an-optimization-for-data-index-block) 4088 0 R (getting.involved) 3388 0 R (getting_started) 48 0 R (git.best.practices) 3666 0 R (git.patch.flow) 3721 0 R (goals) 4181 0 R (guide-for-hbase-committers) 3695 0 R (guidelines-for-deploying-a-coprocessor) 2389 0 R (guidelines-for-reporting-effective-issues) 3406 0 R (hadoop) 140 0 R (hadoop.native.lib) 4004 0 R (hadoop.policy.file) 383 0 R (handling-of-errors-during-log-splitting) 1681 0 R]
 >>
 endobj
 207 0 obj
@@ -39352,7 +39352,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -39874,7 +39874,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -40509,7 +40509,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -41018,7 +41018,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -41549,7 +41549,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -42128,7 +42128,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [252 0 R 253 0 R]
@@ -42695,7 +42695,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [261 0 R 262 0 R 264 0 R 265 0 R]
@@ -42759,7 +42759,7 @@ endobj
 endobj
 268 0 obj
 << /Limits [(hbase.table.lock.enable) (hbase.tmp.dir)]
-/Names [(hbase.table.lock.enable) 408 0 R (hbase.table.max.rowsize) 411 0 R (hbase.tags) 1357 0 R (hbase.tests) 3539 0 R (hbase.tests.categories) 3583 0 R (hbase.tests.cluster) 3585 0 R (hbase.tests.example.code) 3586 0 R (hbase.tests.rules) 3579 0 R (hbase.tests.sleeps) 3584 0 R (hbase.tests.writing) 3578 0 R (hbase.thrift.maxQueuedRequests) 415 0 R (hbase.thrift.maxWorkerThreads) 414 0 R (hbase.thrift.minWorkerThreads) 413 0 R (hbase.tmp.dir) 198 0 R]
+/Names [(hbase.table.lock.enable) 408 0 R (hbase.table.max.rowsize) 411 0 R (hbase.tags) 1358 0 R (hbase.tests) 3546 0 R (hbase.tests.categories) 3590 0 R (hbase.tests.cluster) 3592 0 R (hbase.tests.example.code) 3593 0 R (hbase.tests.rules) 3586 0 R (hbase.tests.sleeps) 3591 0 R (hbase.tests.writing) 3585 0 R (hbase.thrift.maxQueuedRequests) 415 0 R (hbase.thrift.maxWorkerThreads) 414 0 R (hbase.thrift.minWorkerThreads) 413 0 R (hbase.tmp.dir) 198 0 R]
 >>
 endobj
 269 0 obj
@@ -43315,7 +43315,7 @@ endobj
 /F1.0 10 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -43910,7 +43910,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [285 0 R 286 0 R]
@@ -43930,7 +43930,7 @@ endobj
 endobj
 284 0 obj
 << /Limits [(hbase.cluster.distributed) (hbase.data.umask.enable)]
-/Names [(hbase.cluster.distributed) 200 0 R (hbase.column.max.version) 434 0 R (hbase.commit.msg.format) 3840 0 R (hbase.coordinated.state.manager.class) 477 0 R (hbase.coprocessor.abortonerror) 399 0 R (hbase.coprocessor.enabled) 392 0 R (hbase.coprocessor.master.classes) 398 0 R (hbase.coprocessor.region.classes) 397 0 R (hbase.coprocessor.user.enabled) 396 0 R (hbase.data.umask) 425 0 R (hbase.data.umask.enable) 424 0 R]
+/Names [(hbase.cluster.distributed) 200 0 R (hbase.column.max.version) 434 0 R (hbase.commit.msg.format) 3849 0 R (hbase.coordinated.state.manager.class) 477 0 R (hbase.coprocessor.abortonerror) 399 0 R (hbase.coprocessor.enabled) 392 0 R (hbase.coprocessor.master.classes) 398 0 R (hbase.coprocessor.region.classes) 397 0 R (hbase.coprocessor.user.enabled) 396 0 R (hbase.data.umask) 425 0 R (hbase.data.umask.enable) 424 0 R]
 >>
 endobj
 285 0 obj
@@ -44476,7 +44476,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -44967,7 +44967,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -45539,7 +45539,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -46100,7 +46100,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -46697,7 +46697,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -47301,7 +47301,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -47844,7 +47844,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -48352,7 +48352,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -48927,7 +48927,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [350 0 R 354 0 R]
@@ -49496,7 +49496,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -49506,7 +49506,7 @@ endobj
 endobj
 359 0 obj
 << /Limits [(quota) (regions.arch)]
-/Names [(quota) 3216 0 R (read-api-and-usage) 1939 0 R (read-hbase-shell-commands-from-a-command-file) 787 0 R (reading-filtering-and-sending-edits) 3196 0 R (reading_cells_with_labels) 1411 0 R (recommended.configurations.hdfs) 546 0 R (recommended_configurations) 541 0 R (recommended_configurations.zk) 542 0 R (region-overlap-repairs) 3953 0 R (region-replication-for-meta-table-s-region) 1916 0 R (regions.arch) 1712 0 R]
+/Names [(quota) 3223 0 R (read-api-and-usage) 1940 0 R (read-hbase-shell-commands-from-a-command-file) 788 0 R (reading-filtering-and-sending-edits) 3203 0 R (reading_cells_with_labels) 1412 0 R (recommended.configurations.hdfs) 546 0 R (recommended_configurations) 541 0 R (recommended_configurations.zk) 542 0 R (region-overlap-repairs) 3962 0 R (region-replication-for-meta-table-s-region) 1917 0 R (regions.arch) 1713 0 R]
 >>
 endobj
 360 0 obj
@@ -50107,7 +50107,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [370 0 R 371 0 R 373 0 R 375 0 R 376 0 R]
@@ -50118,7 +50118,7 @@ endobj
 endobj
 368 0 obj
 << /Limits [(hbase.regionserver.thrift.compact) (hbase.rootdir.perms)]
-/Names [(hbase.regionserver.thrift.compact) 420 0 R (hbase.regionserver.thrift.framed) 416 0 R (hbase.regionserver.thrift.framed.max_frame_size_in_mb) 417 0 R (hbase.release.announcement) 3519 0 R (hbase.replication.management) 3166 0 R (hbase.replication.rpc.codec) 486 0 R (hbase.replication.source.maxthreads) 487 0 R (hbase.rest-csrf.browser-useragents-regex) 470 0 R (hbase.rest.csrf.enabled) 469 0 R (hbase.rest.filter.classes) 458 0 R (hbase.rest.port) 400 0 R (hbase.rest.readonly) 403 0 R (hbase.rest.support.proxyuser) 406 0 R (hbase.rest.threads.max) 404 0 R (hbase.rest.threads.min) 405 0 R (hbase.rolling.restart) 635 0 R (hbase.rolling.upgrade) 631 0 R (hbase.rootdir) 199 0 R (hbase.rootdir.perms) 421 0 R]
+/Names [(hbase.regionserver.thrift.compact) 420 0 R (hbase.regionserver.thrift.framed) 416 0 R (hbase.regionserver.thrift.framed.max_frame_size_in_mb) 417 0 R (hbase.release.announcement) 3526 0 R (hbase.replication.management) 3173 0 R (hbase.replication.rpc.codec) 486 0 R (hbase.replication.source.maxthreads) 487 0 R (hbase.rest-csrf.browser-useragents-regex) 470 0 R (hbase.rest.csrf.enabled) 469 0 R (hbase.rest.filter.classes) 458 0 R (hbase.rest.port) 400 0 R (hbase.rest.readonly) 403 0 R (hbase.rest.support.proxyuser) 406 0 R (hbase.rest.threads.max) 404 0 R (hbase.rest.threads.min) 405 0 R (hbase.rolling.restart) 635 0 R (hbase.rolling.upgrade) 631 0 R (hbase.rootdir) 199 0 R (hbase.rootdir.perms) 421 0 R]
 >>
 endobj
 369 0 obj
@@ -50698,7 +50698,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -51240,7 +51240,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -51791,7 +51791,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -52310,7 +52310,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -52828,7 +52828,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -52838,7 +52838,7 @@ endobj
 endobj
 412 0 obj
 << /Limits [(hbase.zookeeper.property.maxClientCnxns) (hfile.block.index.cacheonwrite)]
-/Names [(hbase.zookeeper.property.maxClientCnxns) 273 0 R (hbase.zookeeper.property.syncLimit) 267 0 R (hbase.zookeeper.quorum) 203 0 R (hbase_apis) 2142 0 R (hbase_default_configurations) 197 0 R (hbase_env) 530 0 R (hbase_metrics) 3109 0 R (hbase_mob) 1953 0 R (hbase_site) 526 0 R (hbase_supported_tested_definitions) 42 0 R (hbck) 3007 0 R (hbck.in.depth) 3945 0 R (health.check) 3003 0 R (hedged.reads) 2606 0 R (hfile) 1769 0 R (hfile-format) 1770 0 R (hfile-format-2) 4048 0 R (hfile.block.bloom.cacheonwrite) 355 0 R (hfile.block.cache.size) 344 0 R (hfile.block.index.cacheonwrite) 345 0 R]
+/Names [(hbase.zookeeper.property.maxClientCnxns) 273 0 R (hbase.zookeeper.property.syncLimit) 267 0 R (hbase.zookeeper.quorum) 203 0 R (hbase_apis) 2143 0 R (hbase_default_configurations) 197 0 R (hbase_env) 530 0 R (hbase_metrics) 3116 0 R (hbase_mob) 1954 0 R (hbase_site) 526 0 R (hbase_supported_tested_definitions) 42 0 R (hbck) 3008 0 R (hbck.in.depth) 3954 0 R (health.check) 3004 0 R (hedged.reads) 2607 0 R (hfile) 1770 0 R (hfile-format) 1771 0 R (hfile-format-2) 4057 0 R (hfile.block.bloom.cacheonwrite) 355 0 R (hfile.block.cache.size) 344 0 R (hfile.block.index.cacheonwrite) 345 0 R]
 >>
 endobj
 413 0 obj
@@ -53324,7 +53324,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -53337,7 +53337,7 @@ endobj
 endobj
 422 0 obj
 << /Limits [(hbase.rpc) (hbase.secure.spnego.ui)]
-/Names [(hbase.rpc) 4166 0 R (hbase.rpc.rows.warning.threshold) 509 0 R (hbase.rpc.shortoperation.timeout) 367 0 R (hbase.rpc.timeout) 361 0 R (hbase.rs.cacheblocksonwrite) 360 0 R (hbase.secure.bulkload) 1437 0 R (hbase.secure.configuration) 1277 0 R (hbase.secure.enable) 1441 0 R (hbase.secure.simpleconfiguration) 1319 0 R (hbase.secure.spnego.ui) 1272 0 R]
+/Names [(hbase.rpc) 4174 0 R (hbase.rpc.rows.warning.threshold) 509 0 R (hbase.rpc.shortoperation.timeout) 367 0 R (hbase.rpc.timeout) 361 0 R (hbase.rs.cacheblocksonwrite) 360 0 R (hbase.secure.bulkload) 1438 0 R (hbase.secure.configuration) 1278 0 R (hbase.secure.enable) 1442 0 R (hbase.secure.simpleconfiguration) 1320 0 R (hbase.secure.spnego.ui) 1273 0 R]
 >>
 endobj
 423 0 obj
@@ -53858,7 +53858,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -54426,7 +54426,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -54943,7 +54943,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -55486,7 +55486,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [461 0 R 462 0 R]
@@ -55514,7 +55514,7 @@ endobj
 endobj
 460 0 obj
 << /Limits [(hbase.limitetprivate.api) (hbase.master.logcleaner.plugins)]
-/Names [(hbase.limitetprivate.api) 626 0 R (hbase.local.dir) 205 0 R (hbase.mapreduce.classpath) 1174 0 R (hbase.master.balancer.maxRitPercent) 295 0 R (hbase.master.fileSplitTimeout) 217 0 R (hbase.master.hfilecleaner.plugins) 215 0 R (hbase.master.info.bindAddress) 209 0 R (hbase.master.info.port) 208 0 R (hbase.master.infoserver.redirect) 216 0 R (hbase.master.kerberos.principal) 378 0 R (hbase.master.keytab.file) 377 0 R (hbase.master.loadbalance.bytable) 463 0 R (hbase.master.loadbalancer.class) 459 0 R (hbase.master.logcleaner.plugins) 212 0 R]
+/Names [(hbase.limitetprivate.api) 626 0 R (hbase.local.dir) 205 0 R (hbase.mapreduce.classpath) 1175 0 R (hbase.master.balancer.maxRitPercent) 295 0 R (hbase.master.fileSplitTimeout) 217 0 R (hbase.master.hfilecleaner.plugins) 215 0 R (hbase.master.info.bindAddress) 209 0 R (hbase.master.info.port) 208 0 R (hbase.master.infoserver.redirect) 216 0 R (hbase.master.kerberos.principal) 378 0 R (hbase.master.keytab.file) 377 0 R (hbase.master.loadbalance.bytable) 463 0 R (hbase.master.loadbalancer.class) 459 0 R (hbase.master.logcleaner.plugins) 212 0 R]
 >>
 endobj
 461 0 obj
@@ -56133,7 +56133,7 @@ endobj
 /F4.0 35 0 R
 /F6.0 471 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [467 0 R 468 0 R]
@@ -56174,11 +56174,11 @@ endobj
 << /Type /Font
 /BaseFont /066905+mplus1mn-bold
 /Subtype /TrueType
-/FontDescriptor 4900 0 R
+/FontDescriptor 4908 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4902 0 R
-/ToUnicode 4901 0 R
+/Widths 4910 0 R
+/ToUnicode 4909 0 R
 >>
 endobj
 472 0 obj
@@ -56744,7 +56744,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -56757,7 +56757,7 @@ endobj
 endobj
 478 0 obj
 << /Limits [(hbase.defaults.for.version.skip) (hbase.hregion.percolumnfamilyflush.size.lower.bound.min)]
-/Names [(hbase.defaults.for.version.skip) 407 0 R (hbase.dfs.client.read.shortcircuit.buffer.size) 439 0 R (hbase.display.keys) 391 0 R (hbase.dynamic.jars.dir) 456 0 R (hbase.encryption.server) 1424 0 R (hbase.env.sh) 511 0 R (hbase.fix.version.in.jira) 3828 0 R (hbase.history) 4126 0 R (hbase.hregion.majorcompaction) 314 0 R (hbase.hregion.majorcompaction.jitter) 315 0 R (hbase.hregion.max.filesize) 313 0 R (hbase.hregion.memstore.block.multiplier) 309 0 R (hbase.hregion.memstore.flush.size) 306 0 R (hbase.hregion.memstore.mslab.enabled) 310 0 R (hbase.hregion.percolumnfamilyflush.size.lower.bound.min) 307 0 R]
+/Names [(hbase.defaults.for.version.skip) 407 0 R (hbase.dfs.client.read.shortcircuit.buffer.size) 439 0 R (hbase.display.keys) 391 0 R (hbase.dynamic.jars.dir) 456 0 R (hbase.encryption.server) 1425 0 R (hbase.env.sh) 511 0 R (hbase.fix.version.in.jira) 3837 0 R (hbase.history) 4134 0 R (hbase.hregion.majorcompaction) 314 0 R (hbase.hregion.majorcompaction.jitter) 315 0 R (hbase.hregion.max.filesize) 313 0 R (hbase.hregion.memstore.block.multiplier) 309 0 R (hbase.hregion.memstore.flush.size) 306 0 R (hbase.hregion.memstore.mslab.enabled) 310 0 R (hbase.hregion.percolumnfamilyflush.size.lower.bound.min) 307 0 R]
 >>
 endobj
 479 0 obj
@@ -57296,7 +57296,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -57811,7 +57811,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -58322,7 +58322,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -58338,7 +58338,7 @@ endobj
 endobj
 501 0 obj
 << /Limits [(hbase.mob.file.cache.size) (hbase.org.site.contributing)]
-/Names [(hbase.mob.file.cache.size) 492 0 R (hbase.moduletest.run) 3548 0 R (hbase.moduletest.shell) 3543 0 R (hbase.moduletests) 3541 0 R (hbase.normalizer.min.region.count) 300 0 R (hbase.normalizer.period) 299 0 R (hbase.offpeak.end.hour) 335 0 R (hbase.offpeak.start.hour) 334 0 R (hbase.org) 3530 0 R (hbase.org.site.contributing) 3532 0 R]
+/Names [(hbase.mob.file.cache.size) 492 0 R (hbase.moduletest.run) 3555 0 R (hbase.moduletest.shell) 3550 0 R (hbase.moduletests) 3548 0 R (hbase.normalizer.min.region.count) 300 0 R (hbase.normalizer.period) 299 0 R (hbase.offpeak.end.hour) 335 0 R (hbase.offpeak.start.hour) 334 0 R (hbase.org) 3537 0 R (hbase.org.site.contributing) 3539 0 R]
 >>
 endobj
 502 0 obj
@@ -58853,7 +58853,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -59964,7 +59964,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [517 0 R]
@@ -60812,7 +60812,7 @@ endobj
 /F4.0 35 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [520 0 R]
@@ -62269,7 +62269,7 @@ endobj
 /F3.0 33 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -62793,7 +62793,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -63446,7 +63446,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [535 0 R 536 0 R 538 0 R 539 0 R 540 0 R 545 0 R]
@@ -64201,7 +64201,7 @@ endobj
 /F2.0 29 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [551 0 R 554 0 R 557 0 R]
@@ -64240,7 +64240,7 @@ endobj
 endobj
 556 0 obj
 << /Limits [(configuration) (coprocessor-implementation-overview)]
-/Names [(configuration) 104 0 R (configuration-2) 3138 0 R (configuration-3) 3916 0 R (configuration-files) 111 0 R (configuration-from-scratch) 3813 0 R (configuration-properties) 1921 0 R (configure-mob-compaction-mergeable-threshold) 1962 0 R (configure-mob-compaction-policy) 1961 0 R (configuring-columns-for-mob) 1958 0 R (configuring-server-wide-behavior-of-bloom-filters) 2512 0 R (configuring-the-rest-server-and-client) 2161 0 R (confirm) 190 0 R (connection-setup) 4178 0 R (constraints) 1076 0 R (contributing-to-documentation-or-other-strings) 3851 0 R (coprocessor-implementation-overview) 2317 0 R]
+/Names [(configuration) 104 0 R (configuration-2) 3145 0 R (configuration-3) 3925 0 R (configuration-files) 111 0 R (configuration-from-scratch) 3822 0 R (configuration-properties) 1922 0 R (configure-mob-compaction-mergeable-threshold) 1963 0 R (configure-mob-compaction-policy) 1962 0 R (configuring-columns-for-mob) 1959 0 R (configuring-server-wide-behavior-of-bloom-filters) 2513 0 R (configuring-the-rest-server-and-client) 2162 0 R (confirm) 190 0 R (connection-setup) 4186 0 R (constraints) 1077 0 R (contributing-to-documentation-or-other-strings) 3860 0 R (coprocessor-implementation-overview) 2318 0 R]
 >>
 endobj
 557 0 obj
@@ -65102,7 +65102,7 @@ endobj
 /F4.0 35 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [561 0 R]
@@ -65916,7 +65916,7 @@ endobj
 /F5.1 45 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [565 0 R 566 0 R 567 0 R 571 0 R 574 0 R 575 0 R 576 0 R]
@@ -66658,7 +66658,7 @@ endobj
 /F1.1 38 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [580 0 R 581 0 R]
@@ -68090,7 +68090,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [585 0 R 586 0 R]
@@ -68867,7 +68867,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -69568,7 +69568,7 @@ endobj
 /F3.0 33 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -70899,7 +70899,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -72394,7 +72394,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 >>
@@ -72560,7 +72560,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -72758,7 +72758,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [601 0 R 602 0 R 603 0 R 604 0 R 605 0 R]
@@ -73512,7 +73512,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [610 0 R]
@@ -74429,7 +74429,7 @@ endobj
 /F3.0 33 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [614 0 R]
@@ -76744,7 +76744,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [617 0 R 618 0 R]
@@ -77777,7 +77777,7 @@ endobj
 /F1.1 38 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [622 0 R 623 0 R 624 0 R]
@@ -78441,7 +78441,7 @@ endobj
 /F2.0 29 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [632 0 R 633 0 R 634 0 R 636 0 R 637 0 R 638 0 R]
@@ -79236,7 +79236,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [646 0 R]
@@ -79247,17 +79247,17 @@ endobj
 endobj
 642 0 obj
 << /Limits [(standalone.over.hdfs) (storefile-refresher)]
-/Names [(standalone.over.hdfs) 169 0 R (standalone_dist) 164 0 R (starting-and-stopping-the-rest-server) 2160 0 R (static-loading) 2351 0 R (static-unloading) 2354 0 R (store) 1763 0 R (store-file-ttl) 1915 0 R (store.file.dir) 1778 0 R (store.memstore) 1764 0 R (storefile-refresher) 1911 0 R]
+/Names [(standalone.over.hdfs) 169 0 R (standalone_dist) 164 0 R (starting-and-stopping-the-rest-server) 2161 0 R (static-loading) 2352 0 R (static-unloading) 2355 0 R (store) 1764 0 R (store-file-ttl) 1916 0 R (store.file.dir) 1779 0 R (store.memstore) 1765 0 R (storefile-refresher) 1912 0 R]
 >>
 endobj
 643 0 obj
 << /Limits [(__anchor-top) (cascading)]
-/Kids [157 0 R 3657 0 R 1880 0 R 1461 0 R 3893 0 R 1624 0 R 4074 0 R 2110 0 R 2068 0 R 2025 0 R 2059 0 R 3462 0 R]
+/Kids [157 0 R 3664 0 R 1881 0 R 1462 0 R 3902 0 R 1625 0 R 4083 0 R 2111 0 R 2069 0 R 2026 0 R 2060 0 R 3469 0 R]
 >>
 endobj
 644 0 obj
 << /Limits [(hbase.mob.file.cache.size) (hbase.zookeeper.property.initLimit)]
-/Kids [501 0 R 4021 0 R 441 0 R 239 0 R 368 0 R 422 0 R 4167 0 R 455 0 R 268 0 R 3580 0 R 3551 0 R]
+/Kids [501 0 R 4030 0 R 441 0 R 239 0 R 368 0 R 422 0 R 4175 0 R 455 0 R 268 0 R 3587 0 R 3558 0 R]
 >>
 endobj
 645 0 obj
@@ -79921,7 +79921,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -80636,7 +80636,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [654 0 R]
@@ -81103,7 +81103,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 >>
@@ -81823,7 +81823,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [663 0 R 666 0 R]
@@ -83089,7 +83089,7 @@ endobj
 /F3.0 33 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
 /Annots [669 0 R 670 0 R 671 0 R 672 0 R 673 0 R 674 0 R 675 0 R 676 0 R 679 0 R 680 0 R 681 0 R]
@@ -84025,7 +84025,7 @@ endobj
 /Font << /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4646 0 R
+/XObject << /Stamp2 4654 0 R
 >>
 >>
 /Annots [684 0 R 685 0 R 688 0 R]
@@ -84068,7 +84068,7 @@ endobj
 >>
 endobj
 689 0 obj
-<< /Length 13208
+<< /Length 13097
 >>
 stream
 q
@@ -84229,49 +84229,27 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-BT
-48.24 645.6032 Td
-/F3.0 9.975 Tf
-<4368616e676564206d657472696373> Tj
-ET
-
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
+0.1251 Tw
 
 BT
-48.24 626.014 Td
+48.24 645.005 Td
 /F1.0 10.5 Tf
-<54686520666f6c6c6f77696e67206d6574726963732068617665206368616e676564206e616d65733a> Tj
+[<546865207072656669782d7472656520656e636f64696e67206e6565647320746f2062652072656d6f7665642066726f6d20616c6c207461626c6573206265666f72652075706772> 20.0195 <6164696e6720746f20484261736520322e302b2e2054> 29.7852 <6f20646f>] TJ
 ET
 
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
-
--0.5 Tc
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
-
-BT
-56.8805 598.234 Td
-/F1.0 10.5 Tf
-<a5> Tj
-ET
 
+0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
-
-0.0 Tc
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.5216 Tw
+0.0642 Tw
 
 BT
-66.24 598.234 Td
+48.24 629.225 Td
 /F1.0 10.5 Tf
-[<4d6574726963732070726576696f75736c79207075626c697368656420756e64657220746865206e616d652022> 80.0781 <41737369676e6d656e744d616e67657222205b7369635d20617265206e6f77207075626c6973686564>] TJ
+<7468617420666972737420796f75206e65656420746f206368616e67652074686520656e636f64696e672066726f6d205052454649585f5452454520746f20736f6d657468696e6720656c7365207468617420697320737570706f7274656420696e> Tj
 ET
 
 
@@ -84281,77 +84259,73 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
+0.4982 Tw
+
 BT
-66.24 582.454 Td
+48.24 613.445 Td
 /F1.0 10.5 Tf
-[<756e64657220746865206e616d652022> 80.0781 <41737369676e6d656e744d616e6167657222>] TJ
+<484261736520322e302e204166746572207468617420796f75206861766520746f206d616a6f7220636f6d7061637420746865207461626c657320746861742077657265207573696e67205052454649585f5452454520656e636f64696e67> Tj
 ET
 
+
+0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
+1.2919 Tw
+
 BT
-48.24 554.674 Td
+48.24 597.665 Td
 /F1.0 10.5 Tf
-<54686520666f6c6c6f77696e67206d6574726963732068617665206368616e676564207468656972206d65616e696e673a> Tj
+[<6265666f72652e2054> 29.7852 <6f20636865636b20776869636820636f6c756d6e2066616d696c69657320617265207573696e6720696e636f6d70617469626c65206461746120626c6f636b20656e636f64696e6720796f752063616e20757365>] TJ
 ET
 
+
+0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
-
--0.5 Tc
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
+0.2588 0.5451 0.7922 scn
+0.2588 0.5451 0.7922 SCN
 
 BT
-56.8805 526.894 Td
+48.24 581.885 Td
 /F1.0 10.5 Tf
-<a5> Tj
+[<5072652d55706772> 20.0195 <6164652056> 60.0586 <616c696461746f72>] TJ
 ET
 
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
-
-0.0 Tc
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.2038 Tw
-
 BT
-66.24 526.894 Td
+159.4027 581.885 Td
 /F1.0 10.5 Tf
-<546865206d65747269632027626c6f636b43616368654576696374696f6e436f756e7427207075626c6973686564206f6e2061207065722d726567696f6e20736572766572206261736973206e6f206c6f6e67657220696e636c75646573> Tj
+<2e> Tj
 ET
 
-
-0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.1371 Tw
-
 BT
-66.24 511.114 Td
-/F1.0 10.5 Tf
-<626c6f636b732072656d6f7665642066726f6d207468652063616368652064756520746f2074686520696e76616c69646174696f6e206f6620746865206866696c65732074686579206172652066726f6d2028652e672e20766961> Tj
+48.24 554.7032 Td
+/F3.0 9.975 Tf
+<4368616e676564206d657472696373> Tj
 ET
 
-
-0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
 BT
-66.24 495.334 Td
+48.24 535.114 Td
 /F1.0 10.5 Tf
-<636f6d70616374696f6e292e> Tj
+<54686520666f6c6c6f77696e67206d6574726963732068617665206368616e676564206e616d65733a> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -84362,7 +84336,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-56.8805 473.554 Td
+56.8805 507.334 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -84374,12 +84348,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-1.1803 Tw
+2.5216 Tw
 
 BT
-66.24 473.554 Td
+66.24 507.334 Td
 /F1.0 10.5 Tf
-[<546865206d65747269632027746f74616c52657175657374436f756e742720696e6372656d656e7473206f6e63652070657220726571756573743b2070726576696f75736c7920697420696e6372656d656e7465642062> 20.0195 <7920746865>] TJ
+[<4d6574726963732070726576696f75736c79207075626c697368656420756e64657220746865206e616d652022> 80.0781 <41737369676e6d656e744d616e67657222205b7369635d20617265206e6f77207075626c6973686564>] TJ
 ET
 
 
@@ -84389,72 +84363,49 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.0522 Tw
-
 BT
-66.24 457.774 Td
+66.24 491.554 Td
 /F1.0 10.5 Tf
-<6e756d626572206f6620> Tj
+[<756e64657220746865206e616d652022> 80.0781 <41737369676e6d656e744d616e6167657222>] TJ
 ET
 
-
-0.0 Tw
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
-0.6941 0.1294 0.2745 scn
-0.6941 0.1294 0.2745 SCN
-
-0.0522 Tw
-
-BT
-122.0574 457.774 Td
-/F4.0 10.5 Tf
-<416374696f6e73> Tj
-ET
-
-
-0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.0522 Tw
-
 BT
-158.8074 457.774 Td
+48.24 463.774 Td
 /F1.0 10.5 Tf
-<206361727269656420696e2074686520726571756573743b20652e672e2069662061207265717565737420776173206120> Tj
+<54686520666f6c6c6f77696e67206d6574726963732068617665206368616e676564207468656972206d65616e696e673a> Tj
 ET
 
-
-0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
-0.6941 0.1294 0.2745 scn
-0.6941 0.1294 0.2745 SCN
 
-0.0522 Tw
+-0.5 Tc
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
 
 BT
-385.3837 457.774 Td
-/F4.0 10.5 Tf
-<6d756c7469> Tj
+56.8805 435.994 Td
+/F1.0 10.5 Tf
+<a5> Tj
 ET
 
-
-0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
+
+0.0 Tc
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.0522 Tw
+0.2038 Tw
 
 BT
-411.6337 457.774 Td
+66.24 435.994 Td
 /F1.0 10.5 Tf
-<206d616465206f6620666f7572204765747320616e642074776f> Tj
+<546865206d65747269632027626c6f636b43616368654576696374696f6e436f756e7427207075626c6973686564206f6e2061207065722d726567696f6e20736572766572206261736973206e6f206c6f6e67657220696e636c75646573> Tj
 ET
 
 
@@ -84464,12 +84415,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.2548 Tw
+2.1371 Tw
 
 BT
-66.24 441.994 Td
+66.24 420.214 Td
 /F1.0 10.5 Tf
-[<507574732c207765d56420696e6372656d656e742027746f74616c52657175657374436f756e74272062> 20.0195 <79207369783b206e6f7720776520696e6372656d656e742062> 20.0195 <79206f6e65207265676172646c6573732e2045787065637420746f>] TJ
+<626c6f636b732072656d6f7665642066726f6d207468652063616368652064756520746f2074686520696e76616c69646174696f6e206f6620746865206866696c65732074686579206172652066726f6d2028652e672e20766961> Tj
 ET
 
 
@@ -84480,9 +84431,9 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 426.214 Td
+66.24 404.434 Td
 /F1.0 10.5 Tf
-<736565206c6f7765722076616c75657320666f722074686973206d657472696320696e2068626173652d322e302e302e> Tj
+<636f6d70616374696f6e292e> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -84493,7 +84444,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-56.8805 404.434 Td
+56.8805 382.654 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -84505,12 +84456,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.7217 Tw
+1.1803 Tw
 
 BT
-66.24 404.434 Td
+66.24 382.654 Td
 /F1.0 10.5 Tf
-<54686520277265616452657175657374436f756e7427206e6f7720636f756e747320726561647320746861742072657475726e2061206e6f6e2d656d70747920726f7720776865726520696e206f6c646572206862617365732c> Tj
+[<546865206d65747269632027746f74616c52657175657374436f756e742720696e6372656d656e7473206f6e63652070657220726571756573743b2070726576696f75736c7920697420696e6372656d656e7465642062> 20.0195 <7920746865>] TJ
 ET
 
 
@@ -84520,27 +84471,27 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.4478 Tw
+0.0522 Tw
 
 BT
-66.24 388.654 Td
+66.24 366.874 Td
 /F1.0 10.5 Tf
-<7765d56420696e6372656d656e7420277265616452657175657374436f756e74272077686574686572206120526573756c74206f72206e6f742e2054686973206368616e67652077696c6c20666c617474656e207468652070726f66696c65> Tj
+<6e756d626572206f6620> Tj
 ET
 
 
 0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
+0.6941 0.1294 0.2745 scn
+0.6941 0.1294 0.2745 SCN
 
-0.602 Tw
+0.0522 Tw
 
 BT
-66.24 372.874 Td
-/F1.0 10.5 Tf
-[<6f662074686520726561642d7265717565737473206772> 20.0195 <6170687320696620726571756573747320666f72206e6f6e2d6578697374656e7420726f77732e20412059> 29.7852 <43534220726561642d686561767920776f726b6c6f61642063616e>] TJ
+122.0574 366.874 Td
+/F4.0 10.5 Tf
+<416374696f6e73> Tj
 ET
 
 
@@ -84550,49 +84501,57 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
+0.0522 Tw
+
 BT
-66.24 357.094 Td
+158.8074 366.874 Td
 /F1.0 10.5 Tf
-<646f207468697320646570656e64656e74206f6e20686f772074686520646174616261736520776173206c6f616465642e> Tj
+<206361727269656420696e2074686520726571756573743b20652e672e2069662061207265717565737420776173206120> Tj
 ET
 
+
+0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
+0.6941 0.1294 0.2745 scn
+0.6941 0.1294 0.2745 SCN
+
+0.0522 Tw
 
 BT
-48.24 329.314 Td
-/F1.0 10.5 Tf
-<54686520666f6c6c6f77696e67206d6574726963732068617665206265656e2072656d6f7665643a> Tj
+385.3837 366.874 Td
+/F4.0 10.5 Tf
+<6d756c7469> Tj
 ET
 
+
+0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
-
--0.5 Tc
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
+0.0522 Tw
+
 BT
-56.8805 301.534 Td
+411.6337 366.874 Td
 /F1.0 10.5 Tf
-<a5> Tj
+<206d616465206f6620666f7572204765747320616e642074776f> Tj
 ET
 
+
+0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
-
-0.0 Tc
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-3.8547 Tw
+0.2548 Tw
 
 BT
-66.24 301.534 Td
+66.24 351.094 Td
 /F1.0 10.5 Tf
-[<4d6574726963732072656c6174656420746f20746865204469737472696275746564204c6f67205265706c61> 20.0195 <79206665617475726520617265206e6f206c6f6e6765722070726573656e742e20546865792077657265>] TJ
+[<507574732c207765d56420696e6372656d656e742027746f74616c52657175657374436f756e74272062> 20.0195 <79207369783b206e6f7720776520696e6372656d656e742062> 20.0195 <79206f6e65207265676172646c6573732e2045787065637420746f>] TJ
 ET
 
 
@@ -84602,73 +84561,81 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-4.0825 Tw
-
 BT
-66.24 285.754 Td
+66.24 335.314 Td
 /F1.0 10.5 Tf
-[<7072657669736f756c7920666f756e6420696e2074686520726567696f6e2073657276657220636f6e7465787420756e64657220746865206e616d6520277265706c61> 20.0195 <79272e20536565207468652073656374696f6e>] TJ
+<736565206c6f7765722076616c75657320666f722074686973206d657472696320696e2068626173652d322e302e302e> Tj
 ET
 
-
-0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
-0.2588 0.5451 0.7922 scn
-0.2588 0.5451 0.7922 SCN
+
+-0.5 Tc
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
 
 BT
-66.24 269.974 Td
+56.8805 313.534 Td
 /F1.0 10.5 Tf
-[<224469737472696275746564204c6f67205265706c61> 20.0195 <792220666561747572652062726f6b> 20.0195 <656e20616e642072656d6f766564>] TJ
+<a5> Tj
 ET
 
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
+
+0.0 Tc
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
+0.7217 Tw
+
 BT
-335.5646 269.974 Td
+66.24 313.534 Td
 /F1.0 10.5 Tf
-<20666f722064657461696c732e> Tj
+<54686520277265616452657175657374436f756e7427206e6f7720636f756e747320726561647320746861742072657475726e2061206e6f6e2d656d70747920726f7720776865726520696e206f6c646572206862617365732c> Tj
 ET
 
+
+0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
+0.4478 Tw
+
 BT
-48.24 242.194 Td
+66.24 297.754 Td
 /F1.0 10.5 Tf
-<54686520666f6c6c6f77696e67206d6574726963732068617665206265656e2061646465643a> Tj
+<7765d56420696e6372656d656e7420277265616452657175657374436f756e74272077686574686572206120526573756c74206f72206e6f742e2054686973206368616e67652077696c6c20666c617474656e207468652070726f66696c65> Tj
 ET
 
+
+0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
-
--0.5 Tc
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
+0.602 Tw
+
 BT
-56.8805 214.414 Td
+66.24 281.974 Td
 /F1.0 10.5 Tf
-<a5> Tj
+[<6f662074686520726561642d7265717565737473206772> 20.0195 <6170687320696620726571756573747320666f72206e6f6e2d6578697374656e7420726f77732e20412059> 29.7852 <43534220726561642d686561767920776f726b6c6f61642063616e>] TJ
 ET
 
+
+0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
-
-0.0 Tc
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
 BT
-66.24 214.414 Td
+66.24 266.194 Td
 /F1.0 10.5 Tf
-[<27746f74616c526f7741> 20.0195 <6374696f6e52657175657374436f756e7427206973206120636f756e74206f6620726567696f6e20726f7720616374696f6e732073756d6d696e6720726561647320616e64207772697465732e>] TJ
+<646f207468697320646570656e64656e74206f6e20686f772074686520646174616261736520776173206c6f616465642e> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -84677,37 +84644,37 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 187.2322 Td
-/F3.0 9.975 Tf
-<4368616e676564206c6f6767696e67> Tj
+48.24 238.414 Td
+/F1.0 10.5 Tf
+<54686520666f6c6c6f77696e67206d6574726963732068617665206265656e2072656d6f7665643a> Tj
 ET
 
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
+
+-0.5 Tc
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.3742 Tw
-
 BT
-48.24 167.643 Td
+56.8805 210.634 Td
 /F1.0 10.5 Tf
-<48426173652d322e302e30206e6f77207573657320> Tj
+<a5> Tj
 ET
 
-
-0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
-0.2588 0.5451 0.7922 scn
-0.2588 0.5451 0.7922 SCN
 
-2.3742 Tw
+0.0 Tc
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+3.8547 Tw
 
 BT
-164.678 167.643 Td
+66.24 210.634 Td
 /F1.0 10.5 Tf
-<736c66346a> Tj
+[<4d6574726963732072656c6174656420746f20746865204469737472696275746564204c6f67205265706c61> 20.0195 <79206665617475726520617265206e6f206c6f6e6765722070726573656e742e20546865792077657265>] TJ
 ET
 
 
@@ -84717,12 +84684,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.3742 Tw
+4.0825 Tw
 
 BT
-185.552 167.643 Td
+66.24 194.854 Td
 /F1.0 10.5 Tf
-[<20617320697473206c6f6767696e672066726f6e74656e642e20507265766f75736c79> 89.8438 <2c207765207573656420>] TJ
+[<7072657669736f756c7920666f756e6420696e2074686520726567696f6e2073657276657220636f6e7465787420756e64657220746865206e616d6520277265706c61> 20.0195 <79272e20536565207468652073656374696f6e>] TJ
 ET
 
 
@@ -84732,85 +84699,69 @@ ET
 0.2588 0.5451 0.7922 scn
 0.2588 0.5451 0.7922 SCN
 
-2.3742 Tw
-
 BT
-421.2983 167.643 Td
+66.24 179.074 Td
 /F1.0 10.5 Tf
-<6c6f67346a2028312e3229> Tj
+[<224469737472696275746564204c6f67205265706c61> 20.0195 <792220666561747572652062726f6b> 20.0195 <656e20616e642072656d6f766564>] TJ
 ET
 
-
-0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.3742 Tw
-
 BT
-471.9935 167.643 Td
+335.5646 179.074 Td
 /F1.0 10.5 Tf
-[<2e2046> 40.0391 <6f72206d6f737420746865>] TJ
+<20666f722064657461696c732e> Tj
 ET
 
-
-0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-5.7213 Tw
-
 BT
-48.24 151.863 Td
+48.24 151.294 Td
 /F1.0 10.5 Tf
-[<7472> 20.0195 <616e736974696f6e2073686f756c64206265207365616d6c6573733b20736c66346a20646f6573206120676f6f64206a6f6220696e74657270726574696e6720>] TJ
+<54686520666f6c6c6f77696e67206d6574726963732068617665206265656e2061646465643a> Tj
 ET
 
-
-0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
+
+-0.5 Tc
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-5.7213 Tw
-
 BT
-425.3882 151.863 Td
-/F3.0 10.5 Tf
-<6c6f67346a2e70726f70657274696573> Tj
+56.8805 123.514 Td
+/F1.0 10.5 Tf
+<a5> Tj
 ET
 
-
-0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
+
+0.0 Tc
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-5.7213 Tw
-
 BT
-502.2167 151.863 Td
+66.24 123.514 Td
 /F1.0 10.5 Tf
-<206c6f6767696e67> Tj
+[<27746f74616c526f7741> 20.0195 <6374696f6e52657175657374436f756e7427206973206120636f756e74206f6620726567696f6e20726f7720616374696f6e732073756d6d696e6720726561647320616e64207772697465732e>] TJ
 ET
 
-
-0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
 BT
-48.24 136.083 Td
-/F1.0 10.5 Tf
-[<636f6e6669677572> 20.0195 <6174696f6e2066696c65732073756368207468617420796f752073686f756c64206e6f74206e6f7469636520616e> 20.0195 <7920646966666572656e636520696e20796f7572206c6f672073797374656d20656d697373696f6e732e>] TJ
+48.24 96.3322 Td
+/F3.0 9.975 Tf
+<4368616e676564206c6f6767696e67> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -84818,27 +84769,27 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.7138 Tw
+2.3742 Tw
 
 BT
-48.24 108.303 Td
+48.24 76.743 Td
 /F1.0 10.5 Tf
-<5468617420736169642c20796f757220> Tj
+<48426173652d322e302e30206e6f77207573657320> Tj
 ET
 
 
 0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
+0.2588 0.5451 0.7922 scn
+0.2588 0.5451 0.7922 SCN
 
-0.7138 Tw
+2.3742 Tw
 
 BT
-127.8505 108.303 Td
-/F3.0 10.5 Tf
-<6c6f67346a2e70726f70657274696573> Tj
+164.678 76.743 Td
+/F1.0 10.5 Tf
+<736c66346a> Tj
 ET
 
 
@@ -84848,12 +84799,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.7138 Tw
+2.3742 Tw
 
 BT
-204.679 108.303 Td
+185.552 76.743 Td
 /F1.0 10.5 Tf
-[<206d61> 20.0195 <79206e656564206672657368656e696e672e2053656520>] TJ
+[<20617320697473206c6f6767696e672066726f6e74656e642e20507265766f75736c79> 89.8438 <2c207765207573656420>] TJ
 ET
 
 
@@ -84863,12 +84814,12 @@ ET
 0.2588 0.5451 0.7922 scn
 0.2588 0.5451 0.7922 SCN
 
-0.7138 Tw
+2.3742 Tw
 
 BT
-341.367 108.303 Td
+421.2983 76.743 Td
 /F1.0 10.5 Tf
-[<4842> 20.0195 <4153452d3230333531>] TJ
+<6c6f67346a2028312e3229> Tj
 ET
 
 
@@ -84878,12 +84829,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.7138 Tw
+2.3742 Tw
 
 BT
-408.5773 108.303 Td
+471.9935 76.743 Td
 /F1.0 10.5 Tf
-<20666f72206578616d706c652c2077686572652061207374616c65> Tj
+[<2e2046> 40.0391 <6f72206d6f737420746865>] TJ
 ET
 
 
@@ -84893,12 +84844,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.2159 Tw
+5.7213 Tw
 
 BT
-48.24 92.523 Td
+48.24 60.963 Td
 /F1.0 10.5 Tf
-[<6c6f6720636f6e6669677572> 20.0195 <6174696f6e2066696c65206d616e6966657374206173206e6574747920636f6e6669677572> 20.0195 <6174696f6e206265696e672064756d706564206174204445425547206c6576656c20617320707265616d626c65206f6e>] TJ
+[<7472> 20.0195 <616e736974696f6e2073686f756c64206265207365616d6c6573733b20736c66346a20646f6573206120676f6f64206a6f6220696e74657270726574696e6720>] TJ
 ET
 
 
@@ -84908,12 +84859,31 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
+5.7213 Tw
+
 BT
-48.24 76.743 Td
+425.3882 60.963 Td
+/F3.0 10.5 Tf
+<6c6f67346a2e70726f70657274696573> Tj
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+5.7213 Tw
+
+BT
+502.2167 60.963 Td
 /F1.0 10.5 Tf
-<6576657279207368656c6c20636f6d6d616e6420696e766f636174696f6e2e> Tj
+<206c6f6767696e67> Tj
 ET
 
+
+0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 q
@@ -84954,10 +84924,10 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4645 0 R
+/XObject << /Stamp1 4653 0 R
 >>
 >>
-/Annots [693 0 R 695 0 R 697 0 R 698 0 R 699 0 R]
+/Annots [693 0 R 694 0 R 696 0 R 698 0 R 699 0 R]
 >>
 endobj
 691 0 obj
@@ -84965,7 +84935,7 @@ endobj
 endobj
 692 0 obj
 << /Limits [(upgrade2.0.process) (upgrade2.0.tracing)]
-/Names [(upgrade2.0.process) 757 0 R (upgrade2.0.public.api) 731 0 R (upgrade2.0.regions.on.master) 686 0 R (upgrade2.0.removed.configs) 665 0 R (upgrade2.0.renamed.configs) 677 0 R (upgrade2.0.replication) 712 0 R (upgrade2.0.rolling.upgrades) 756 0 R (upgrade2.0.shaded.client.preferred) 724 0 R (upgrade2.0.shell) 714 0 R (upgrade2.0.tracing) 732 0 R]
+/Names [(upgrade2.0.process) 758 0 R (upgrade2.0.public.api) 732 0 R (upgrade2.0.regions.on.master) 686 0 R (upgrade2.0.removed.configs) 665 0 R (upgrade2.0.renamed.configs) 677 0 R (upgrade2.0.replication) 713 0 R (upgrade2.0.rolling.upgrades) 757 0 R (upgrade2.0.shaded.client.preferred) 725 0 R (upgrade2.0.shell) 715 0 R (upgrade2.0.tracing) 735 0 R]
 >>
 endobj
 693 0 obj
@@ -84980,38 +84950,35 @@ endobj
 >>
 endobj
 694 0 obj
-[690 0 R /XYZ 0 656.969 null]
-endobj
-695 0 obj
 << /Border [0 0 0]
-/Dest (upgrade2.0.distributed.log.replay)
+/Dest (ops.pre-upgrade)
 /Subtype /Link
-/Rect [66.24 266.908 335.5646 281.188]
+/Rect [48.24 578.819 159.4027 593.099]
 /Type /Annot
 >>
 endobj
-696 0 obj
-[690 0 R /XYZ 0 198.598 null]
+695 0 obj
+[690 0 R /XYZ 0 566.069 null]
 endobj
-697 0 obj
+696 0 obj
 << /Border [0 0 0]
-/A << /Type /Action
-/S /URI
-/URI (https://www.slf4j.org/)
->>
+/Dest (upgrade2.0.distributed.log.replay)
 /Subtype /Link
-/Rect [164.678 164.577 185.552 178.857]
+/Rect [66.24 176.008 335.5646 190.288]
 /Type /Annot
 >>
 endobj
+697 0 obj
+[690 0 R /XYZ 0 107.698 null]
+endobj
 698 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
-/URI (http://logging.apache.org/log4j/1.2/)
+/URI (https://www.slf4j.org/)
 >>
 /Subtype /Link
-/Rect [421.2983 164.577 471.9935 178.857]
+/Rect [164.678 73.677 185.552 87.957]
 /Type /Annot
 >>
 endobj
@@ -85019,18 +84986,15 @@ endobj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
-/URI (https://issues.apache.org/jira/browse/HBASE-20351)
+/URI (http://logging.apache.org/log4j/1.2/)
 >>
 /Subtype /Link
-/Rect [341.367 105.237 408.5773 119.517]
+/Rect [421.2983 73.677 471.9935 87.957]
 /Type /Annot
 >>
 endobj
 700 0 obj
-[690 0 R /XYZ 0 60.927 null]
-endobj
-701 0 obj
-<< /Length 10945
+<< /Length 11390
 >>
 stream
 q
@@ -85040,7 +85004,119 @@ q
 0.2 0.2 0.2 SCN
 
 BT
-48.24 795.2367 Td
+48.24 794.676 Td
+/F1.0 10.5 Tf
+[<636f6e6669677572> 20.0195 <6174696f6e2066696c65732073756368207468617420796f752073686f756c64206e6f74206e6f7469636520616e> 20.0195 <7920646966666572656e636520696e20796f7572206c6f672073797374656d20656d697373696f6e732e>] TJ
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+0.7138 Tw
+
+BT
+48.24 766.896 Td
+/F1.0 10.5 Tf
+<5468617420736169642c20796f757220> Tj
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+0.7138 Tw
+
+BT
+127.8505 766.896 Td
+/F3.0 10.5 Tf
+<6c6f67346a2e70726f70657274696573> Tj
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+0.7138 Tw
+
+BT
+204.679 766.896 Td
+/F1.0 10.5 Tf
+[<206d61> 20.0195 <79206e656564206672657368656e696e672e2053656520>] TJ
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2588 0.5451 0.7922 scn
+0.2588 0.5451 0.7922 SCN
+
+0.7138 Tw
+
+BT
+341.367 766.896 Td
+/F1.0 10.5 Tf
+[<4842> 20.0195 <4153452d3230333531>] TJ
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+0.7138 Tw
+
+BT
+408.5773 766.896 Td
+/F1.0 10.5 Tf
+<20666f72206578616d706c652c2077686572652061207374616c65> Tj
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+0.2159 Tw
+
+BT
+48.24 751.116 Td
+/F1.0 10.5 Tf
+[<6c6f6720636f6e6669677572> 20.0195 <6174696f6e2066696c65206d616e6966657374206173206e6574747920636f6e6669677572> 20.0195 <6174696f6e206265696e672064756d706564206174204445425547206c6576656c20617320707265616d626c65206f6e>] TJ
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+48.24 735.336 Td
+/F1.0 10.5 Tf
+<6576657279207368656c6c20636f6d6d616e6420696e766f636174696f6e2e> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+48.24 708.1542 Td
 /F3.0 9.975 Tf
 [<5a6f6f4b> 20.0195 <656570657220636f6e66696773206e6f206c6f6e67657220726561642066726f6d207a6f6f2e636667>] TJ
 ET
@@ -85053,7 +85129,7 @@ ET
 1.2598 Tw
 
 BT
-48.24 775.6475 Td
+48.24 688.565 Td
 /F1.0 10.5 Tf
 [<4842617365206e6f206c6f6e676572206f7074696f6e616c6c792072656164732074686520277a6f6f2e636667272066696c6520666f72205a6f6f4b> 20.0195 <65657065722072656c6174656420636f6e6669677572> 20.0195 <6174696f6e2073657474696e67732e204966>] TJ
 ET
@@ -85068,7 +85144,7 @@ ET
 1.2166 Tw
 
 BT
-48.24 759.8675 Td
+48.24 672.785 Td
 /F1.0 10.5 Tf
 [<796f752070726576696f75736c792072656c696564206f6e20746865202768626173652e636f6e6669672e726561642e7a6f6f6b> 20.0195 <65657065722e636f6e6669672720636f6e66696720666f7220746869732066756e6374696f6e616c697479> 89.8438 <2c20796f75>] TJ
 ET
@@ -85083,7 +85159,7 @@ ET
 6.4967 Tw
 
 BT
-48.24 744.0875 Td
+48.24 657.005 Td
 /F1.0 10.5 Tf
 [<73686f756c64206d696772> 20.0195 <61746520616e> 20.0195 <79206e65656465642073657474696e677320746f207468652068626173652d736974652e786d6c2066696c65207768696c6520616464696e672074686520707265666978>] TJ
 ET
@@ -85096,7 +85172,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 728.3075 Td
+48.24 641.225 Td
 /F1.0 10.5 Tf
 [<2768626173652e7a6f6f6b> 20.0195 <65657065722e70726f7065727479> 89.8438 <2e2720746f20656163682070726f7065727479206e616d652e>] TJ
 ET
@@ -85107,7 +85183,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 701.1257 Td
+48.24 614.0432 Td
 /F3.0 9.975 Tf
 <4368616e67657320696e207065726d697373696f6e73> Tj
 ET
@@ -85118,7 +85194,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 681.5365 Td
+48.24 594.454 Td
 /F1.0 10.5 Tf
 <54686520666f6c6c6f77696e67207065726d697373696f6e2072656c61746564206368616e6765732065697468657220616c74657265642073656d616e74696373206f722064656661756c74733a> Tj
 ET
@@ -85131,7 +85207,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-56.8805 653.7565 Td
+56.8805 566.674 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -85146,7 +85222,7 @@ ET
 1.1089 Tw
 
 BT
-66.24 653.7565 Td
+66.24 566.674 Td
 /F1.0 10.5 Tf
 [<5065726d697373696f6e73206772> 20.0195 <616e74656420746f20612075736572206e6f77206d657267652077697468206578697374696e67207065726d697373696f6e7320666f72207468617420757365722c2072> 20.0195 <6174686572207468616e>] TJ
 ET
@@ -85159,7 +85235,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 637.9765 Td
+66.24 550.894 Td
 /F1.0 10.5 Tf
 <6f7665722d77726974696e67207468656d2e202873656520> Tj
 ET
@@ -85170,7 +85246,7 @@ ET
 0.2588 0.5451 0.7922 SCN
 
 BT
-185.268 637.9765 Td
+185.268 550.894 Td
 /F1.0 10.5 Tf
 [<7468652072656c65617365206e6f7465206f6e204842> 20.0195 <4153452d3137343732>] TJ
 ET
@@ -85181,7 +85257,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-349.9918 637.9765 Td
+349.9918 550.894 Td
 /F1.0 10.5 Tf
 <20666f722064657461696c7329> Tj
 ET
@@ -85194,7 +85270,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-56.8805 616.1965 Td
+56.8805 529.114 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -85207,7 +85283,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 616.1965 Td
+66.24 529.114 Td
 /F1.0 10.5 Tf
 <526567696f6e205365727665722047726f757020636f6d6d616e64732028616464656420696e20312e342e3029206e6f7720726571756972652061646d696e2070726976696c656765732e> Tj
 ET
@@ -85218,7 +85294,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 589.0147 Td
+48.24 501.9322 Td
 /F3.0 9.975 Tf
 [<4d6f73742041> 20.0195 <646d696e204150497320646f6ed57420776f726b20616761696e737420616e20484261736520322e302b20636c75737465722066726f6d207072652d484261736520322e3020636c69656e7473>] TJ
 ET
@@ -85231,7 +85307,7 @@ ET
 0.2358 Tw
 
 BT
-48.24 569.4255 Td
+48.24 482.343 Td
 /F1.0 10.5 Tf
 <41206e756d626572206f662061646d696e20636f6d6d616e647320617265206b6e6f776e20746f206e6f7420776f726b207768656e20757365642066726f6d2061207072652d484261736520322e3020636c69656e742e2054686973> Tj
 ET
@@ -85246,7 +85322,7 @@ ET
 0.9874 Tw
 
 BT
-48.24 553.6455 Td
+48.24 466.563 Td
 /F1.0 10.5 Tf
 [<696e636c7564657320616e204842617365205368656c6c20746861742068617320746865206c696272> 20.0195 <617279206a6172732066726f6d207072652d484261736520322e302e2059> 69.8242 <6f752077696c6c206e65656420746f20706c616e20666f7220616e>] TJ
 ET
@@ -85259,7 +85335,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 537.8655 Td
+48.24 450.783 Td
 /F1.0 10.5 Tf
 <6f7574616765206f6620757365206f662061646d696e204150497320616e6420636f6d6d616e647320756e74696c20796f752063616e20616c736f2075706461746520746f20746865206e656564656420636c69656e742076657273696f6e2e> Tj
 ET
@@ -85272,7 +85348,7 @@ ET
 0.662 Tw
 
 BT
-48.24 510.0855 Td
+48.24 423.003 Td
 /F1.0 10.5 Tf
 [<54686520666f6c6c6f77696e6720636c69656e74206f706572> 20.0195 <6174696f6e7320646f206e6f7420776f726b20616761696e737420484261736520322e302b20636c7573746572207768656e2065786563757465642066726f6d2061207072652d>] TJ
 ET
@@ -85285,7 +85361,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 494.3055 Td
+48.24 407.223 Td
 /F1.0 10.5 Tf
 <484261736520322e3020636c69656e743a> Tj
 ET
@@ -85298,7 +85374,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-56.8805 466.5255 Td
+56.8805 379.443 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -85311,7 +85387,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 466.5255 Td
+66.24 379.443 Td
 /F1.0 10.5 Tf
 <6c6973745f70726f63656475726573> Tj
 ET
@@ -85324,7 +85400,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-56.8805 444.7455 Td
+56.8805 357.663 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -85337,7 +85413,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 444.7455 Td
+66.24 357.663 Td
 /F1.0 10.5 Tf
 <73706c6974> Tj
 ET
@@ -85350,7 +85426,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-56.8805 422.9655 Td
+56.8805 335.883 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -85363,7 +85439,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 422.9655 Td
+66.24 335.883 Td
 /F1.0 10.5 Tf
 <6d657267655f726567696f6e> Tj
 ET
@@ -85376,7 +85452,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-56.8805 401.1855 Td
+56.8805 314.103 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -85389,7 +85465,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 401.1855 Td
+66.24 314.103 Td
 /F1.0 10.5 Tf
 <6c6973745f71756f746173> Tj
 ET
@@ -85402,7 +85478,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-56.8805 379.4055 Td
+56.8805 292.323 Td
 /F1.0 10.5 Tf
 <a5> T

<TRUNCATED>

[06/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.MyRegionServer.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.MyRegionServer.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.MyRegionServer.html
index ec434e9..403df35 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.MyRegionServer.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.MyRegionServer.html
@@ -110,53 +110,54 @@
 <span class="sourceLineNo">102</span>    // Delete the ephemeral node of the meta-carrying region server.<a name="line.102"></a>
 <span class="sourceLineNo">103</span>    // This is trigger the expire of this region server on the master.<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    String rsEphemeralNodePath =<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        ZNodePaths.joinZNode(master.getZooKeeper().znodePaths.rsZNode, metaServerName.toString());<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    ZKUtil.deleteNode(master.getZooKeeper(), rsEphemeralNodePath);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    LOG.info("Deleted the znode for the RegionServer hosting hbase:meta; waiting on SSH");<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    // Wait for SSH to finish<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    final ServerManager serverManager = master.getServerManager();<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    final ServerName priorMetaServerName = metaServerName;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    TEST_UTIL.waitFor(120000, 200, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      @Override<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      public boolean evaluate() throws Exception {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        return !serverManager.isServerOnline(priorMetaServerName)<a name="line.114"></a>
-<span class="sourceLineNo">115</span>            &amp;&amp; !serverManager.areDeadServersInProgress();<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    });<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    LOG.info("Past wait on RIT");<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    TEST_UTIL.waitUntilNoRegionsInTransition(60000);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    // Now, make sure meta is assigned<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    assertTrue("Meta should be assigned",<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      regionStates.isRegionOnline(HRegionInfo.FIRST_META_REGIONINFO));<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // Now, make sure meta is registered in zk<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    metaState = MetaTableLocator.getMetaRegionState(master.getZooKeeper());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    assertEquals("Meta should not be in transition", RegionState.State.OPEN,<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        metaState.getState());<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    assertEquals("Meta should be assigned", metaState.getServerName(),<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      regionStates.getRegionServerOfRegion(HRegionInfo.FIRST_META_REGIONINFO));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assertNotEquals("Meta should be assigned on a different server",<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      metaState.getServerName(), metaServerName);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>  public static class MyRegionServer extends MiniHBaseClusterRegionServer {<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public MyRegionServer(Configuration conf) throws IOException, KeeperException,<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        InterruptedException {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      super(conf);<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 abort(String reason, Throwable cause) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      // sleep to slow down the region server abort<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      try {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        Thread.sleep(30*1000);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      } catch (InterruptedException e) {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        return;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      super.abort(reason, cause);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>}<a name="line.151"></a>
+<span class="sourceLineNo">105</span>        ZNodePaths.joinZNode(master.getZooKeeper().getZNodePaths().rsZNode,<a name="line.105"></a>
+<span class="sourceLineNo">106</span>                metaServerName.toString());<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    ZKUtil.deleteNode(master.getZooKeeper(), rsEphemeralNodePath);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    LOG.info("Deleted the znode for the RegionServer hosting hbase:meta; waiting on SSH");<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    // Wait for SSH to finish<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    final ServerManager serverManager = master.getServerManager();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    final ServerName priorMetaServerName = metaServerName;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    TEST_UTIL.waitFor(120000, 200, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      public boolean evaluate() throws Exception {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        return !serverManager.isServerOnline(priorMetaServerName)<a name="line.115"></a>
+<span class="sourceLineNo">116</span>            &amp;&amp; !serverManager.areDeadServersInProgress();<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>    LOG.info("Past wait on RIT");<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    TEST_UTIL.waitUntilNoRegionsInTransition(60000);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    // Now, make sure meta is assigned<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    assertTrue("Meta should be assigned",<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      regionStates.isRegionOnline(HRegionInfo.FIRST_META_REGIONINFO));<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    // Now, make sure meta is registered in zk<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    metaState = MetaTableLocator.getMetaRegionState(master.getZooKeeper());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    assertEquals("Meta should not be in transition", RegionState.State.OPEN,<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        metaState.getState());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    assertEquals("Meta should be assigned", metaState.getServerName(),<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      regionStates.getRegionServerOfRegion(HRegionInfo.FIRST_META_REGIONINFO));<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    assertNotEquals("Meta should be assigned on a different server",<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      metaState.getServerName(), metaServerName);<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>  public static class MyRegionServer extends MiniHBaseClusterRegionServer {<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>    public MyRegionServer(Configuration conf) throws IOException, KeeperException,<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        InterruptedException {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      super(conf);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>    @Override<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    public void abort(String reason, Throwable cause) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      // sleep to slow down the region server abort<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      try {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>        Thread.sleep(30*1000);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      } catch (InterruptedException e) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        return;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      }<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      super.abort(reason, cause);<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.html
index ec434e9..403df35 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.html
@@ -110,53 +110,54 @@
 <span class="sourceLineNo">102</span>    // Delete the ephemeral node of the meta-carrying region server.<a name="line.102"></a>
 <span class="sourceLineNo">103</span>    // This is trigger the expire of this region server on the master.<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    String rsEphemeralNodePath =<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        ZNodePaths.joinZNode(master.getZooKeeper().znodePaths.rsZNode, metaServerName.toString());<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    ZKUtil.deleteNode(master.getZooKeeper(), rsEphemeralNodePath);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    LOG.info("Deleted the znode for the RegionServer hosting hbase:meta; waiting on SSH");<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    // Wait for SSH to finish<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    final ServerManager serverManager = master.getServerManager();<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    final ServerName priorMetaServerName = metaServerName;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    TEST_UTIL.waitFor(120000, 200, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      @Override<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      public boolean evaluate() throws Exception {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        return !serverManager.isServerOnline(priorMetaServerName)<a name="line.114"></a>
-<span class="sourceLineNo">115</span>            &amp;&amp; !serverManager.areDeadServersInProgress();<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    });<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    LOG.info("Past wait on RIT");<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    TEST_UTIL.waitUntilNoRegionsInTransition(60000);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    // Now, make sure meta is assigned<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    assertTrue("Meta should be assigned",<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      regionStates.isRegionOnline(HRegionInfo.FIRST_META_REGIONINFO));<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // Now, make sure meta is registered in zk<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    metaState = MetaTableLocator.getMetaRegionState(master.getZooKeeper());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    assertEquals("Meta should not be in transition", RegionState.State.OPEN,<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        metaState.getState());<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    assertEquals("Meta should be assigned", metaState.getServerName(),<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      regionStates.getRegionServerOfRegion(HRegionInfo.FIRST_META_REGIONINFO));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assertNotEquals("Meta should be assigned on a different server",<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      metaState.getServerName(), metaServerName);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>  public static class MyRegionServer extends MiniHBaseClusterRegionServer {<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public MyRegionServer(Configuration conf) throws IOException, KeeperException,<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        InterruptedException {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      super(conf);<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 abort(String reason, Throwable cause) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      // sleep to slow down the region server abort<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      try {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        Thread.sleep(30*1000);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      } catch (InterruptedException e) {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        return;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      super.abort(reason, cause);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>}<a name="line.151"></a>
+<span class="sourceLineNo">105</span>        ZNodePaths.joinZNode(master.getZooKeeper().getZNodePaths().rsZNode,<a name="line.105"></a>
+<span class="sourceLineNo">106</span>                metaServerName.toString());<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    ZKUtil.deleteNode(master.getZooKeeper(), rsEphemeralNodePath);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    LOG.info("Deleted the znode for the RegionServer hosting hbase:meta; waiting on SSH");<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    // Wait for SSH to finish<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    final ServerManager serverManager = master.getServerManager();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    final ServerName priorMetaServerName = metaServerName;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    TEST_UTIL.waitFor(120000, 200, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      public boolean evaluate() throws Exception {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        return !serverManager.isServerOnline(priorMetaServerName)<a name="line.115"></a>
+<span class="sourceLineNo">116</span>            &amp;&amp; !serverManager.areDeadServersInProgress();<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>    LOG.info("Past wait on RIT");<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    TEST_UTIL.waitUntilNoRegionsInTransition(60000);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    // Now, make sure meta is assigned<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    assertTrue("Meta should be assigned",<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      regionStates.isRegionOnline(HRegionInfo.FIRST_META_REGIONINFO));<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    // Now, make sure meta is registered in zk<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    metaState = MetaTableLocator.getMetaRegionState(master.getZooKeeper());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    assertEquals("Meta should not be in transition", RegionState.State.OPEN,<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        metaState.getState());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    assertEquals("Meta should be assigned", metaState.getServerName(),<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      regionStates.getRegionServerOfRegion(HRegionInfo.FIRST_META_REGIONINFO));<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    assertNotEquals("Meta should be assigned on a different server",<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      metaState.getServerName(), metaServerName);<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>  public static class MyRegionServer extends MiniHBaseClusterRegionServer {<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>    public MyRegionServer(Configuration conf) throws IOException, KeeperException,<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        InterruptedException {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      super(conf);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>    @Override<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    public void abort(String reason, Throwable cause) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      // sleep to slow down the region server abort<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      try {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>        Thread.sleep(30*1000);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      } catch (InterruptedException e) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        return;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      }<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      super.abort(reason, cause);<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMirroringTableStateManager.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMirroringTableStateManager.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMirroringTableStateManager.html
index b05574a..b49f1dd 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMirroringTableStateManager.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMirroringTableStateManager.html
@@ -90,27 +90,28 @@
 <span class="sourceLineNo">082</span><a name="line.82"></a>
 <span class="sourceLineNo">083</span>  private TableState.State getTableStateInZK(ZKWatcher watcher, final TableName tableName)<a name="line.83"></a>
 <span class="sourceLineNo">084</span>      throws KeeperException, IOException, InterruptedException {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    String znode = ZNodePaths.joinZNode(watcher.znodePaths.tableZNode, tableName.getNameAsString());<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    byte [] data = ZKUtil.getData(watcher, znode);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    if (data == null || data.length &lt;= 0) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      return null;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    try {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      ProtobufUtil.expectPBMagicPrefix(data);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      ZooKeeperProtos.DeprecatedTableState.Builder builder =<a name="line.92"></a>
-<span class="sourceLineNo">093</span>          ZooKeeperProtos.DeprecatedTableState.newBuilder();<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      int magicLen = ProtobufUtil.lengthOfPBMagic();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      ProtobufUtil.mergeFrom(builder, data, magicLen, data.length - magicLen);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      return TableState.State.valueOf(builder.getState().toString());<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    } catch (IOException e) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      KeeperException ke = new KeeperException.DataInconsistencyException();<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      ke.initCause(e);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      throw ke;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    } catch (DeserializationException e) {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>      throw ZKUtil.convert(e);<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>}<a name="line.105"></a>
+<span class="sourceLineNo">085</span>    String znode = ZNodePaths.joinZNode(watcher.getZNodePaths().tableZNode,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>            tableName.getNameAsString());<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    byte [] data = ZKUtil.getData(watcher, znode);<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    if (data == null || data.length &lt;= 0) {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      return null;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    try {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      ProtobufUtil.expectPBMagicPrefix(data);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      ZooKeeperProtos.DeprecatedTableState.Builder builder =<a name="line.93"></a>
+<span class="sourceLineNo">094</span>          ZooKeeperProtos.DeprecatedTableState.newBuilder();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      int magicLen = ProtobufUtil.lengthOfPBMagic();<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      ProtobufUtil.mergeFrom(builder, data, magicLen, data.length - magicLen);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      return TableState.State.valueOf(builder.getState().toString());<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    } catch (IOException e) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      KeeperException ke = new KeeperException.DataInconsistencyException();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      ke.initCause(e);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      throw ke;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    } catch (DeserializationException e) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      throw ZKUtil.convert(e);<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestSplitLogManager.DummyMasterServices.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestSplitLogManager.DummyMasterServices.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestSplitLogManager.DummyMasterServices.html
index 770d1f3..97afc91 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestSplitLogManager.DummyMasterServices.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestSplitLogManager.DummyMasterServices.html
@@ -135,13 +135,13 @@
 <span class="sourceLineNo">127</span>        new ZKWatcher(conf, "split-log-manager-tests" + UUID.randomUUID().toString(), null);<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    master = new DummyMasterServices(zkw, conf);<a name="line.128"></a>
 <span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>    ZKUtil.deleteChildrenRecursively(zkw, zkw.znodePaths.baseZNode);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    ZKUtil.createAndFailSilent(zkw, zkw.znodePaths.baseZNode);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    assertTrue(ZKUtil.checkExists(zkw, zkw.znodePaths.baseZNode) != -1);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    LOG.debug(zkw.znodePaths.baseZNode + " created");<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    ZKUtil.createAndFailSilent(zkw, zkw.znodePaths.splitLogZNode);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    assertTrue(ZKUtil.checkExists(zkw, zkw.znodePaths.splitLogZNode) != -1);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    LOG.debug(zkw.znodePaths.splitLogZNode + " created");<a name="line.136"></a>
+<span class="sourceLineNo">130</span>    ZKUtil.deleteChildrenRecursively(zkw, zkw.getZNodePaths().baseZNode);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    ZKUtil.createAndFailSilent(zkw, zkw.getZNodePaths().baseZNode);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    assertTrue(ZKUtil.checkExists(zkw, zkw.getZNodePaths().baseZNode) != -1);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    LOG.debug(zkw.getZNodePaths().baseZNode + " created");<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    ZKUtil.createAndFailSilent(zkw, zkw.getZNodePaths().splitLogZNode);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    assertTrue(ZKUtil.checkExists(zkw, zkw.getZNodePaths().splitLogZNode) != -1);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    LOG.debug(zkw.getZNodePaths().splitLogZNode + " created");<a name="line.136"></a>
 <span class="sourceLineNo">137</span><a name="line.137"></a>
 <span class="sourceLineNo">138</span>    resetCounters();<a name="line.138"></a>
 <span class="sourceLineNo">139</span><a name="line.139"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestSplitLogManager.Expr.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestSplitLogManager.Expr.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestSplitLogManager.Expr.html
index 770d1f3..97afc91 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestSplitLogManager.Expr.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestSplitLogManager.Expr.html
@@ -135,13 +135,13 @@
 <span class="sourceLineNo">127</span>        new ZKWatcher(conf, "split-log-manager-tests" + UUID.randomUUID().toString(), null);<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    master = new DummyMasterServices(zkw, conf);<a name="line.128"></a>
 <span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>    ZKUtil.deleteChildrenRecursively(zkw, zkw.znodePaths.baseZNode);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    ZKUtil.createAndFailSilent(zkw, zkw.znodePaths.baseZNode);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    assertTrue(ZKUtil.checkExists(zkw, zkw.znodePaths.baseZNode) != -1);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    LOG.debug(zkw.znodePaths.baseZNode + " created");<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    ZKUtil.createAndFailSilent(zkw, zkw.znodePaths.splitLogZNode);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    assertTrue(ZKUtil.checkExists(zkw, zkw.znodePaths.splitLogZNode) != -1);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    LOG.debug(zkw.znodePaths.splitLogZNode + " created");<a name="line.136"></a>
+<span class="sourceLineNo">130</span>    ZKUtil.deleteChildrenRecursively(zkw, zkw.getZNodePaths().baseZNode);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    ZKUtil.createAndFailSilent(zkw, zkw.getZNodePaths().baseZNode);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    assertTrue(ZKUtil.checkExists(zkw, zkw.getZNodePaths().baseZNode) != -1);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    LOG.debug(zkw.getZNodePaths().baseZNode + " created");<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    ZKUtil.createAndFailSilent(zkw, zkw.getZNodePaths().splitLogZNode);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    assertTrue(ZKUtil.checkExists(zkw, zkw.getZNodePaths().splitLogZNode) != -1);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    LOG.debug(zkw.getZNodePaths().splitLogZNode + " created");<a name="line.136"></a>
 <span class="sourceLineNo">137</span><a name="line.137"></a>
 <span class="sourceLineNo">138</span>    resetCounters();<a name="line.138"></a>
 <span class="sourceLineNo">139</span><a name="line.139"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestSplitLogManager.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestSplitLogManager.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestSplitLogManager.html
index 770d1f3..97afc91 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestSplitLogManager.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestSplitLogManager.html
@@ -135,13 +135,13 @@
 <span class="sourceLineNo">127</span>        new ZKWatcher(conf, "split-log-manager-tests" + UUID.randomUUID().toString(), null);<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    master = new DummyMasterServices(zkw, conf);<a name="line.128"></a>
 <span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>    ZKUtil.deleteChildrenRecursively(zkw, zkw.znodePaths.baseZNode);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    ZKUtil.createAndFailSilent(zkw, zkw.znodePaths.baseZNode);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    assertTrue(ZKUtil.checkExists(zkw, zkw.znodePaths.baseZNode) != -1);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    LOG.debug(zkw.znodePaths.baseZNode + " created");<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    ZKUtil.createAndFailSilent(zkw, zkw.znodePaths.splitLogZNode);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    assertTrue(ZKUtil.checkExists(zkw, zkw.znodePaths.splitLogZNode) != -1);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    LOG.debug(zkw.znodePaths.splitLogZNode + " created");<a name="line.136"></a>
+<span class="sourceLineNo">130</span>    ZKUtil.deleteChildrenRecursively(zkw, zkw.getZNodePaths().baseZNode);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    ZKUtil.createAndFailSilent(zkw, zkw.getZNodePaths().baseZNode);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    assertTrue(ZKUtil.checkExists(zkw, zkw.getZNodePaths().baseZNode) != -1);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    LOG.debug(zkw.getZNodePaths().baseZNode + " created");<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    ZKUtil.createAndFailSilent(zkw, zkw.getZNodePaths().splitLogZNode);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    assertTrue(ZKUtil.checkExists(zkw, zkw.getZNodePaths().splitLogZNode) != -1);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    LOG.debug(zkw.getZNodePaths().splitLogZNode + " created");<a name="line.136"></a>
 <span class="sourceLineNo">137</span><a name="line.137"></a>
 <span class="sourceLineNo">138</span>    resetCounters();<a name="line.138"></a>
 <span class="sourceLineNo">139</span><a name="line.139"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html
index b7cfe7c..3350688 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html
@@ -95,7 +95,7 @@
 <span class="sourceLineNo">087</span>      throws Exception {<a name="line.87"></a>
 <span class="sourceLineNo">088</span>    ZKWatcher zk = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.88"></a>
 <span class="sourceLineNo">089</span>        name.getMethodName(), null);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    ZKUtil.createAndFailSilent(zk, zk.znodePaths.baseZNode);<a name="line.90"></a>
+<span class="sourceLineNo">090</span>    ZKUtil.createAndFailSilent(zk, zk.getZNodePaths().baseZNode);<a name="line.90"></a>
 <span class="sourceLineNo">091</span><a name="line.91"></a>
 <span class="sourceLineNo">092</span>    // Should not have a master yet<a name="line.92"></a>
 <span class="sourceLineNo">093</span>    MasterAddressTracker addressTracker = new MasterAddressTracker(zk, null);<a name="line.93"></a>
@@ -104,98 +104,100 @@
 <span class="sourceLineNo">096</span>    zk.registerListener(addressTracker);<a name="line.96"></a>
 <span class="sourceLineNo">097</span><a name="line.97"></a>
 <span class="sourceLineNo">098</span>    // Use a listener to capture when the node is actually created<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    NodeCreationListener listener = new NodeCreationListener(zk, zk.znodePaths.masterAddressZNode);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    zk.registerListener(listener);<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>    if (sn != null) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      LOG.info("Creating master node");<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      MasterAddressTracker.setMasterAddress(zk, zk.znodePaths.masterAddressZNode, sn, infoPort);<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>      // Wait for the node to be created<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      LOG.info("Waiting for master address manager to be notified");<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      listener.waitForCreation();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      LOG.info("Master node created");<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    }<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    return addressTracker;<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>  /**<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * Unit tests that uses ZooKeeper but does not use the master-side methods<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * but rather acts directly on ZK.<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * @throws Exception<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   */<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  @Test<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public void testMasterAddressTrackerFromZK() throws Exception {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    // Create the master node with a dummy address<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    final int infoPort = 1235;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    final ServerName sn = ServerName.valueOf("localhost", 1234, System.currentTimeMillis());<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    final MasterAddressTracker addressTracker = setupMasterTracker(sn, infoPort);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    try {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      assertTrue(addressTracker.hasMaster());<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      ServerName pulledAddress = addressTracker.getMasterAddress();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      assertTrue(pulledAddress.equals(sn));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      assertEquals(infoPort, addressTracker.getMasterInfoPort());<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    } finally {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      assertTrue("Couldn't clean up master",<a name="line.131"></a>
-<span class="sourceLineNo">132</span>          MasterAddressTracker.deleteIfEquals(addressTracker.getWatcher(), sn.toString()));<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  @Test<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  public void testParsingNull() throws Exception {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    assertNull("parse on null data should return null.", MasterAddressTracker.parse(null));<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>  @Test<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public void testNoBackups() throws Exception {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    final ServerName sn = ServerName.valueOf("localhost", 1234, System.currentTimeMillis());<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    final MasterAddressTracker addressTracker = setupMasterTracker(sn, 1772);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    try {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      assertEquals("Should receive 0 for backup not found.", 0,<a name="line.147"></a>
-<span class="sourceLineNo">148</span>          addressTracker.getBackupMasterInfoPort(<a name="line.148"></a>
-<span class="sourceLineNo">149</span>              ServerName.valueOf("doesnotexist.example.com", 1234, System.currentTimeMillis())));<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    } finally {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      assertTrue("Couldn't clean up master",<a name="line.151"></a>
-<span class="sourceLineNo">152</span>          MasterAddressTracker.deleteIfEquals(addressTracker.getWatcher(), sn.toString()));<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>  @Test<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  public void testNoMaster() throws Exception {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    final MasterAddressTracker addressTracker = setupMasterTracker(null, 1772);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    assertFalse(addressTracker.hasMaster());<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    assertNull("should get null master when none active.", addressTracker.getMasterAddress());<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    assertEquals("Should receive 0 for backup not found.", 0, addressTracker.getMasterInfoPort());<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>  public static class NodeCreationListener extends ZKListener {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    private static final Logger LOG = LoggerFactory.getLogger(NodeCreationListener.class);<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>    private Semaphore lock;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    private String node;<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>    public NodeCreationListener(ZKWatcher watcher, String node) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      super(watcher);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      lock = new Semaphore(0);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      this.node = node;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    @Override<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    public void nodeCreated(String path) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      if(path.equals(node)) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        LOG.debug("nodeCreated(" + path + ")");<a name="line.179"></a>
-<span class="sourceLineNo">180</span>        lock.release();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      }<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public void waitForCreation() throws InterruptedException {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      lock.acquire();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>}<a name="line.189"></a>
+<span class="sourceLineNo">099</span>    NodeCreationListener listener = new NodeCreationListener(zk,<a name="line.99"></a>
+<span class="sourceLineNo">100</span>            zk.getZNodePaths().masterAddressZNode);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    zk.registerListener(listener);<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (sn != null) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      LOG.info("Creating master node");<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      MasterAddressTracker.setMasterAddress(zk, zk.getZNodePaths().masterAddressZNode,<a name="line.105"></a>
+<span class="sourceLineNo">106</span>              sn, infoPort);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>      // Wait for the node to be created<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      LOG.info("Waiting for master address manager to be notified");<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      listener.waitForCreation();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      LOG.info("Master node created");<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    return addressTracker;<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>  /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * Unit tests that uses ZooKeeper but does not use the master-side methods<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * but rather acts directly on ZK.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @throws Exception<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  @Test<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  public void testMasterAddressTrackerFromZK() throws Exception {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    // Create the master node with a dummy address<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    final int infoPort = 1235;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    final ServerName sn = ServerName.valueOf("localhost", 1234, System.currentTimeMillis());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    final MasterAddressTracker addressTracker = setupMasterTracker(sn, infoPort);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    try {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      assertTrue(addressTracker.hasMaster());<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      ServerName pulledAddress = addressTracker.getMasterAddress();<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      assertTrue(pulledAddress.equals(sn));<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      assertEquals(infoPort, addressTracker.getMasterInfoPort());<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    } finally {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      assertTrue("Couldn't clean up master",<a name="line.133"></a>
+<span class="sourceLineNo">134</span>          MasterAddressTracker.deleteIfEquals(addressTracker.getWatcher(), sn.toString()));<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><a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>  @Test<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  public void testParsingNull() throws Exception {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    assertNull("parse on null data should return null.", MasterAddressTracker.parse(null));<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>  @Test<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  public void testNoBackups() throws Exception {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    final ServerName sn = ServerName.valueOf("localhost", 1234, System.currentTimeMillis());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    final MasterAddressTracker addressTracker = setupMasterTracker(sn, 1772);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    try {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      assertEquals("Should receive 0 for backup not found.", 0,<a name="line.149"></a>
+<span class="sourceLineNo">150</span>          addressTracker.getBackupMasterInfoPort(<a name="line.150"></a>
+<span class="sourceLineNo">151</span>              ServerName.valueOf("doesnotexist.example.com", 1234, System.currentTimeMillis())));<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    } finally {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      assertTrue("Couldn't clean up master",<a name="line.153"></a>
+<span class="sourceLineNo">154</span>          MasterAddressTracker.deleteIfEquals(addressTracker.getWatcher(), sn.toString()));<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  }<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>  @Test<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public void testNoMaster() throws Exception {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    final MasterAddressTracker addressTracker = setupMasterTracker(null, 1772);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    assertFalse(addressTracker.hasMaster());<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    assertNull("should get null master when none active.", addressTracker.getMasterAddress());<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    assertEquals("Should receive 0 for backup not found.", 0, addressTracker.getMasterInfoPort());<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>  public static class NodeCreationListener extends ZKListener {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    private static final Logger LOG = LoggerFactory.getLogger(NodeCreationListener.class);<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    private Semaphore lock;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    private String node;<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>    public NodeCreationListener(ZKWatcher watcher, String node) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      super(watcher);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      lock = new Semaphore(0);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      this.node = node;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    @Override<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    public void nodeCreated(String path) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      if(path.equals(node)) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        LOG.debug("nodeCreated(" + path + ")");<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        lock.release();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      }<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>    public void waitForCreation() throws InterruptedException {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      lock.acquire();<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
 <span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>}<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html
index b7cfe7c..3350688 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html
@@ -95,7 +95,7 @@
 <span class="sourceLineNo">087</span>      throws Exception {<a name="line.87"></a>
 <span class="sourceLineNo">088</span>    ZKWatcher zk = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.88"></a>
 <span class="sourceLineNo">089</span>        name.getMethodName(), null);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    ZKUtil.createAndFailSilent(zk, zk.znodePaths.baseZNode);<a name="line.90"></a>
+<span class="sourceLineNo">090</span>    ZKUtil.createAndFailSilent(zk, zk.getZNodePaths().baseZNode);<a name="line.90"></a>
 <span class="sourceLineNo">091</span><a name="line.91"></a>
 <span class="sourceLineNo">092</span>    // Should not have a master yet<a name="line.92"></a>
 <span class="sourceLineNo">093</span>    MasterAddressTracker addressTracker = new MasterAddressTracker(zk, null);<a name="line.93"></a>
@@ -104,98 +104,100 @@
 <span class="sourceLineNo">096</span>    zk.registerListener(addressTracker);<a name="line.96"></a>
 <span class="sourceLineNo">097</span><a name="line.97"></a>
 <span class="sourceLineNo">098</span>    // Use a listener to capture when the node is actually created<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    NodeCreationListener listener = new NodeCreationListener(zk, zk.znodePaths.masterAddressZNode);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    zk.registerListener(listener);<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>    if (sn != null) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      LOG.info("Creating master node");<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      MasterAddressTracker.setMasterAddress(zk, zk.znodePaths.masterAddressZNode, sn, infoPort);<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>      // Wait for the node to be created<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      LOG.info("Waiting for master address manager to be notified");<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      listener.waitForCreation();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      LOG.info("Master node created");<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    }<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    return addressTracker;<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>  /**<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * Unit tests that uses ZooKeeper but does not use the master-side methods<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * but rather acts directly on ZK.<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * @throws Exception<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   */<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  @Test<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public void testMasterAddressTrackerFromZK() throws Exception {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    // Create the master node with a dummy address<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    final int infoPort = 1235;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    final ServerName sn = ServerName.valueOf("localhost", 1234, System.currentTimeMillis());<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    final MasterAddressTracker addressTracker = setupMasterTracker(sn, infoPort);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    try {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      assertTrue(addressTracker.hasMaster());<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      ServerName pulledAddress = addressTracker.getMasterAddress();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      assertTrue(pulledAddress.equals(sn));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      assertEquals(infoPort, addressTracker.getMasterInfoPort());<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    } finally {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      assertTrue("Couldn't clean up master",<a name="line.131"></a>
-<span class="sourceLineNo">132</span>          MasterAddressTracker.deleteIfEquals(addressTracker.getWatcher(), sn.toString()));<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  @Test<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  public void testParsingNull() throws Exception {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    assertNull("parse on null data should return null.", MasterAddressTracker.parse(null));<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>  @Test<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public void testNoBackups() throws Exception {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    final ServerName sn = ServerName.valueOf("localhost", 1234, System.currentTimeMillis());<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    final MasterAddressTracker addressTracker = setupMasterTracker(sn, 1772);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    try {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      assertEquals("Should receive 0 for backup not found.", 0,<a name="line.147"></a>
-<span class="sourceLineNo">148</span>          addressTracker.getBackupMasterInfoPort(<a name="line.148"></a>
-<span class="sourceLineNo">149</span>              ServerName.valueOf("doesnotexist.example.com", 1234, System.currentTimeMillis())));<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    } finally {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      assertTrue("Couldn't clean up master",<a name="line.151"></a>
-<span class="sourceLineNo">152</span>          MasterAddressTracker.deleteIfEquals(addressTracker.getWatcher(), sn.toString()));<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>  @Test<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  public void testNoMaster() throws Exception {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    final MasterAddressTracker addressTracker = setupMasterTracker(null, 1772);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    assertFalse(addressTracker.hasMaster());<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    assertNull("should get null master when none active.", addressTracker.getMasterAddress());<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    assertEquals("Should receive 0 for backup not found.", 0, addressTracker.getMasterInfoPort());<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>  public static class NodeCreationListener extends ZKListener {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    private static final Logger LOG = LoggerFactory.getLogger(NodeCreationListener.class);<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>    private Semaphore lock;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    private String node;<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>    public NodeCreationListener(ZKWatcher watcher, String node) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      super(watcher);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      lock = new Semaphore(0);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      this.node = node;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    @Override<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    public void nodeCreated(String path) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      if(path.equals(node)) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        LOG.debug("nodeCreated(" + path + ")");<a name="line.179"></a>
-<span class="sourceLineNo">180</span>        lock.release();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      }<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public void waitForCreation() throws InterruptedException {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      lock.acquire();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>}<a name="line.189"></a>
+<span class="sourceLineNo">099</span>    NodeCreationListener listener = new NodeCreationListener(zk,<a name="line.99"></a>
+<span class="sourceLineNo">100</span>            zk.getZNodePaths().masterAddressZNode);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    zk.registerListener(listener);<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (sn != null) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      LOG.info("Creating master node");<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      MasterAddressTracker.setMasterAddress(zk, zk.getZNodePaths().masterAddressZNode,<a name="line.105"></a>
+<span class="sourceLineNo">106</span>              sn, infoPort);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>      // Wait for the node to be created<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      LOG.info("Waiting for master address manager to be notified");<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      listener.waitForCreation();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      LOG.info("Master node created");<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    return addressTracker;<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>  /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * Unit tests that uses ZooKeeper but does not use the master-side methods<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * but rather acts directly on ZK.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @throws Exception<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  @Test<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  public void testMasterAddressTrackerFromZK() throws Exception {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    // Create the master node with a dummy address<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    final int infoPort = 1235;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    final ServerName sn = ServerName.valueOf("localhost", 1234, System.currentTimeMillis());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    final MasterAddressTracker addressTracker = setupMasterTracker(sn, infoPort);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    try {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      assertTrue(addressTracker.hasMaster());<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      ServerName pulledAddress = addressTracker.getMasterAddress();<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      assertTrue(pulledAddress.equals(sn));<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      assertEquals(infoPort, addressTracker.getMasterInfoPort());<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    } finally {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      assertTrue("Couldn't clean up master",<a name="line.133"></a>
+<span class="sourceLineNo">134</span>          MasterAddressTracker.deleteIfEquals(addressTracker.getWatcher(), sn.toString()));<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><a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>  @Test<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  public void testParsingNull() throws Exception {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    assertNull("parse on null data should return null.", MasterAddressTracker.parse(null));<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>  @Test<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  public void testNoBackups() throws Exception {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    final ServerName sn = ServerName.valueOf("localhost", 1234, System.currentTimeMillis());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    final MasterAddressTracker addressTracker = setupMasterTracker(sn, 1772);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    try {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      assertEquals("Should receive 0 for backup not found.", 0,<a name="line.149"></a>
+<span class="sourceLineNo">150</span>          addressTracker.getBackupMasterInfoPort(<a name="line.150"></a>
+<span class="sourceLineNo">151</span>              ServerName.valueOf("doesnotexist.example.com", 1234, System.currentTimeMillis())));<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    } finally {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      assertTrue("Couldn't clean up master",<a name="line.153"></a>
+<span class="sourceLineNo">154</span>          MasterAddressTracker.deleteIfEquals(addressTracker.getWatcher(), sn.toString()));<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  }<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>  @Test<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public void testNoMaster() throws Exception {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    final MasterAddressTracker addressTracker = setupMasterTracker(null, 1772);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    assertFalse(addressTracker.hasMaster());<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    assertNull("should get null master when none active.", addressTracker.getMasterAddress());<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    assertEquals("Should receive 0 for backup not found.", 0, addressTracker.getMasterInfoPort());<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>  public static class NodeCreationListener extends ZKListener {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    private static final Logger LOG = LoggerFactory.getLogger(NodeCreationListener.class);<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    private Semaphore lock;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    private String node;<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>    public NodeCreationListener(ZKWatcher watcher, String node) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      super(watcher);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      lock = new Semaphore(0);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      this.node = node;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    @Override<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    public void nodeCreated(String path) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      if(path.equals(node)) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        LOG.debug("nodeCreated(" + path + ")");<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        lock.release();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      }<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>    public void waitForCreation() throws InterruptedException {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      lock.acquire();<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
 <span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>}<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestRegionServerHostname.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestRegionServerHostname.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestRegionServerHostname.html
index efad1b4..3dc4e42 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestRegionServerHostname.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestRegionServerHostname.html
@@ -114,7 +114,7 @@
 <span class="sourceLineNo">106</span>        TEST_UTIL.startMiniCluster(NUM_MASTERS, NUM_RS);<a name="line.106"></a>
 <span class="sourceLineNo">107</span>        try {<a name="line.107"></a>
 <span class="sourceLineNo">108</span>          ZKWatcher zkw = TEST_UTIL.getZooKeeperWatcher();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>          List&lt;String&gt; servers = ZKUtil.listChildrenNoWatch(zkw, zkw.znodePaths.rsZNode);<a name="line.109"></a>
+<span class="sourceLineNo">109</span>          List&lt;String&gt; servers = ZKUtil.listChildrenNoWatch(zkw, zkw.getZNodePaths().rsZNode);<a name="line.109"></a>
 <span class="sourceLineNo">110</span>          // there would be NUM_RS+1 children - one for the master<a name="line.110"></a>
 <span class="sourceLineNo">111</span>          assertTrue(servers.size() ==<a name="line.111"></a>
 <span class="sourceLineNo">112</span>            NUM_RS + (LoadBalancer.isTablesOnMaster(TEST_UTIL.getConfiguration())? 1: 0));<a name="line.112"></a>
@@ -175,7 +175,7 @@
 <span class="sourceLineNo">167</span>    boolean tablesOnMaster = LoadBalancer.isTablesOnMaster(TEST_UTIL.getConfiguration());<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    int expectedRS = NUM_RS + (tablesOnMaster? 1: 0);<a name="line.168"></a>
 <span class="sourceLineNo">169</span>    try (ZKWatcher zkw = TEST_UTIL.getZooKeeperWatcher()) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      List&lt;String&gt; servers = ZKUtil.listChildrenNoWatch(zkw, zkw.znodePaths.rsZNode);<a name="line.170"></a>
+<span class="sourceLineNo">170</span>      List&lt;String&gt; servers = ZKUtil.listChildrenNoWatch(zkw, zkw.getZNodePaths().rsZNode);<a name="line.170"></a>
 <span class="sourceLineNo">171</span>      assertEquals(expectedRS, servers.size());<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    }<a name="line.172"></a>
 <span class="sourceLineNo">173</span>  }<a name="line.173"></a>


[04/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyReplicationListener.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyReplicationListener.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyReplicationListener.html
index f4dc25f..e219821 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyReplicationListener.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyReplicationListener.html
@@ -91,191 +91,192 @@
 <span class="sourceLineNo">083</span>    utility.startMiniZKCluster();<a name="line.83"></a>
 <span class="sourceLineNo">084</span>    conf = utility.getConfiguration();<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    ZKWatcher zk = HBaseTestingUtility.getZooKeeperWatcher(utility);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    ZKUtil.createWithParents(zk, zk.znodePaths.rsZNode);<a name="line.86"></a>
+<span class="sourceLineNo">086</span>    ZKUtil.createWithParents(zk, zk.getZNodePaths().rsZNode);<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>  @Before<a name="line.89"></a>
 <span class="sourceLineNo">090</span>  public void setUp() throws Exception {<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    zkw = HBaseTestingUtility.getZooKeeperWatcher(utility);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    String fakeRs1 = ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname1.example.org:1234");<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    try {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      ZKClusterId.setClusterId(zkw, new ClusterId());<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      rp = ReplicationFactory.getReplicationPeers(zkw, conf);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      rp.init();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      rt = ReplicationFactory.getReplicationTracker(zkw, new DummyServer(fakeRs1),<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        new DummyServer(fakeRs1));<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    } catch (Exception e) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      fail("Exception during test setup: " + e);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    }<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    rsRemovedCount = new AtomicInteger(0);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    rsRemovedData = "";<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>  @AfterClass<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  public static void tearDownAfterClass() throws Exception {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    utility.shutdownMiniZKCluster();<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>  @Test<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  public void testGetListOfRegionServers() throws Exception {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    // 0 region servers<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    assertEquals(0, rt.getListOfRegionServers().size());<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>    // 1 region server<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    ZKUtil.createWithParents(zkw,<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname1.example.org:1234"));<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    assertEquals(1, rt.getListOfRegionServers().size());<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>    // 2 region servers<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    ZKUtil.createWithParents(zkw,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234"));<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    assertEquals(2, rt.getListOfRegionServers().size());<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>    // 1 region server<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    ZKUtil.deleteNode(zkw,<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234"));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assertEquals(1, rt.getListOfRegionServers().size());<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    // 0 region server<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    ZKUtil.deleteNode(zkw,<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname1.example.org:1234"));<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    assertEquals(0, rt.getListOfRegionServers().size());<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>  @Test<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  public void testRegionServerRemovedEvent() throws Exception {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    ZKUtil.createAndWatch(zkw,<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234"),<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      HConstants.EMPTY_BYTE_ARRAY);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    rt.registerListener(new DummyReplicationListener());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    // delete one<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    ZKUtil.deleteNode(zkw,<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234"));<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    // wait for event<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    while (rsRemovedCount.get() &lt; 1) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      Thread.sleep(5);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    assertEquals("hostname2.example.org:1234", rsRemovedData);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @Test<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public void testPeerNameControl() throws Exception {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    int exists = 0;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    rp.getPeerStorage().addPeer("6",<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      ReplicationPeerConfig.newBuilder().setClusterKey(utility.getClusterKey()).build(), true);<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>    try {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      rp.getPeerStorage().addPeer("6",<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        ReplicationPeerConfig.newBuilder().setClusterKey(utility.getClusterKey()).build(), true);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    } catch (ReplicationException e) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      if (e.getCause() instanceof KeeperException.NodeExistsException) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        exists++;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    assertEquals(1, exists);<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>    // clean up<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    rp.getPeerStorage().removePeer("6");<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  private class DummyReplicationListener implements ReplicationListener {<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    @Override<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    public void regionServerRemoved(String regionServer) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      rsRemovedData = regionServer;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      rsRemovedCount.getAndIncrement();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      LOG.debug("Received regionServerRemoved event: " + regionServer);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  private class DummyServer implements Server {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    private String serverName;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    private boolean isAborted = false;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    private boolean isStopped = false;<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public DummyServer(String serverName) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      this.serverName = serverName;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    @Override<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    public Configuration getConfiguration() {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      return conf;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>    @Override<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    public ZKWatcher getZooKeeper() {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      return zkw;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>    @Override<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return null;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>    @Override<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    public ClusterConnection getConnection() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return null;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>    @Override<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public MetaTableLocator getMetaTableLocator() {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      return null;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    @Override<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    public ServerName getServerName() {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      return ServerName.valueOf(this.serverName);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>    @Override<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    public void abort(String why, Throwable e) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      LOG.info("Aborting " + serverName);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      this.isAborted = true;<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>    @Override<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    public boolean isAborted() {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      return this.isAborted;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>    @Override<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    public void stop(String why) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      this.isStopped = true;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    }<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 boolean isStopped() {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      return this.isStopped;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>    @Override<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    public ChoreService getChoreService() {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      return null;<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>    @Override<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    public ClusterConnection getClusterConnection() {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      // TODO Auto-generated method stub<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      return null;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    @Override<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    public FileSystem getFileSystem() {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      return null;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>    @Override<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    public boolean isStopping() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      return false;<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 Connection createConnection(Configuration conf) throws IOException {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      return null;<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>}<a name="line.270"></a>
+<span class="sourceLineNo">092</span>    String fakeRs1 = ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>            "hostname1.example.org:1234");<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    try {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      ZKClusterId.setClusterId(zkw, new ClusterId());<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      rp = ReplicationFactory.getReplicationPeers(zkw, conf);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      rp.init();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      rt = ReplicationFactory.getReplicationTracker(zkw, new DummyServer(fakeRs1),<a name="line.98"></a>
+<span class="sourceLineNo">099</span>        new DummyServer(fakeRs1));<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    } catch (Exception e) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      fail("Exception during test setup: " + e);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    rsRemovedCount = new AtomicInteger(0);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    rsRemovedData = "";<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>  @AfterClass<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  public static void tearDownAfterClass() throws Exception {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    utility.shutdownMiniZKCluster();<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  @Test<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  public void testGetListOfRegionServers() throws Exception {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    // 0 region servers<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    assertEquals(0, rt.getListOfRegionServers().size());<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // 1 region server<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    ZKUtil.createWithParents(zkw,<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname1.example.org:1234"));<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    assertEquals(1, rt.getListOfRegionServers().size());<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>    // 2 region servers<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    ZKUtil.createWithParents(zkw,<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname2.example.org:1234"));<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    assertEquals(2, rt.getListOfRegionServers().size());<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>    // 1 region server<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    ZKUtil.deleteNode(zkw,<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname2.example.org:1234"));<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    assertEquals(1, rt.getListOfRegionServers().size());<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>    // 0 region server<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    ZKUtil.deleteNode(zkw,<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname1.example.org:1234"));<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    assertEquals(0, rt.getListOfRegionServers().size());<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  @Test<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public void testRegionServerRemovedEvent() throws Exception {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    ZKUtil.createAndWatch(zkw,<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname2.example.org:1234"),<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      HConstants.EMPTY_BYTE_ARRAY);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    rt.registerListener(new DummyReplicationListener());<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    // delete one<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    ZKUtil.deleteNode(zkw,<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname2.example.org:1234"));<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    // wait for event<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    while (rsRemovedCount.get() &lt; 1) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      Thread.sleep(5);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    assertEquals("hostname2.example.org:1234", rsRemovedData);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  }<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>  @Test<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  public void testPeerNameControl() throws Exception {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    int exists = 0;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    rp.getPeerStorage().addPeer("6",<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      ReplicationPeerConfig.newBuilder().setClusterKey(utility.getClusterKey()).build(), true);<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    try {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      rp.getPeerStorage().addPeer("6",<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        ReplicationPeerConfig.newBuilder().setClusterKey(utility.getClusterKey()).build(), true);<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    } catch (ReplicationException e) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      if (e.getCause() instanceof KeeperException.NodeExistsException) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        exists++;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    }<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    assertEquals(1, exists);<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // clean up<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    rp.getPeerStorage().removePeer("6");<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>  private class DummyReplicationListener implements ReplicationListener {<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>    @Override<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    public void regionServerRemoved(String regionServer) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      rsRemovedData = regionServer;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      rsRemovedCount.getAndIncrement();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      LOG.debug("Received regionServerRemoved event: " + regionServer);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  private class DummyServer implements Server {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    private String serverName;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    private boolean isAborted = false;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    private boolean isStopped = false;<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>    public DummyServer(String serverName) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      this.serverName = serverName;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>    @Override<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    public Configuration getConfiguration() {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      return conf;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>    @Override<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    public ZKWatcher getZooKeeper() {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      return zkw;<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>    @Override<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      return null;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>    @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public ClusterConnection getConnection() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return null;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>    @Override<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    public MetaTableLocator getMetaTableLocator() {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      return null;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>    @Override<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    public ServerName getServerName() {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      return ServerName.valueOf(this.serverName);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    @Override<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public void abort(String why, Throwable e) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      LOG.info("Aborting " + serverName);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      this.isAborted = true;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>    @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public boolean isAborted() {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      return this.isAborted;<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>    @Override<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    public void stop(String why) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      this.isStopped = true;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>    @Override<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    public boolean isStopped() {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      return this.isStopped;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span>    @Override<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    public ChoreService getChoreService() {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      return null;<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>    @Override<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    public ClusterConnection getClusterConnection() {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      // TODO Auto-generated method stub<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      return null;<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>    public FileSystem getFileSystem() {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      return null;<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 boolean isStopping() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      return false;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>    @Override<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    public Connection createConnection(Configuration conf) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      return null;<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html
index f4dc25f..e219821 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html
@@ -91,191 +91,192 @@
 <span class="sourceLineNo">083</span>    utility.startMiniZKCluster();<a name="line.83"></a>
 <span class="sourceLineNo">084</span>    conf = utility.getConfiguration();<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    ZKWatcher zk = HBaseTestingUtility.getZooKeeperWatcher(utility);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    ZKUtil.createWithParents(zk, zk.znodePaths.rsZNode);<a name="line.86"></a>
+<span class="sourceLineNo">086</span>    ZKUtil.createWithParents(zk, zk.getZNodePaths().rsZNode);<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>  @Before<a name="line.89"></a>
 <span class="sourceLineNo">090</span>  public void setUp() throws Exception {<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    zkw = HBaseTestingUtility.getZooKeeperWatcher(utility);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    String fakeRs1 = ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname1.example.org:1234");<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    try {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      ZKClusterId.setClusterId(zkw, new ClusterId());<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      rp = ReplicationFactory.getReplicationPeers(zkw, conf);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      rp.init();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      rt = ReplicationFactory.getReplicationTracker(zkw, new DummyServer(fakeRs1),<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        new DummyServer(fakeRs1));<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    } catch (Exception e) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      fail("Exception during test setup: " + e);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    }<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    rsRemovedCount = new AtomicInteger(0);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    rsRemovedData = "";<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>  @AfterClass<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  public static void tearDownAfterClass() throws Exception {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    utility.shutdownMiniZKCluster();<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>  @Test<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  public void testGetListOfRegionServers() throws Exception {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    // 0 region servers<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    assertEquals(0, rt.getListOfRegionServers().size());<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>    // 1 region server<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    ZKUtil.createWithParents(zkw,<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname1.example.org:1234"));<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    assertEquals(1, rt.getListOfRegionServers().size());<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>    // 2 region servers<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    ZKUtil.createWithParents(zkw,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234"));<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    assertEquals(2, rt.getListOfRegionServers().size());<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>    // 1 region server<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    ZKUtil.deleteNode(zkw,<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234"));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assertEquals(1, rt.getListOfRegionServers().size());<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    // 0 region server<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    ZKUtil.deleteNode(zkw,<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname1.example.org:1234"));<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    assertEquals(0, rt.getListOfRegionServers().size());<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>  @Test<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  public void testRegionServerRemovedEvent() throws Exception {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    ZKUtil.createAndWatch(zkw,<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234"),<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      HConstants.EMPTY_BYTE_ARRAY);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    rt.registerListener(new DummyReplicationListener());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    // delete one<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    ZKUtil.deleteNode(zkw,<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234"));<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    // wait for event<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    while (rsRemovedCount.get() &lt; 1) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      Thread.sleep(5);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    assertEquals("hostname2.example.org:1234", rsRemovedData);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @Test<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public void testPeerNameControl() throws Exception {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    int exists = 0;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    rp.getPeerStorage().addPeer("6",<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      ReplicationPeerConfig.newBuilder().setClusterKey(utility.getClusterKey()).build(), true);<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>    try {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      rp.getPeerStorage().addPeer("6",<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        ReplicationPeerConfig.newBuilder().setClusterKey(utility.getClusterKey()).build(), true);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    } catch (ReplicationException e) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      if (e.getCause() instanceof KeeperException.NodeExistsException) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        exists++;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    assertEquals(1, exists);<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>    // clean up<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    rp.getPeerStorage().removePeer("6");<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  private class DummyReplicationListener implements ReplicationListener {<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    @Override<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    public void regionServerRemoved(String regionServer) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      rsRemovedData = regionServer;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      rsRemovedCount.getAndIncrement();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      LOG.debug("Received regionServerRemoved event: " + regionServer);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  private class DummyServer implements Server {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    private String serverName;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    private boolean isAborted = false;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    private boolean isStopped = false;<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public DummyServer(String serverName) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      this.serverName = serverName;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    @Override<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    public Configuration getConfiguration() {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      return conf;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>    @Override<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    public ZKWatcher getZooKeeper() {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      return zkw;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>    @Override<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return null;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>    @Override<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    public ClusterConnection getConnection() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return null;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>    @Override<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public MetaTableLocator getMetaTableLocator() {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      return null;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    @Override<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    public ServerName getServerName() {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      return ServerName.valueOf(this.serverName);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>    @Override<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    public void abort(String why, Throwable e) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      LOG.info("Aborting " + serverName);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      this.isAborted = true;<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>    @Override<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    public boolean isAborted() {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      return this.isAborted;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>    @Override<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    public void stop(String why) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      this.isStopped = true;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    }<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 boolean isStopped() {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      return this.isStopped;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>    @Override<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    public ChoreService getChoreService() {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      return null;<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>    @Override<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    public ClusterConnection getClusterConnection() {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      // TODO Auto-generated method stub<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      return null;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    @Override<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    public FileSystem getFileSystem() {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      return null;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>    @Override<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    public boolean isStopping() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      return false;<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 Connection createConnection(Configuration conf) throws IOException {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      return null;<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>}<a name="line.270"></a>
+<span class="sourceLineNo">092</span>    String fakeRs1 = ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>            "hostname1.example.org:1234");<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    try {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      ZKClusterId.setClusterId(zkw, new ClusterId());<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      rp = ReplicationFactory.getReplicationPeers(zkw, conf);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      rp.init();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      rt = ReplicationFactory.getReplicationTracker(zkw, new DummyServer(fakeRs1),<a name="line.98"></a>
+<span class="sourceLineNo">099</span>        new DummyServer(fakeRs1));<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    } catch (Exception e) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      fail("Exception during test setup: " + e);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    rsRemovedCount = new AtomicInteger(0);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    rsRemovedData = "";<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>  @AfterClass<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  public static void tearDownAfterClass() throws Exception {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    utility.shutdownMiniZKCluster();<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  @Test<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  public void testGetListOfRegionServers() throws Exception {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    // 0 region servers<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    assertEquals(0, rt.getListOfRegionServers().size());<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // 1 region server<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    ZKUtil.createWithParents(zkw,<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname1.example.org:1234"));<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    assertEquals(1, rt.getListOfRegionServers().size());<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>    // 2 region servers<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    ZKUtil.createWithParents(zkw,<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname2.example.org:1234"));<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    assertEquals(2, rt.getListOfRegionServers().size());<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>    // 1 region server<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    ZKUtil.deleteNode(zkw,<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname2.example.org:1234"));<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    assertEquals(1, rt.getListOfRegionServers().size());<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>    // 0 region server<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    ZKUtil.deleteNode(zkw,<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname1.example.org:1234"));<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    assertEquals(0, rt.getListOfRegionServers().size());<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  @Test<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public void testRegionServerRemovedEvent() throws Exception {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    ZKUtil.createAndWatch(zkw,<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname2.example.org:1234"),<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      HConstants.EMPTY_BYTE_ARRAY);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    rt.registerListener(new DummyReplicationListener());<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    // delete one<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    ZKUtil.deleteNode(zkw,<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname2.example.org:1234"));<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    // wait for event<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    while (rsRemovedCount.get() &lt; 1) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      Thread.sleep(5);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    assertEquals("hostname2.example.org:1234", rsRemovedData);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  }<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>  @Test<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  public void testPeerNameControl() throws Exception {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    int exists = 0;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    rp.getPeerStorage().addPeer("6",<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      ReplicationPeerConfig.newBuilder().setClusterKey(utility.getClusterKey()).build(), true);<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    try {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      rp.getPeerStorage().addPeer("6",<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        ReplicationPeerConfig.newBuilder().setClusterKey(utility.getClusterKey()).build(), true);<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    } catch (ReplicationException e) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      if (e.getCause() instanceof KeeperException.NodeExistsException) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        exists++;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    }<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    assertEquals(1, exists);<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // clean up<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    rp.getPeerStorage().removePeer("6");<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>  private class DummyReplicationListener implements ReplicationListener {<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>    @Override<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    public void regionServerRemoved(String regionServer) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      rsRemovedData = regionServer;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      rsRemovedCount.getAndIncrement();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      LOG.debug("Received regionServerRemoved event: " + regionServer);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  private class DummyServer implements Server {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    private String serverName;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    private boolean isAborted = false;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    private boolean isStopped = false;<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>    public DummyServer(String serverName) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      this.serverName = serverName;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>    @Override<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    public Configuration getConfiguration() {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      return conf;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>    @Override<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    public ZKWatcher getZooKeeper() {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      return zkw;<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>    @Override<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      return null;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>    @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public ClusterConnection getConnection() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return null;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>    @Override<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    public MetaTableLocator getMetaTableLocator() {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      return null;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>    @Override<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    public ServerName getServerName() {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      return ServerName.valueOf(this.serverName);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    @Override<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public void abort(String why, Throwable e) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      LOG.info("Aborting " + serverName);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      this.isAborted = true;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>    @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public boolean isAborted() {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      return this.isAborted;<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>    @Override<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    public void stop(String why) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      this.isStopped = true;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>    @Override<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    public boolean isStopped() {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      return this.isStopped;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span>    @Override<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    public ChoreService getChoreService() {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      return null;<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>    @Override<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    public ClusterConnection getClusterConnection() {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      // TODO Auto-generated method stub<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      return null;<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>    public FileSystem getFileSystem() {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      return null;<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 boolean isStopping() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      return false;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>    @Override<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    public Connection createConnection(Configuration conf) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      return null;<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>
 
 
 


[08/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html
index fa90598..620c427 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html
@@ -87,8 +87,8 @@
 <span class="sourceLineNo">079</span>    ZKWatcher zk = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.79"></a>
 <span class="sourceLineNo">080</span>      "testActiveMasterManagerFromZK", null, true);<a name="line.80"></a>
 <span class="sourceLineNo">081</span>    try {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      ZKUtil.deleteNode(zk, zk.znodePaths.masterAddressZNode);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      ZKUtil.deleteNode(zk, zk.znodePaths.clusterStateZNode);<a name="line.83"></a>
+<span class="sourceLineNo">082</span>      ZKUtil.deleteNode(zk, zk.getZNodePaths().masterAddressZNode);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      ZKUtil.deleteNode(zk, zk.getZNodePaths().clusterStateZNode);<a name="line.83"></a>
 <span class="sourceLineNo">084</span>    } catch(KeeperException.NoNodeException nne) {}<a name="line.84"></a>
 <span class="sourceLineNo">085</span><a name="line.85"></a>
 <span class="sourceLineNo">086</span>    // Create the master node with a dummy address<a name="line.86"></a>
@@ -129,8 +129,8 @@
 <span class="sourceLineNo">121</span>    ZKWatcher zk = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.121"></a>
 <span class="sourceLineNo">122</span>      "testActiveMasterManagerFromZK", null, true);<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    try {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      ZKUtil.deleteNode(zk, zk.znodePaths.masterAddressZNode);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      ZKUtil.deleteNode(zk, zk.znodePaths.clusterStateZNode);<a name="line.125"></a>
+<span class="sourceLineNo">124</span>      ZKUtil.deleteNode(zk, zk.getZNodePaths().masterAddressZNode);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      ZKUtil.deleteNode(zk, zk.getZNodePaths().clusterStateZNode);<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    } catch(KeeperException.NoNodeException nne) {}<a name="line.126"></a>
 <span class="sourceLineNo">127</span><a name="line.127"></a>
 <span class="sourceLineNo">128</span>    // Create the master node with a dummy address<a name="line.128"></a>
@@ -175,195 +175,196 @@
 <span class="sourceLineNo">167</span>    ms1.stop("stopping first server");<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
 <span class="sourceLineNo">169</span>    // Use a listener to capture when the node is actually deleted<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    NodeDeletionListener listener = new NodeDeletionListener(zk, zk.znodePaths.masterAddressZNode);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    zk.registerListener(listener);<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>    LOG.info("Deleting master node");<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    ZKUtil.deleteNode(zk, zk.znodePaths.masterAddressZNode);<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    // Wait for the node to be deleted<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    LOG.info("Waiting for active master manager to be notified");<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    listener.waitForDeletion();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    LOG.info("Master node deleted");<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // Now we expect the secondary manager to have and be the active master<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    // Wait for 1 second at most<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    sleeps = 0;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    while(!t.isActiveMaster &amp;&amp; sleeps &lt; 100) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      Thread.sleep(10);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      sleeps++;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    LOG.debug("Slept " + sleeps + " times");<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>    assertTrue(t.manager.clusterHasActiveMaster.get());<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    assertTrue(t.isActiveMaster);<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    LOG.info("Deleting master node");<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    ZKUtil.deleteNode(zk, zk.znodePaths.masterAddressZNode);<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>  /**<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * Assert there is an active master and that it has the specified address.<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   * @param zk<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * @param thisMasterAddress<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * @throws KeeperException<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * @throws IOException<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  private void assertMaster(ZKWatcher zk,<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      ServerName expectedAddress)<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  throws KeeperException, IOException {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    ServerName readAddress = MasterAddressTracker.getMasterAddress(zk);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    assertNotNull(readAddress);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    assertTrue(expectedAddress.equals(readAddress));<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>  public static class WaitToBeMasterThread extends Thread {<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    ActiveMasterManager manager;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    DummyMaster dummyMaster;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    boolean isActiveMaster;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    public WaitToBeMasterThread(ZKWatcher zk, ServerName address) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      this.dummyMaster = new DummyMaster(zk,address);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      this.manager = this.dummyMaster.getActiveMasterManager();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      isActiveMaster = false;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    @Override<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public void run() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      manager.blockUntilBecomingActiveMaster(100,<a name="line.226"></a>
-<span class="sourceLineNo">227</span>          Mockito.mock(MonitoredTask.class));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      LOG.info("Second master has become the active master!");<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      isActiveMaster = true;<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>  public static class NodeDeletionListener extends ZKListener {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    private static final Logger LOG = LoggerFactory.getLogger(NodeDeletionListener.class);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>    private Semaphore lock;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    private String node;<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>    public NodeDeletionListener(ZKWatcher watcher, String node) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      super(watcher);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      lock = new Semaphore(0);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      this.node = node;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span>    @Override<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    public void nodeDeleted(String path) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      if(path.equals(node)) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        LOG.debug("nodeDeleted(" + path + ")");<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        lock.release();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    public void waitForDeletion() throws InterruptedException {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      lock.acquire();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * Dummy Master Implementation.<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  public static class DummyMaster implements Server {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    private volatile boolean stopped;<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private ClusterStatusTracker clusterStatusTracker;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    private ActiveMasterManager activeMasterManager;<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>    public DummyMaster(ZKWatcher zk, ServerName master) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      this.clusterStatusTracker =<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        new ClusterStatusTracker(zk, this);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      clusterStatusTracker.start();<a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span>      this.activeMasterManager =<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        new ActiveMasterManager(zk, master, this);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      zk.registerListener(activeMasterManager);<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 void abort(final String msg, final Throwable t) {}<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>    @Override<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    public boolean isAborted() {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      return false;<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>    @Override<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    public Configuration getConfiguration() {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      return null;<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>    @Override<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    public ZKWatcher getZooKeeper() {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      return null;<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>    @Override<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      return null;<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>    @Override<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    public ServerName getServerName() {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      return null;<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>    @Override<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    public boolean isStopped() {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      return this.stopped;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    }<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>    @Override<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    public void stop(String why) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      this.stopped = true;<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>    @Override<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    public ClusterConnection getConnection() {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      return null;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    @Override<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    public MetaTableLocator getMetaTableLocator() {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      return null;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    public ClusterStatusTracker getClusterStatusTracker() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      return clusterStatusTracker;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>    public ActiveMasterManager getActiveMasterManager() {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      return activeMasterManager;<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>    @Override<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    public ChoreService getChoreService() {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      return null;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>    @Override<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    public ClusterConnection getClusterConnection() {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      // TODO Auto-generated method stub<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      return null;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>    @Override<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public FileSystem getFileSystem() {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      return null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>    @Override<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    public boolean isStopping() {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      return false;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>    @Override<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    public Connection createConnection(Configuration conf) throws IOException {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      return null;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>}<a name="line.358"></a>
+<span class="sourceLineNo">170</span>    NodeDeletionListener listener = new NodeDeletionListener(zk,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>            zk.getZNodePaths().masterAddressZNode);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    zk.registerListener(listener);<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>    LOG.info("Deleting master node");<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    ZKUtil.deleteNode(zk, zk.getZNodePaths().masterAddressZNode);<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>    // Wait for the node to be deleted<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    LOG.info("Waiting for active master manager to be notified");<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    listener.waitForDeletion();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    LOG.info("Master node deleted");<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>    // Now we expect the secondary manager to have and be the active master<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    // Wait for 1 second at most<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    sleeps = 0;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    while(!t.isActiveMaster &amp;&amp; sleeps &lt; 100) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      Thread.sleep(10);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      sleeps++;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    LOG.debug("Slept " + sleeps + " times");<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    assertTrue(t.manager.clusterHasActiveMaster.get());<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    assertTrue(t.isActiveMaster);<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>    LOG.info("Deleting master node");<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    ZKUtil.deleteNode(zk, zk.getZNodePaths().masterAddressZNode);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>  /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * Assert there is an active master and that it has the specified address.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * @param zk<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * @param thisMasterAddress<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * @throws KeeperException<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * @throws IOException<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  private void assertMaster(ZKWatcher zk,<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      ServerName expectedAddress)<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  throws KeeperException, IOException {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    ServerName readAddress = MasterAddressTracker.getMasterAddress(zk);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    assertNotNull(readAddress);<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    assertTrue(expectedAddress.equals(readAddress));<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  public static class WaitToBeMasterThread extends Thread {<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    ActiveMasterManager manager;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    DummyMaster dummyMaster;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    boolean isActiveMaster;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>    public WaitToBeMasterThread(ZKWatcher zk, ServerName address) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      this.dummyMaster = new DummyMaster(zk,address);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      this.manager = this.dummyMaster.getActiveMasterManager();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      isActiveMaster = false;<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>    @Override<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    public void run() {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      manager.blockUntilBecomingActiveMaster(100,<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          Mockito.mock(MonitoredTask.class));<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      LOG.info("Second master has become the active master!");<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      isActiveMaster = true;<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><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  public static class NodeDeletionListener extends ZKListener {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    private static final Logger LOG = LoggerFactory.getLogger(NodeDeletionListener.class);<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>    private Semaphore lock;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    private String node;<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>    public NodeDeletionListener(ZKWatcher watcher, String node) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      super(watcher);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      lock = new Semaphore(0);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      this.node = node;<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>    @Override<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    public void nodeDeleted(String path) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if(path.equals(node)) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        LOG.debug("nodeDeleted(" + path + ")");<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        lock.release();<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>    public void waitForDeletion() throws InterruptedException {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      lock.acquire();<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>  /**<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * Dummy Master Implementation.<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   */<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  public static class DummyMaster implements Server {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    private volatile boolean stopped;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    private ClusterStatusTracker clusterStatusTracker;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    private ActiveMasterManager activeMasterManager;<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>    public DummyMaster(ZKWatcher zk, ServerName master) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      this.clusterStatusTracker =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        new ClusterStatusTracker(zk, this);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      clusterStatusTracker.start();<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>      this.activeMasterManager =<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        new ActiveMasterManager(zk, master, this);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      zk.registerListener(activeMasterManager);<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>    @Override<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    public void abort(final String msg, final Throwable t) {}<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>    @Override<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    public boolean isAborted() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      return false;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>    @Override<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public Configuration getConfiguration() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      return null;<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>    @Override<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    public ZKWatcher getZooKeeper() {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      return null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    @Override<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      return null;<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    }<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    public ServerName getServerName() {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      return null;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    public boolean isStopped() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      return this.stopped;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>    @Override<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    public void stop(String why) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      this.stopped = 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>    @Override<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    public ClusterConnection getConnection() {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      return null;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>    @Override<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    public MetaTableLocator getMetaTableLocator() {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return null;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    public ClusterStatusTracker getClusterStatusTracker() {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      return clusterStatusTracker;<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>    public ActiveMasterManager getActiveMasterManager() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      return activeMasterManager;<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>    @Override<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    public ChoreService getChoreService() {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      return null;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>    @Override<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    public ClusterConnection getClusterConnection() {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      // TODO Auto-generated method stub<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      return null;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    @Override<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    public FileSystem getFileSystem() {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      return null;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    public boolean isStopping() {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      return false;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>    @Override<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public Connection createConnection(Configuration conf) throws IOException {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      return null;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>}<a name="line.359"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html
index fa90598..620c427 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html
@@ -87,8 +87,8 @@
 <span class="sourceLineNo">079</span>    ZKWatcher zk = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.79"></a>
 <span class="sourceLineNo">080</span>      "testActiveMasterManagerFromZK", null, true);<a name="line.80"></a>
 <span class="sourceLineNo">081</span>    try {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      ZKUtil.deleteNode(zk, zk.znodePaths.masterAddressZNode);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      ZKUtil.deleteNode(zk, zk.znodePaths.clusterStateZNode);<a name="line.83"></a>
+<span class="sourceLineNo">082</span>      ZKUtil.deleteNode(zk, zk.getZNodePaths().masterAddressZNode);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      ZKUtil.deleteNode(zk, zk.getZNodePaths().clusterStateZNode);<a name="line.83"></a>
 <span class="sourceLineNo">084</span>    } catch(KeeperException.NoNodeException nne) {}<a name="line.84"></a>
 <span class="sourceLineNo">085</span><a name="line.85"></a>
 <span class="sourceLineNo">086</span>    // Create the master node with a dummy address<a name="line.86"></a>
@@ -129,8 +129,8 @@
 <span class="sourceLineNo">121</span>    ZKWatcher zk = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.121"></a>
 <span class="sourceLineNo">122</span>      "testActiveMasterManagerFromZK", null, true);<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    try {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      ZKUtil.deleteNode(zk, zk.znodePaths.masterAddressZNode);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      ZKUtil.deleteNode(zk, zk.znodePaths.clusterStateZNode);<a name="line.125"></a>
+<span class="sourceLineNo">124</span>      ZKUtil.deleteNode(zk, zk.getZNodePaths().masterAddressZNode);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      ZKUtil.deleteNode(zk, zk.getZNodePaths().clusterStateZNode);<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    } catch(KeeperException.NoNodeException nne) {}<a name="line.126"></a>
 <span class="sourceLineNo">127</span><a name="line.127"></a>
 <span class="sourceLineNo">128</span>    // Create the master node with a dummy address<a name="line.128"></a>
@@ -175,195 +175,196 @@
 <span class="sourceLineNo">167</span>    ms1.stop("stopping first server");<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
 <span class="sourceLineNo">169</span>    // Use a listener to capture when the node is actually deleted<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    NodeDeletionListener listener = new NodeDeletionListener(zk, zk.znodePaths.masterAddressZNode);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    zk.registerListener(listener);<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>    LOG.info("Deleting master node");<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    ZKUtil.deleteNode(zk, zk.znodePaths.masterAddressZNode);<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    // Wait for the node to be deleted<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    LOG.info("Waiting for active master manager to be notified");<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    listener.waitForDeletion();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    LOG.info("Master node deleted");<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // Now we expect the secondary manager to have and be the active master<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    // Wait for 1 second at most<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    sleeps = 0;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    while(!t.isActiveMaster &amp;&amp; sleeps &lt; 100) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      Thread.sleep(10);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      sleeps++;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    LOG.debug("Slept " + sleeps + " times");<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>    assertTrue(t.manager.clusterHasActiveMaster.get());<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    assertTrue(t.isActiveMaster);<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    LOG.info("Deleting master node");<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    ZKUtil.deleteNode(zk, zk.znodePaths.masterAddressZNode);<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>  /**<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * Assert there is an active master and that it has the specified address.<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   * @param zk<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * @param thisMasterAddress<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * @throws KeeperException<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * @throws IOException<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  private void assertMaster(ZKWatcher zk,<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      ServerName expectedAddress)<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  throws KeeperException, IOException {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    ServerName readAddress = MasterAddressTracker.getMasterAddress(zk);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    assertNotNull(readAddress);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    assertTrue(expectedAddress.equals(readAddress));<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>  public static class WaitToBeMasterThread extends Thread {<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    ActiveMasterManager manager;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    DummyMaster dummyMaster;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    boolean isActiveMaster;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    public WaitToBeMasterThread(ZKWatcher zk, ServerName address) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      this.dummyMaster = new DummyMaster(zk,address);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      this.manager = this.dummyMaster.getActiveMasterManager();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      isActiveMaster = false;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    @Override<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public void run() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      manager.blockUntilBecomingActiveMaster(100,<a name="line.226"></a>
-<span class="sourceLineNo">227</span>          Mockito.mock(MonitoredTask.class));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      LOG.info("Second master has become the active master!");<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      isActiveMaster = true;<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>  public static class NodeDeletionListener extends ZKListener {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    private static final Logger LOG = LoggerFactory.getLogger(NodeDeletionListener.class);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>    private Semaphore lock;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    private String node;<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>    public NodeDeletionListener(ZKWatcher watcher, String node) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      super(watcher);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      lock = new Semaphore(0);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      this.node = node;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span>    @Override<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    public void nodeDeleted(String path) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      if(path.equals(node)) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        LOG.debug("nodeDeleted(" + path + ")");<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        lock.release();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    public void waitForDeletion() throws InterruptedException {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      lock.acquire();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * Dummy Master Implementation.<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  public static class DummyMaster implements Server {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    private volatile boolean stopped;<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private ClusterStatusTracker clusterStatusTracker;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    private ActiveMasterManager activeMasterManager;<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>    public DummyMaster(ZKWatcher zk, ServerName master) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      this.clusterStatusTracker =<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        new ClusterStatusTracker(zk, this);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      clusterStatusTracker.start();<a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span>      this.activeMasterManager =<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        new ActiveMasterManager(zk, master, this);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      zk.registerListener(activeMasterManager);<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 void abort(final String msg, final Throwable t) {}<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>    @Override<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    public boolean isAborted() {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      return false;<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>    @Override<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    public Configuration getConfiguration() {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      return null;<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>    @Override<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    public ZKWatcher getZooKeeper() {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      return null;<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>    @Override<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      return null;<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>    @Override<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    public ServerName getServerName() {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      return null;<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>    @Override<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    public boolean isStopped() {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      return this.stopped;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    }<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>    @Override<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    public void stop(String why) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      this.stopped = true;<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>    @Override<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    public ClusterConnection getConnection() {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      return null;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    @Override<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    public MetaTableLocator getMetaTableLocator() {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      return null;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    public ClusterStatusTracker getClusterStatusTracker() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      return clusterStatusTracker;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>    public ActiveMasterManager getActiveMasterManager() {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      return activeMasterManager;<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>    @Override<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    public ChoreService getChoreService() {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      return null;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>    @Override<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    public ClusterConnection getClusterConnection() {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      // TODO Auto-generated method stub<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      return null;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>    @Override<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public FileSystem getFileSystem() {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      return null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>    @Override<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    public boolean isStopping() {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      return false;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>    @Override<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    public Connection createConnection(Configuration conf) throws IOException {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      return null;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>}<a name="line.358"></a>
+<span class="sourceLineNo">170</span>    NodeDeletionListener listener = new NodeDeletionListener(zk,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>            zk.getZNodePaths().masterAddressZNode);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    zk.registerListener(listener);<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>    LOG.info("Deleting master node");<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    ZKUtil.deleteNode(zk, zk.getZNodePaths().masterAddressZNode);<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>    // Wait for the node to be deleted<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    LOG.info("Waiting for active master manager to be notified");<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    listener.waitForDeletion();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    LOG.info("Master node deleted");<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>    // Now we expect the secondary manager to have and be the active master<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    // Wait for 1 second at most<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    sleeps = 0;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    while(!t.isActiveMaster &amp;&amp; sleeps &lt; 100) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      Thread.sleep(10);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      sleeps++;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    LOG.debug("Slept " + sleeps + " times");<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    assertTrue(t.manager.clusterHasActiveMaster.get());<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    assertTrue(t.isActiveMaster);<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>    LOG.info("Deleting master node");<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    ZKUtil.deleteNode(zk, zk.getZNodePaths().masterAddressZNode);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>  /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * Assert there is an active master and that it has the specified address.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * @param zk<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * @param thisMasterAddress<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * @throws KeeperException<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * @throws IOException<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  private void assertMaster(ZKWatcher zk,<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      ServerName expectedAddress)<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  throws KeeperException, IOException {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    ServerName readAddress = MasterAddressTracker.getMasterAddress(zk);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    assertNotNull(readAddress);<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    assertTrue(expectedAddress.equals(readAddress));<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  public static class WaitToBeMasterThread extends Thread {<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    ActiveMasterManager manager;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    DummyMaster dummyMaster;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    boolean isActiveMaster;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>    public WaitToBeMasterThread(ZKWatcher zk, ServerName address) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      this.dummyMaster = new DummyMaster(zk,address);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      this.manager = this.dummyMaster.getActiveMasterManager();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      isActiveMaster = false;<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>    @Override<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    public void run() {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      manager.blockUntilBecomingActiveMaster(100,<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          Mockito.mock(MonitoredTask.class));<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      LOG.info("Second master has become the active master!");<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      isActiveMaster = true;<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><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  public static class NodeDeletionListener extends ZKListener {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    private static final Logger LOG = LoggerFactory.getLogger(NodeDeletionListener.class);<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>    private Semaphore lock;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    private String node;<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>    public NodeDeletionListener(ZKWatcher watcher, String node) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      super(watcher);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      lock = new Semaphore(0);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      this.node = node;<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>    @Override<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    public void nodeDeleted(String path) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if(path.equals(node)) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        LOG.debug("nodeDeleted(" + path + ")");<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        lock.release();<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>    public void waitForDeletion() throws InterruptedException {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      lock.acquire();<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>  /**<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * Dummy Master Implementation.<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   */<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  public static class DummyMaster implements Server {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    private volatile boolean stopped;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    private ClusterStatusTracker clusterStatusTracker;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    private ActiveMasterManager activeMasterManager;<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>    public DummyMaster(ZKWatcher zk, ServerName master) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      this.clusterStatusTracker =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        new ClusterStatusTracker(zk, this);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      clusterStatusTracker.start();<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>      this.activeMasterManager =<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        new ActiveMasterManager(zk, master, this);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      zk.registerListener(activeMasterManager);<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>    @Override<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    public void abort(final String msg, final Throwable t) {}<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>    @Override<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    public boolean isAborted() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      return false;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>    @Override<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public Configuration getConfiguration() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      return null;<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>    @Override<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    public ZKWatcher getZooKeeper() {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      return null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    @Override<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      return null;<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    }<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    public ServerName getServerName() {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      return null;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    public boolean isStopped() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      return this.stopped;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>    @Override<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    public void stop(String why) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      this.stopped = 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>    @Override<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    public ClusterConnection getConnection() {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      return null;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>    @Override<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    public MetaTableLocator getMetaTableLocator() {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return null;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    public ClusterStatusTracker getClusterStatusTracker() {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      return clusterStatusTracker;<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>    public ActiveMasterManager getActiveMasterManager() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      return activeMasterManager;<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>    @Override<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    public ChoreService getChoreService() {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      return null;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>    @Override<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    public ClusterConnection getClusterConnection() {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      // TODO Auto-generated method stub<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      return null;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    @Override<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    public FileSystem getFileSystem() {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      return null;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    public boolean isStopping() {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      return false;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>    @Override<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public Connection createConnection(Configuration conf) throws IOException {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      return null;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>}<a name="line.359"></a>
 
 
 


[26/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html
index 70c4db7..db9d94c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html
@@ -132,182 +132,199 @@
 <span class="sourceLineNo">124</span>  }<a name="line.124"></a>
 <span class="sourceLineNo">125</span><a name="line.125"></a>
 <span class="sourceLineNo">126</span>  /**<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * Do the shipping logic<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private void shipEdits(WALEntryBatch entryBatch) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    List&lt;Entry&gt; entries = entryBatch.getWalEntries();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    int sleepMultiplier = 0;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    if (entries.isEmpty()) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      if (updateLogPosition(entryBatch)) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        // if there was nothing to ship and it's not an error<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        // set "ageOfLastShippedOp" to &lt;now&gt; to indicate that we're current<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        source.getSourceMetrics().setAgeOfLastShippedOp(EnvironmentEdgeManager.currentTime(),<a name="line.136"></a>
-<span class="sourceLineNo">137</span>          walGroupId);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      return;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    int currentSize = (int) entryBatch.getHeapSize();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    while (isActive()) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      try {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        try {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>          source.tryThrottle(currentSize);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        } catch (InterruptedException e) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>          LOG.debug("Interrupted while sleeping for throttling control");<a name="line.147"></a>
-<span class="sourceLineNo">148</span>          Thread.currentThread().interrupt();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>          // current thread might be interrupted to terminate<a name="line.149"></a>
-<span class="sourceLineNo">150</span>          // directly go back to while() for confirm this<a name="line.150"></a>
-<span class="sourceLineNo">151</span>          continue;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        }<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>        // create replicateContext here, so the entries can be GC'd upon return from this call<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        // stack<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        ReplicationEndpoint.ReplicateContext replicateContext =<a name="line.156"></a>
-<span class="sourceLineNo">157</span>            new ReplicationEndpoint.ReplicateContext();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        replicateContext.setEntries(entries).setSize(currentSize);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        replicateContext.setWalGroupId(walGroupId);<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>        long startTimeNs = System.nanoTime();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        // send the edits to the endpoint. Will block until the edits are shipped and acknowledged<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        boolean replicated = source.getReplicationEndpoint().replicate(replicateContext);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        long endTimeNs = System.nanoTime();<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>        if (!replicated) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>          continue;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        } else {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>          sleepMultiplier = Math.max(sleepMultiplier - 1, 0);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        // Clean up hfile references<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        for (Entry entry : entries) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>          cleanUpHFileRefs(entry.getEdit());<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        // Log and clean up WAL logs<a name="line.175"></a>
-<span class="sourceLineNo">176</span>        updateLogPosition(entryBatch);<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>        source.postShipEdits(entries, currentSize);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        // FIXME check relationship between wal group and overall<a name="line.179"></a>
-<span class="sourceLineNo">180</span>        source.getSourceMetrics().shipBatch(entryBatch.getNbOperations(), currentSize,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          entryBatch.getNbHFiles());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        source.getSourceMetrics().setAgeOfLastShippedOp(<a name="line.182"></a>
-<span class="sourceLineNo">183</span>          entries.get(entries.size() - 1).getKey().getWriteTime(), walGroupId);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        if (LOG.isTraceEnabled()) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>          LOG.trace("Replicated " + entries.size() + " entries or " + entryBatch.getNbOperations()<a name="line.185"></a>
-<span class="sourceLineNo">186</span>              + " operations in " + ((endTimeNs - startTimeNs) / 1000000) + " ms");<a name="line.186"></a>
+<span class="sourceLineNo">127</span>   * get batchEntry size excludes bulk load file sizes.<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * Uses ReplicationSourceWALReader's static method.<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   */<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  private int getBatchEntrySizeExcludeBulkLoad(WALEntryBatch entryBatch) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    int totalSize = 0;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    for(Entry entry : entryBatch.getWalEntries()) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      totalSize += entryReader.getEntrySizeExcludeBulkLoad(entry);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    }<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    return  totalSize;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  /**<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * Do the shipping logic<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  private void shipEdits(WALEntryBatch entryBatch) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    List&lt;Entry&gt; entries = entryBatch.getWalEntries();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    int sleepMultiplier = 0;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    if (entries.isEmpty()) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      if (updateLogPosition(entryBatch)) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        // if there was nothing to ship and it's not an error<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        // set "ageOfLastShippedOp" to &lt;now&gt; to indicate that we're current<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        source.getSourceMetrics().setAgeOfLastShippedOp(EnvironmentEdgeManager.currentTime(),<a name="line.148"></a>
+<span class="sourceLineNo">149</span>          walGroupId);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    int currentSize = (int) entryBatch.getHeapSize();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    int sizeExcludeBulkLoad = getBatchEntrySizeExcludeBulkLoad(entryBatch);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    while (isActive()) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      try {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        try {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>          source.tryThrottle(currentSize);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        } catch (InterruptedException e) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>          LOG.debug("Interrupted while sleeping for throttling control");<a name="line.160"></a>
+<span class="sourceLineNo">161</span>          Thread.currentThread().interrupt();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          // current thread might be interrupted to terminate<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          // directly go back to while() for confirm this<a name="line.163"></a>
+<span class="sourceLineNo">164</span>          continue;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>        // create replicateContext here, so the entries can be GC'd upon return from this call<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        // stack<a name="line.168"></a>
+<span class="sourceLineNo">169</span>        ReplicationEndpoint.ReplicateContext replicateContext =<a name="line.169"></a>
+<span class="sourceLineNo">170</span>            new ReplicationEndpoint.ReplicateContext();<a name="line.170"></a>
+<span class="sourceLineNo">171</span>        replicateContext.setEntries(entries).setSize(currentSize);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        replicateContext.setWalGroupId(walGroupId);<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>        long startTimeNs = System.nanoTime();<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        // send the edits to the endpoint. Will block until the edits are shipped and acknowledged<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        boolean replicated = source.getReplicationEndpoint().replicate(replicateContext);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        long endTimeNs = System.nanoTime();<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>        if (!replicated) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>          continue;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        } else {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          sleepMultiplier = Math.max(sleepMultiplier - 1, 0);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        }<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        // Clean up hfile references<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        for (Entry entry : entries) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>          cleanUpHFileRefs(entry.getEdit());<a name="line.186"></a>
 <span class="sourceLineNo">187</span>        }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        break;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      } catch (Exception ex) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        LOG.warn("{} threw unknown exception:",<a name="line.190"></a>
-<span class="sourceLineNo">191</span>          source.getReplicationEndpoint().getClass().getName(), ex);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        if (sleepForRetries("ReplicationEndpoint threw exception", sleepMultiplier)) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          sleepMultiplier++;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>  private void cleanUpHFileRefs(WALEdit edit) throws IOException {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    String peerId = source.getPeerId();<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    if (peerId.contains("-")) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      // peerClusterZnode will be in the form peerId + "-" + rsZNode.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // A peerId will not have "-" in its name, see HBASE-11394<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      peerId = peerId.split("-")[0];<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    int totalCells = cells.size();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      Cell cell = cells.get(i);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      if (CellUtil.matchingQualifier(cell, WALEdit.BULK_LOAD)) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cell);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        int totalStores = stores.size();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        for (int j = 0; j &lt; totalStores; j++) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          List&lt;String&gt; storeFileList = stores.get(j).getStoreFileList();<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          source.getSourceManager().cleanUpHFileRefs(peerId, storeFileList);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          source.getSourceMetrics().decrSizeOfHFileRefsQueue(storeFileList.size());<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  private boolean updateLogPosition(WALEntryBatch batch) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    boolean updated = false;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    // if end of file is true, then the logPositionAndCleanOldLogs method will remove the file<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    // record on zk, so let's call it. The last wal position maybe zero if end of file is true and<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    // there is no entry in the batch. It is OK because that the queue storage will ignore the zero<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    // position and the file will be removed soon in cleanOldLogs.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    if (batch.isEndOfFile() || !batch.getLastWalPath().equals(currentPath) ||<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      batch.getLastWalPosition() != currentPosition) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      source.getSourceManager().logPositionAndCleanOldLogs(source.getQueueId(),<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        source.isRecovered(), batch);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      updated = true;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    }<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    // if end of file is true, then we can just skip to the next file in queue.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    // the only exception is for recovered queue, if we reach the end of the queue, then there will<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    // no more files so here the currentPath may be null.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    if (batch.isEndOfFile()) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      currentPath = entryReader.getCurrentPath();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      currentPosition = 0L;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    } else {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      currentPath = batch.getLastWalPath();<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      currentPosition = batch.getLastWalPosition();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return updated;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public void startup(UncaughtExceptionHandler handler) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    String name = Thread.currentThread().getName();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    Threads.setDaemonThreadRunning(this,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      name + ".replicationSource.shipper" + walGroupId + "," + source.getQueueId(), handler);<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>  Path getCurrentPath() {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    return entryReader.getCurrentPath();<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>  long getCurrentPosition() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    return currentPosition;<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>  void setWALReader(ReplicationSourceWALReader entryReader) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    this.entryReader = entryReader;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  long getStartPosition() {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    return 0;<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>  private boolean isActive() {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    return source.isSourceActive() &amp;&amp; state == WorkerState.RUNNING &amp;&amp; !isInterrupted();<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>  protected final void setWorkerState(WorkerState state) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    this.state = state;<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>  void stopWorker() {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    setWorkerState(WorkerState.STOPPED);<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 boolean isFinished() {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    return state == WorkerState.FINISHED;<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>   * Do the sleeping logic<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * @param msg Why we sleep<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * @return True if &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    try {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      LOG.trace("{}, sleeping {} times {}", msg, sleepForRetries, sleepMultiplier);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    } catch (InterruptedException e) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      LOG.debug("Interrupted while sleeping between retries");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      Thread.currentThread().interrupt();<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return sleepMultiplier &lt; maxRetriesMultiplier;<a name="line.300"></a>
+<span class="sourceLineNo">188</span>        // Log and clean up WAL logs<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        updateLogPosition(entryBatch);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>        //offsets totalBufferUsed by deducting shipped batchSize (excludes bulk load size)<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        //this sizeExcludeBulkLoad has to use same calculation that when calling<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        //acquireBufferQuota() in ReplicatinoSourceWALReader because they maintain<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        //same variable: totalBufferUsed<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        source.postShipEdits(entries, sizeExcludeBulkLoad);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        // FIXME check relationship between wal group and overall<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        source.getSourceMetrics().shipBatch(entryBatch.getNbOperations(), currentSize,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          entryBatch.getNbHFiles());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        source.getSourceMetrics().setAgeOfLastShippedOp(<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          entries.get(entries.size() - 1).getKey().getWriteTime(), walGroupId);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        if (LOG.isTraceEnabled()) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          LOG.trace("Replicated " + entries.size() + " entries or " + entryBatch.getNbOperations()<a name="line.202"></a>
+<span class="sourceLineNo">203</span>              + " operations in " + ((endTimeNs - startTimeNs) / 1000000) + " ms");<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        break;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      } catch (Exception ex) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        LOG.warn("{} threw unknown exception:",<a name="line.207"></a>
+<span class="sourceLineNo">208</span>          source.getReplicationEndpoint().getClass().getName(), ex);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        if (sleepForRetries("ReplicationEndpoint threw exception", sleepMultiplier)) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>          sleepMultiplier++;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        }<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>  private void cleanUpHFileRefs(WALEdit edit) throws IOException {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    String peerId = source.getPeerId();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    if (peerId.contains("-")) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      // peerClusterZnode will be in the form peerId + "-" + rsZNode.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      // A peerId will not have "-" in its name, see HBASE-11394<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      peerId = peerId.split("-")[0];<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    int totalCells = cells.size();<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      Cell cell = cells.get(i);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      if (CellUtil.matchingQualifier(cell, WALEdit.BULK_LOAD)) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cell);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        int totalStores = stores.size();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        for (int j = 0; j &lt; totalStores; j++) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>          List&lt;String&gt; storeFileList = stores.get(j).getStoreFileList();<a name="line.232"></a>
+<span class="sourceLineNo">233</span>          source.getSourceManager().cleanUpHFileRefs(peerId, storeFileList);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          source.getSourceMetrics().decrSizeOfHFileRefsQueue(storeFileList.size());<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>    }<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>  private boolean updateLogPosition(WALEntryBatch batch) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    boolean updated = false;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    // if end of file is true, then the logPositionAndCleanOldLogs method will remove the file<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    // record on zk, so let's call it. The last wal position maybe zero if end of file is true and<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    // there is no entry in the batch. It is OK because that the queue storage will ignore the zero<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    // position and the file will be removed soon in cleanOldLogs.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    if (batch.isEndOfFile() || !batch.getLastWalPath().equals(currentPath) ||<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      batch.getLastWalPosition() != currentPosition) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      source.getSourceManager().logPositionAndCleanOldLogs(source.getQueueId(),<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        source.isRecovered(), batch);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      updated = true;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    // if end of file is true, then we can just skip to the next file in queue.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    // the only exception is for recovered queue, if we reach the end of the queue, then there will<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    // no more files so here the currentPath may be null.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    if (batch.isEndOfFile()) {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      currentPath = entryReader.getCurrentPath();<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      currentPosition = 0L;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    } else {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      currentPath = batch.getLastWalPath();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      currentPosition = batch.getLastWalPosition();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return updated;<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>  public void startup(UncaughtExceptionHandler handler) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    String name = Thread.currentThread().getName();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    Threads.setDaemonThreadRunning(this,<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      name + ".replicationSource.shipper" + walGroupId + "," + source.getQueueId(), handler);<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>  Path getCurrentPath() {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    return entryReader.getCurrentPath();<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>  long getCurrentPosition() {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    return currentPosition;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>  void setWALReader(ReplicationSourceWALReader entryReader) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    this.entryReader = entryReader;<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>  long getStartPosition() {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    return 0;<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>  private boolean isActive() {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    return source.isSourceActive() &amp;&amp; state == WorkerState.RUNNING &amp;&amp; !isInterrupted();<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>  protected final void setWorkerState(WorkerState state) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    this.state = state;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  void stopWorker() {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    setWorkerState(WorkerState.STOPPED);<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 boolean isFinished() {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    return state == WorkerState.FINISHED;<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">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>  /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * Do the sleeping logic<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   * @param msg Why we sleep<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   * @return True if &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   */<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  public boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    try {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      LOG.trace("{}, sleeping {} times {}", msg, sleepForRetries, sleepMultiplier);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    } catch (InterruptedException e) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      LOG.debug("Interrupted while sleeping between retries");<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      Thread.currentThread().interrupt();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    return sleepMultiplier &lt; maxRetriesMultiplier;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>}<a name="line.319"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html
index 70c4db7..db9d94c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html
@@ -132,182 +132,199 @@
 <span class="sourceLineNo">124</span>  }<a name="line.124"></a>
 <span class="sourceLineNo">125</span><a name="line.125"></a>
 <span class="sourceLineNo">126</span>  /**<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * Do the shipping logic<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private void shipEdits(WALEntryBatch entryBatch) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    List&lt;Entry&gt; entries = entryBatch.getWalEntries();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    int sleepMultiplier = 0;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    if (entries.isEmpty()) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      if (updateLogPosition(entryBatch)) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        // if there was nothing to ship and it's not an error<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        // set "ageOfLastShippedOp" to &lt;now&gt; to indicate that we're current<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        source.getSourceMetrics().setAgeOfLastShippedOp(EnvironmentEdgeManager.currentTime(),<a name="line.136"></a>
-<span class="sourceLineNo">137</span>          walGroupId);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      return;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    int currentSize = (int) entryBatch.getHeapSize();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    while (isActive()) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      try {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        try {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>          source.tryThrottle(currentSize);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        } catch (InterruptedException e) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>          LOG.debug("Interrupted while sleeping for throttling control");<a name="line.147"></a>
-<span class="sourceLineNo">148</span>          Thread.currentThread().interrupt();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>          // current thread might be interrupted to terminate<a name="line.149"></a>
-<span class="sourceLineNo">150</span>          // directly go back to while() for confirm this<a name="line.150"></a>
-<span class="sourceLineNo">151</span>          continue;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        }<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>        // create replicateContext here, so the entries can be GC'd upon return from this call<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        // stack<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        ReplicationEndpoint.ReplicateContext replicateContext =<a name="line.156"></a>
-<span class="sourceLineNo">157</span>            new ReplicationEndpoint.ReplicateContext();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        replicateContext.setEntries(entries).setSize(currentSize);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        replicateContext.setWalGroupId(walGroupId);<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>        long startTimeNs = System.nanoTime();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        // send the edits to the endpoint. Will block until the edits are shipped and acknowledged<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        boolean replicated = source.getReplicationEndpoint().replicate(replicateContext);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        long endTimeNs = System.nanoTime();<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>        if (!replicated) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>          continue;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        } else {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>          sleepMultiplier = Math.max(sleepMultiplier - 1, 0);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        // Clean up hfile references<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        for (Entry entry : entries) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>          cleanUpHFileRefs(entry.getEdit());<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        // Log and clean up WAL logs<a name="line.175"></a>
-<span class="sourceLineNo">176</span>        updateLogPosition(entryBatch);<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>        source.postShipEdits(entries, currentSize);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        // FIXME check relationship between wal group and overall<a name="line.179"></a>
-<span class="sourceLineNo">180</span>        source.getSourceMetrics().shipBatch(entryBatch.getNbOperations(), currentSize,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          entryBatch.getNbHFiles());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        source.getSourceMetrics().setAgeOfLastShippedOp(<a name="line.182"></a>
-<span class="sourceLineNo">183</span>          entries.get(entries.size() - 1).getKey().getWriteTime(), walGroupId);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        if (LOG.isTraceEnabled()) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>          LOG.trace("Replicated " + entries.size() + " entries or " + entryBatch.getNbOperations()<a name="line.185"></a>
-<span class="sourceLineNo">186</span>              + " operations in " + ((endTimeNs - startTimeNs) / 1000000) + " ms");<a name="line.186"></a>
+<span class="sourceLineNo">127</span>   * get batchEntry size excludes bulk load file sizes.<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * Uses ReplicationSourceWALReader's static method.<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   */<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  private int getBatchEntrySizeExcludeBulkLoad(WALEntryBatch entryBatch) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    int totalSize = 0;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    for(Entry entry : entryBatch.getWalEntries()) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      totalSize += entryReader.getEntrySizeExcludeBulkLoad(entry);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    }<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    return  totalSize;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  /**<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * Do the shipping logic<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  private void shipEdits(WALEntryBatch entryBatch) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    List&lt;Entry&gt; entries = entryBatch.getWalEntries();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    int sleepMultiplier = 0;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    if (entries.isEmpty()) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      if (updateLogPosition(entryBatch)) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        // if there was nothing to ship and it's not an error<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        // set "ageOfLastShippedOp" to &lt;now&gt; to indicate that we're current<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        source.getSourceMetrics().setAgeOfLastShippedOp(EnvironmentEdgeManager.currentTime(),<a name="line.148"></a>
+<span class="sourceLineNo">149</span>          walGroupId);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    int currentSize = (int) entryBatch.getHeapSize();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    int sizeExcludeBulkLoad = getBatchEntrySizeExcludeBulkLoad(entryBatch);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    while (isActive()) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      try {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        try {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>          source.tryThrottle(currentSize);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        } catch (InterruptedException e) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>          LOG.debug("Interrupted while sleeping for throttling control");<a name="line.160"></a>
+<span class="sourceLineNo">161</span>          Thread.currentThread().interrupt();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          // current thread might be interrupted to terminate<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          // directly go back to while() for confirm this<a name="line.163"></a>
+<span class="sourceLineNo">164</span>          continue;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>        // create replicateContext here, so the entries can be GC'd upon return from this call<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        // stack<a name="line.168"></a>
+<span class="sourceLineNo">169</span>        ReplicationEndpoint.ReplicateContext replicateContext =<a name="line.169"></a>
+<span class="sourceLineNo">170</span>            new ReplicationEndpoint.ReplicateContext();<a name="line.170"></a>
+<span class="sourceLineNo">171</span>        replicateContext.setEntries(entries).setSize(currentSize);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        replicateContext.setWalGroupId(walGroupId);<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>        long startTimeNs = System.nanoTime();<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        // send the edits to the endpoint. Will block until the edits are shipped and acknowledged<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        boolean replicated = source.getReplicationEndpoint().replicate(replicateContext);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        long endTimeNs = System.nanoTime();<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>        if (!replicated) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>          continue;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        } else {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          sleepMultiplier = Math.max(sleepMultiplier - 1, 0);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        }<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        // Clean up hfile references<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        for (Entry entry : entries) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>          cleanUpHFileRefs(entry.getEdit());<a name="line.186"></a>
 <span class="sourceLineNo">187</span>        }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        break;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      } catch (Exception ex) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        LOG.warn("{} threw unknown exception:",<a name="line.190"></a>
-<span class="sourceLineNo">191</span>          source.getReplicationEndpoint().getClass().getName(), ex);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        if (sleepForRetries("ReplicationEndpoint threw exception", sleepMultiplier)) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          sleepMultiplier++;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>  private void cleanUpHFileRefs(WALEdit edit) throws IOException {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    String peerId = source.getPeerId();<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    if (peerId.contains("-")) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      // peerClusterZnode will be in the form peerId + "-" + rsZNode.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // A peerId will not have "-" in its name, see HBASE-11394<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      peerId = peerId.split("-")[0];<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    int totalCells = cells.size();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      Cell cell = cells.get(i);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      if (CellUtil.matchingQualifier(cell, WALEdit.BULK_LOAD)) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cell);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        int totalStores = stores.size();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        for (int j = 0; j &lt; totalStores; j++) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          List&lt;String&gt; storeFileList = stores.get(j).getStoreFileList();<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          source.getSourceManager().cleanUpHFileRefs(peerId, storeFileList);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          source.getSourceMetrics().decrSizeOfHFileRefsQueue(storeFileList.size());<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  private boolean updateLogPosition(WALEntryBatch batch) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    boolean updated = false;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    // if end of file is true, then the logPositionAndCleanOldLogs method will remove the file<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    // record on zk, so let's call it. The last wal position maybe zero if end of file is true and<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    // there is no entry in the batch. It is OK because that the queue storage will ignore the zero<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    // position and the file will be removed soon in cleanOldLogs.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    if (batch.isEndOfFile() || !batch.getLastWalPath().equals(currentPath) ||<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      batch.getLastWalPosition() != currentPosition) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      source.getSourceManager().logPositionAndCleanOldLogs(source.getQueueId(),<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        source.isRecovered(), batch);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      updated = true;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    }<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    // if end of file is true, then we can just skip to the next file in queue.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    // the only exception is for recovered queue, if we reach the end of the queue, then there will<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    // no more files so here the currentPath may be null.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    if (batch.isEndOfFile()) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      currentPath = entryReader.getCurrentPath();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      currentPosition = 0L;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    } else {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      currentPath = batch.getLastWalPath();<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      currentPosition = batch.getLastWalPosition();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return updated;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public void startup(UncaughtExceptionHandler handler) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    String name = Thread.currentThread().getName();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    Threads.setDaemonThreadRunning(this,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      name + ".replicationSource.shipper" + walGroupId + "," + source.getQueueId(), handler);<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>  Path getCurrentPath() {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    return entryReader.getCurrentPath();<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>  long getCurrentPosition() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    return currentPosition;<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>  void setWALReader(ReplicationSourceWALReader entryReader) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    this.entryReader = entryReader;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  long getStartPosition() {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    return 0;<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>  private boolean isActive() {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    return source.isSourceActive() &amp;&amp; state == WorkerState.RUNNING &amp;&amp; !isInterrupted();<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>  protected final void setWorkerState(WorkerState state) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    this.state = state;<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>  void stopWorker() {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    setWorkerState(WorkerState.STOPPED);<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 boolean isFinished() {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    return state == WorkerState.FINISHED;<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>   * Do the sleeping logic<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * @param msg Why we sleep<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * @return True if &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    try {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      LOG.trace("{}, sleeping {} times {}", msg, sleepForRetries, sleepMultiplier);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    } catch (InterruptedException e) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      LOG.debug("Interrupted while sleeping between retries");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      Thread.currentThread().interrupt();<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return sleepMultiplier &lt; maxRetriesMultiplier;<a name="line.300"></a>
+<span class="sourceLineNo">188</span>        // Log and clean up WAL logs<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        updateLogPosition(entryBatch);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>        //offsets totalBufferUsed by deducting shipped batchSize (excludes bulk load size)<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        //this sizeExcludeBulkLoad has to use same calculation that when calling<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        //acquireBufferQuota() in ReplicatinoSourceWALReader because they maintain<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        //same variable: totalBufferUsed<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        source.postShipEdits(entries, sizeExcludeBulkLoad);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        // FIXME check relationship between wal group and overall<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        source.getSourceMetrics().shipBatch(entryBatch.getNbOperations(), currentSize,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          entryBatch.getNbHFiles());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        source.getSourceMetrics().setAgeOfLastShippedOp(<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          entries.get(entries.size() - 1).getKey().getWriteTime(), walGroupId);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        if (LOG.isTraceEnabled()) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          LOG.trace("Replicated " + entries.size() + " entries or " + entryBatch.getNbOperations()<a name="line.202"></a>
+<span class="sourceLineNo">203</span>              + " operations in " + ((endTimeNs - startTimeNs) / 1000000) + " ms");<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        break;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      } catch (Exception ex) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        LOG.warn("{} threw unknown exception:",<a name="line.207"></a>
+<span class="sourceLineNo">208</span>          source.getReplicationEndpoint().getClass().getName(), ex);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        if (sleepForRetries("ReplicationEndpoint threw exception", sleepMultiplier)) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>          sleepMultiplier++;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        }<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>  private void cleanUpHFileRefs(WALEdit edit) throws IOException {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    String peerId = source.getPeerId();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    if (peerId.contains("-")) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      // peerClusterZnode will be in the form peerId + "-" + rsZNode.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      // A peerId will not have "-" in its name, see HBASE-11394<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      peerId = peerId.split("-")[0];<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    int totalCells = cells.size();<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      Cell cell = cells.get(i);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      if (CellUtil.matchingQualifier(cell, WALEdit.BULK_LOAD)) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cell);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        int totalStores = stores.size();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        for (int j = 0; j &lt; totalStores; j++) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>          List&lt;String&gt; storeFileList = stores.get(j).getStoreFileList();<a name="line.232"></a>
+<span class="sourceLineNo">233</span>          source.getSourceManager().cleanUpHFileRefs(peerId, storeFileList);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          source.getSourceMetrics().decrSizeOfHFileRefsQueue(storeFileList.size());<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>    }<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>  private boolean updateLogPosition(WALEntryBatch batch) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    boolean updated = false;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    // if end of file is true, then the logPositionAndCleanOldLogs method will remove the file<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    // record on zk, so let's call it. The last wal position maybe zero if end of file is true and<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    // there is no entry in the batch. It is OK because that the queue storage will ignore the zero<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    // position and the file will be removed soon in cleanOldLogs.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    if (batch.isEndOfFile() || !batch.getLastWalPath().equals(currentPath) ||<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      batch.getLastWalPosition() != currentPosition) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      source.getSourceManager().logPositionAndCleanOldLogs(source.getQueueId(),<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        source.isRecovered(), batch);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      updated = true;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    // if end of file is true, then we can just skip to the next file in queue.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    // the only exception is for recovered queue, if we reach the end of the queue, then there will<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    // no more files so here the currentPath may be null.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    if (batch.isEndOfFile()) {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      currentPath = entryReader.getCurrentPath();<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      currentPosition = 0L;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    } else {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      currentPath = batch.getLastWalPath();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      currentPosition = batch.getLastWalPosition();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return updated;<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>  public void startup(UncaughtExceptionHandler handler) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    String name = Thread.currentThread().getName();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    Threads.setDaemonThreadRunning(this,<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      name + ".replicationSource.shipper" + walGroupId + "," + source.getQueueId(), handler);<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>  Path getCurrentPath() {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    return entryReader.getCurrentPath();<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>  long getCurrentPosition() {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    return currentPosition;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>  void setWALReader(ReplicationSourceWALReader entryReader) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    this.entryReader = entryReader;<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>  long getStartPosition() {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    return 0;<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>  private boolean isActive() {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    return source.isSourceActive() &amp;&amp; state == WorkerState.RUNNING &amp;&amp; !isInterrupted();<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>  protected final void setWorkerState(WorkerState state) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    this.state = state;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  void stopWorker() {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    setWorkerState(WorkerState.STOPPED);<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 boolean isFinished() {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    return state == WorkerState.FINISHED;<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">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>  /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * Do the sleeping logic<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   * @param msg Why we sleep<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   * @return True if &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   */<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  public boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    try {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      LOG.trace("{}, sleeping {} times {}", msg, sleepForRetries, sleepMultiplier);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    } catch (InterruptedException e) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      LOG.debug("Interrupted while sleeping between retries");<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      Thread.currentThread().interrupt();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    return sleepMultiplier &lt; maxRetriesMultiplier;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>}<a name="line.319"></a>
 
 
 


[29/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html
index 80259dd..ec465b9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html
@@ -130,629 +130,631 @@
 <span class="sourceLineNo">122</span>  public int remainingTasksInCoordination() {<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    int count = 0;<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    try {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      List&lt;String&gt; tasks = ZKUtil.listChildrenNoWatch(watcher, watcher.znodePaths.splitLogZNode);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      if (tasks != null) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        int listSize = tasks.size();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        for (int i = 0; i &lt; listSize; i++) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>          if (!ZKSplitLog.isRescanNode(tasks.get(i))) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>            count++;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>          }<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    } catch (KeeperException ke) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      LOG.warn("Failed to check remaining tasks", ke);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      count = -1;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    return count;<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>   * It is possible for a task to stay in UNASSIGNED state indefinitely - say SplitLogManager wants<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * to resubmit a task. It forces the task to UNASSIGNED state but it dies before it could create<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * the RESCAN task node to signal the SplitLogWorkers to pick up the task. To prevent this<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * scenario the SplitLogManager resubmits all orphan and UNASSIGNED tasks at startup.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @param path<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private void handleUnassignedTask(String path) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      return;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    Task task = findOrCreateOrphanTask(path);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    if (task.isOrphan() &amp;&amp; (task.incarnation.get() == 0)) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      LOG.info("Resubmitting unassigned orphan task " + path);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      // ignore failure to resubmit. The timeout-monitor will handle it later<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      // albeit in a more crude fashion<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      resubmitTask(path, task, FORCE);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void deleteTask(String path) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    deleteNode(path, zkretries);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public boolean resubmitTask(String path, Task task, ResubmitDirective directive) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    // its ok if this thread misses the update to task.deleted. It will fail later<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    if (task.status != IN_PROGRESS) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      return false;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    int version;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    if (directive != FORCE) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      // We're going to resubmit:<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      // 1) immediately if the worker server is now marked as dead<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      // 2) after a configurable timeout if the server is not marked as dead but has still not<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      // finished the task. This allows to continue if the worker cannot actually handle it,<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      // for any reason.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      final long time = EnvironmentEdgeManager.currentTime() - task.last_update;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      final boolean alive =<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          details.getMaster().getServerManager() != null ? details.getMaster().getServerManager()<a name="line.181"></a>
-<span class="sourceLineNo">182</span>              .isServerOnline(task.cur_worker_name) : true;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      if (alive &amp;&amp; time &lt; timeout) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        LOG.trace("Skipping the resubmit of " + task.toString() + "  because the server "<a name="line.184"></a>
-<span class="sourceLineNo">185</span>            + task.cur_worker_name + " is not marked as dead, we waited for " + time<a name="line.185"></a>
-<span class="sourceLineNo">186</span>            + " while the timeout is " + timeout);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return false;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      if (task.unforcedResubmits.get() &gt;= resubmitThreshold) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        if (!task.resubmitThresholdReached) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          task.resubmitThresholdReached = true;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          SplitLogCounters.tot_mgr_resubmit_threshold_reached.increment();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>          LOG.info("Skipping resubmissions of task " + path + " because threshold "<a name="line.194"></a>
-<span class="sourceLineNo">195</span>              + resubmitThreshold + " reached");<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        return false;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // race with heartbeat() that might be changing last_version<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      version = task.last_version;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    } else {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      SplitLogCounters.tot_mgr_resubmit_force.increment();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      version = -1;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    LOG.info("Resubmitting task " + path);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    task.incarnation.incrementAndGet();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    boolean result = resubmit(path, version);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    if (!result) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return false;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    // don't count forced resubmits<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    if (directive != FORCE) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      task.unforcedResubmits.incrementAndGet();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    task.setUnassigned();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    rescan(Long.MAX_VALUE);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    SplitLogCounters.tot_mgr_resubmit.increment();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    return true;<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">125</span>      List&lt;String&gt; tasks = ZKUtil.listChildrenNoWatch(watcher,<a name="line.125"></a>
+<span class="sourceLineNo">126</span>              watcher.getZNodePaths().splitLogZNode);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      if (tasks != null) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        int listSize = tasks.size();<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        for (int i = 0; i &lt; listSize; i++) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>          if (!ZKSplitLog.isRescanNode(tasks.get(i))) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>            count++;<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>      }<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    } catch (KeeperException ke) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      LOG.warn("Failed to check remaining tasks", ke);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      count = -1;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    return count;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * It is possible for a task to stay in UNASSIGNED state indefinitely - say SplitLogManager wants<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * to resubmit a task. It forces the task to UNASSIGNED state but it dies before it could create<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * the RESCAN task node to signal the SplitLogWorkers to pick up the task. To prevent this<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * scenario the SplitLogManager resubmits all orphan and UNASSIGNED tasks at startup.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * @param path<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private void handleUnassignedTask(String path) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    Task task = findOrCreateOrphanTask(path);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    if (task.isOrphan() &amp;&amp; (task.incarnation.get() == 0)) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      LOG.info("Resubmitting unassigned orphan task " + path);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // ignore failure to resubmit. The timeout-monitor will handle it later<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // albeit in a more crude fashion<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      resubmitTask(path, task, FORCE);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void deleteTask(String path) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    deleteNode(path, zkretries);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  public boolean resubmitTask(String path, Task task, ResubmitDirective directive) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    // its ok if this thread misses the update to task.deleted. It will fail later<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    if (task.status != IN_PROGRESS) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      return false;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    int version;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    if (directive != FORCE) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      // We're going to resubmit:<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      // 1) immediately if the worker server is now marked as dead<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      // 2) after a configurable timeout if the server is not marked as dead but has still not<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      // finished the task. This allows to continue if the worker cannot actually handle it,<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      // for any reason.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      final long time = EnvironmentEdgeManager.currentTime() - task.last_update;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      final boolean alive =<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          details.getMaster().getServerManager() != null ? details.getMaster().getServerManager()<a name="line.182"></a>
+<span class="sourceLineNo">183</span>              .isServerOnline(task.cur_worker_name) : true;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      if (alive &amp;&amp; time &lt; timeout) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        LOG.trace("Skipping the resubmit of " + task.toString() + "  because the server "<a name="line.185"></a>
+<span class="sourceLineNo">186</span>            + task.cur_worker_name + " is not marked as dead, we waited for " + time<a name="line.186"></a>
+<span class="sourceLineNo">187</span>            + " while the timeout is " + timeout);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        return false;<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>      if (task.unforcedResubmits.get() &gt;= resubmitThreshold) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        if (!task.resubmitThresholdReached) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          task.resubmitThresholdReached = true;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          SplitLogCounters.tot_mgr_resubmit_threshold_reached.increment();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          LOG.info("Skipping resubmissions of task " + path + " because threshold "<a name="line.195"></a>
+<span class="sourceLineNo">196</span>              + resubmitThreshold + " reached");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        }<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>      // race with heartbeat() that might be changing last_version<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      version = task.last_version;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } else {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      SplitLogCounters.tot_mgr_resubmit_force.increment();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      version = -1;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    LOG.info("Resubmitting task " + path);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    task.incarnation.incrementAndGet();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    boolean result = resubmit(path, version);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    if (!result) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return false;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // don't count forced resubmits<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    if (directive != FORCE) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      task.unforcedResubmits.incrementAndGet();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    task.setUnassigned();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    rescan(Long.MAX_VALUE);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    SplitLogCounters.tot_mgr_resubmit.increment();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    return true;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
 <span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  @Override<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  public void checkTasks() {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    rescan(Long.MAX_VALUE);<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>   * signal the workers that a task was resubmitted by creating the RESCAN node.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  private void rescan(long retries) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    // The RESCAN node will be deleted almost immediately by the<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    // SplitLogManager as soon as it is created because it is being<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    // created in the DONE state. This behavior prevents a buildup<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    // of RESCAN nodes. But there is also a chance that a SplitLogWorker<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    // might miss the watch-trigger that creation of RESCAN node provides.<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    // Since the TimeoutMonitor will keep resubmitting UNASSIGNED tasks<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    // therefore this behavior is safe.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    SplitLogTask slt = new SplitLogTask.Done(this.details.getServerName());<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    this.watcher<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        .getRecoverableZooKeeper()<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        .getZooKeeper()<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        .create(ZKSplitLog.getRescanNode(watcher), slt.toByteArray(), Ids.OPEN_ACL_UNSAFE,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          CreateMode.EPHEMERAL_SEQUENTIAL, new CreateRescanAsyncCallback(), Long.valueOf(retries));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  @Override<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public void submitTask(String path) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    createNode(path, zkretries);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  }<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>  @Override<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void checkTaskStillAvailable(String path) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // A negative retry count will lead to ignoring all error processing.<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    this.watcher<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        .getRecoverableZooKeeper()<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        .getZooKeeper()<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        .getData(path, this.watcher, new GetDataAsyncCallback(),<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          Long.valueOf(-1) /* retry count */);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private void deleteNode(String path, Long retries) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    SplitLogCounters.tot_mgr_node_delete_queued.increment();<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // Once a task znode is ready for delete, that is it is in the TASK_DONE<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    // state, then no one should be writing to it anymore. That is no one<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    // will be updating the znode version any more.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        .delete(path, -1, new DeleteAsyncCallback(), retries);<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>  private void deleteNodeSuccess(String path) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (ignoreZKDeleteForTesting) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    Task task;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    task = details.getTasks().remove(path);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    if (task == null) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        SplitLogCounters.tot_mgr_rescan_deleted.increment();<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      SplitLogCounters.tot_mgr_missing_state_in_delete.increment();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      LOG.debug("Deleted task without in memory state " + path);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      return;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    synchronized (task) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      task.status = DELETED;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      task.notify();<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    SplitLogCounters.tot_mgr_task_deleted.increment();<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>  private void deleteNodeFailure(String path) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    LOG.info("Failed to delete node " + path + " and will retry soon.");<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  private void createRescanSuccess(String path) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    SplitLogCounters.tot_mgr_rescan.increment();<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    getDataSetWatch(path, zkretries);<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>  private void createRescanFailure() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    LOG.error(HBaseMarkers.FATAL, "logic failure, rescan failure must not happen");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>  /**<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * Helper function to check whether to abandon retries in ZooKeeper AsyncCallback functions<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * @param statusCode integer value of a ZooKeeper exception code<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * @param action description message about the retried action<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return true when need to abandon retries otherwise false<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  private boolean needAbandonRetries(int statusCode, String action) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    if (statusCode == KeeperException.Code.SESSIONEXPIRED.intValue()) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      LOG.error("ZK session expired. Master is expected to shut down. Abandoning retries for "<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          + "action=" + action);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return true;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return false;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private void createNode(String path, Long retry_count) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    SplitLogTask slt = new SplitLogTask.Unassigned(details.getServerName());<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    ZKUtil.asyncCreate(this.watcher, path, slt.toByteArray(), new CreateAsyncCallback(),<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      retry_count);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    SplitLogCounters.tot_mgr_node_create_queued.increment();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private void createNodeSuccess(String path) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    LOG.debug("Put up splitlog task at znode " + path);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    getDataSetWatch(path, zkretries);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  private void createNodeFailure(String path) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    // TODO the Manager should split the log locally instead of giving up<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    LOG.warn("Failed to create task node " + path);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    setDone(path, FAILURE);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  private void getDataSetWatch(String path, Long retry_count) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        .getData(path, this.watcher, new GetDataAsyncCallback(), retry_count);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  private void getDataSetWatchSuccess(String path, byte[] data, int version)<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      throws DeserializationException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    if (data == null) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      if (version == Integer.MIN_VALUE) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        // assume all done. The task znode suddenly disappeared.<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        setDone(path, SUCCESS);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        return;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      SplitLogCounters.tot_mgr_null_data.increment();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      LOG.error(HBaseMarkers.FATAL, "logic error - got null data " + path);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      setDone(path, FAILURE);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      return;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    data = ZKMetadata.removeMetaData(data);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    SplitLogTask slt = SplitLogTask.parseFrom(data);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    if (slt.isUnassigned()) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      LOG.debug("Task not yet acquired " + path + ", ver=" + version);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      handleUnassignedTask(path);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    } else if (slt.isOwned()) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      heartbeat(path, version, slt.getServerName());<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    } else if (slt.isResigned()) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      resubmitOrFail(path, FORCE);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    } else if (slt.isDone()) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      if (taskFinisher != null &amp;&amp; !ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        if (taskFinisher.finish(slt.getServerName(), ZKSplitLog.getFileName(path)) == Status.DONE) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          setDone(path, SUCCESS);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        } else {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          resubmitOrFail(path, CHECK);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      } else {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        setDone(path, SUCCESS);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } else if (slt.isErr()) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      resubmitOrFail(path, CHECK);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } else {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.error(HBaseMarkers.FATAL, "logic error - unexpected zk state for path = "<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          + path + " data = " + slt.toString());<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      setDone(path, FAILURE);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  private void resubmitOrFail(String path, ResubmitDirective directive) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    if (resubmitTask(path, findOrCreateOrphanTask(path), directive) == false) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      setDone(path, FAILURE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  private void getDataSetWatchFailure(String path) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    LOG.warn("Failed to set data watch " + path);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    setDone(path, FAILURE);<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>  private void setDone(String path, TerminationStatus status) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    Task task = details.getTasks().get(path);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    if (task == null) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      if (!ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        SplitLogCounters.tot_mgr_unacquired_orphan_done.increment();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.debug("Unacquired orphan task is done " + path);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    } else {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      synchronized (task) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        if (task.status == IN_PROGRESS) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          if (status == SUCCESS) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            SplitLogCounters.tot_mgr_log_split_success.increment();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            LOG.info("Done splitting " + path);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>          } else {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            SplitLogCounters.tot_mgr_log_split_err.increment();<a name="line.416"></a>
-<span class="sourceLineNo">417</span>            LOG.warn("Error splitting " + path);<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          }<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          task.status = status;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          if (task.batch != null) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>            synchronized (task.batch) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>              if (status == SUCCESS) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>                task.batch.done++;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>              } else {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>                task.batch.error++;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>              }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>              task.batch.notify();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>            }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    // delete the task node in zk. It's an async<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // call and no one is blocked waiting for this node to be deleted. All<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    // task names are unique (log.&lt;timestamp&gt;) there is no risk of deleting<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    // a future task.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    // if a deletion fails, TimeoutMonitor will retry the same deletion later<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    deleteNode(path, zkretries);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    return;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>  }<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  private Task findOrCreateOrphanTask(String path) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return computeIfAbsent(details.getTasks(), path, Task::new, () -&gt; {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      LOG.info("Creating orphan task " + path);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      SplitLogCounters.tot_mgr_orphan_task_acquired.increment();<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    });<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private void heartbeat(String path, int new_version, ServerName workerName) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Task task = findOrCreateOrphanTask(path);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (new_version != task.last_version) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      if (task.isUnassigned()) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        LOG.info("Task " + path + " acquired by " + workerName);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      task.heartbeat(EnvironmentEdgeManager.currentTime(), new_version, workerName);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      SplitLogCounters.tot_mgr_heartbeat.increment();<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    } else {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // duplicate heartbeats - heartbeats w/o zk node version<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      // changing - are possible. The timeout thread does<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // getDataSetWatch() just to check whether a node still<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // exists or not<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private void lookForOrphans() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    List&lt;String&gt; orphans;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    try {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      orphans = ZKUtil.listChildrenNoWatch(this.watcher, this.watcher.znodePaths.splitLogZNode);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      if (orphans == null) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        LOG.warn("Could not get children of " + this.watcher.znodePaths.splitLogZNode);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        return;<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    } catch (KeeperException e) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      LOG.warn("Could not get children of " + this.watcher.znodePaths.splitLogZNode + " "<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          + StringUtils.stringifyException(e));<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    int rescan_nodes = 0;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    int listSize = orphans.size();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    for (int i = 0; i &lt; listSize; i++) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      String path = orphans.get(i);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      String nodepath = ZNodePaths.joinZNode(watcher.znodePaths.splitLogZNode, path);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      if (ZKSplitLog.isRescanNode(watcher, nodepath)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        rescan_nodes++;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        LOG.debug("Found orphan rescan node " + path);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        LOG.info("Found orphan task " + path);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      getDataSetWatch(nodepath, zkretries);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    LOG.info("Found " + (orphans.size() - rescan_nodes) + " orphan tasks and " + rescan_nodes<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        + " rescan nodes");<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  @Override<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public void nodeDataChanged(String path) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Task task;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    task = details.getTasks().get(path);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (task != null || ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      if (task != null) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      getDataSetWatch(path, zkretries);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>  }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>  private boolean resubmit(String path, int version) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    try {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      // blocking zk call but this is done from the timeout thread<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      SplitLogTask slt =<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          new SplitLogTask.Unassigned(this.details.getServerName());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (ZKUtil.setData(this.watcher, path, slt.toByteArray(), version) == false) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        LOG.debug("Failed to resubmit task " + path + " version changed");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return false;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    } catch (NoNodeException e) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.warn("Failed to resubmit because znode doesn't exist " + path<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          + " task done (or forced done by removing the znode)");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      try {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        getDataSetWatchSuccess(path, null, Integer.MIN_VALUE);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      } catch (DeserializationException e1) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        LOG.debug("Failed to re-resubmit task " + path + " because of deserialization issue", e1);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        return false;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      return false;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    } catch (KeeperException.BadVersionException e) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      LOG.debug("Failed to resubmit task " + path + " version changed");<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return false;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    } catch (KeeperException e) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      SplitLogCounters.tot_mgr_resubmit_failed.increment();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      LOG.warn("Failed to resubmit " + path, e);<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      return false;<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    return true;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * {@link org.apache.hadoop.hbase.master.SplitLogManager} can use objects implementing this<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   * interface to finish off a partially done task by<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * {@link org.apache.hadoop.hbase.regionserver.SplitLogWorker}. This provides a<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * serialization point at the end of the task processing. Must be restartable and idempotent.<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   */<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public interface TaskFinisher {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>     * status that can be returned finish()<a name="line.547"></a>
-<span class="sourceLineNo">548</span>     */<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    enum Status {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span>       * task completed successfully<a name="line.551"></a>
-<span class="sourceLineNo">552</span>       */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      DONE(),<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>       * task completed with error<a name="line.555"></a>
-<span class="sourceLineNo">556</span>       */<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      ERR()<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    /**<a name="line.560"></a>
-<span class="sourceLineNo">561</span>     * finish the partially done task. workername provides clue to where the partial results of the<a name="line.561"></a>
-<span class="sourceLineNo">562</span>     * partially done tasks are present. taskname is the name of the task that was put up in<a name="line.562"></a>
-<span class="sourceLineNo">563</span>     * zookeeper.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>     * &lt;p&gt;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>     * @param workerName<a name="line.565"></a>
-<span class="sourceLineNo">566</span>     * @param taskname<a name="line.566"></a>
-<span class="sourceLineNo">567</span>     * @return DONE if task completed successfully, ERR otherwise<a name="line.567"></a>
-<span class="sourceLineNo">568</span>     */<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    Status finish(ServerName workerName, String taskname);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>  /**<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   * Asynchronous handler for zk create node results. Retries on failures.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   */<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  public class CreateAsyncCallback implements AsyncCallback.StringCallback {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    private final Logger LOG = LoggerFactory.getLogger(CreateAsyncCallback.class);<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    public void processResult(int rc, String path, Object ctx, String name) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      SplitLogCounters.tot_mgr_node_create_result.increment();<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      if (rc != 0) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        if (needAbandonRetries(rc, "Create znode " + path)) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>          createNodeFailure(path);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>          return;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>        if (rc == KeeperException.Code.NODEEXISTS.intValue()) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>          // What if there is a delete pending against this pre-existing<a name="line.587"></a>
-<span class="sourceLineNo">588</span>          // znode? Then this soon-to-be-deleted task znode must be in TASK_DONE<a name="line.588"></a>
-<span class="sourceLineNo">589</span>          // state. Only operations that will be carried out on this node by<a name="line.589"></a>
-<span class="sourceLineNo">590</span>          // this manager are get-znode-data, task-finisher and delete-znode.<a name="line.590"></a>
-<span class="sourceLineNo">591</span>          // And all code pieces correctly handle the case of suddenly<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          // disappearing task-znode.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>          LOG.debug("Found pre-existing znode " + path);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>          SplitLogCounters.tot_mgr_node_already_exists.increment();<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        } else {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>          Long retry_count = (Long) ctx;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          LOG.warn("Create rc=" + KeeperException.Code.get(rc) + " for " + path<a name="line.597"></a>
-<span class="sourceLineNo">598</span>              + " remaining retries=" + retry_count);<a name="line.598"></a>
-<span class="sourceLineNo">599</span>          if (retry_count == 0) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>            SplitLogCounters.tot_mgr_node_create_err.increment();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>            createNodeFailure(path);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>          } else {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            SplitLogCounters.tot_mgr_node_create_retry.increment();<a name="line.603"></a>
-<span class="sourceLineNo">604</span>            createNode(path, retry_count - 1);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>          return;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      createNodeSuccess(path);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Asynchronous handler for zk get-data-set-watch on node results. Retries on failures.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   */<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  public class GetDataAsyncCallback implements AsyncCallback.DataCallback {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    private final Logger LOG = LoggerFactory.getLogger(GetDataAsyncCallback.class);<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>    @Override<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    public void processResult(int rc, String path, Object ctx, byte[] data, Stat stat) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      SplitLogCounters.tot_mgr_get_data_result.increment();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      if (rc != 0) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        if (needAbandonRetries(rc, "GetData from znode " + path)) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          return;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        }<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        if (rc == KeeperException.Code.NONODE.intValue()) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>          SplitLogCounters.tot_mgr_get_data_nonode.increment();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>          LOG.warn("Task znode " + path + " vanished or not created yet.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>          // ignore since we should not end up in a case where there is in-memory task,<a name="line.629"></a>
-<span class="sourceLineNo">630</span>          // but no znode. The only case is between the time task is created in-memory<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          // and the znode is created. See HBASE-11217.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          return;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>        Long retry_count = (Long) ctx;<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>        if (retry_count &lt; 0) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          LOG.warn("Getdata rc=" + KeeperException.Code.get(rc) + " " + path<a name="line.637"></a>
-<span class="sourceLineNo">638</span>              + ". Ignoring error. No error handling. No retrying.");<a name="line.638"></a>
-<span class="sourceLineNo">639</span>          return;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        LOG.warn("Getdata rc=" + KeeperException.Code.get(rc) + " " + path<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            + " remaining retries=" + retry_count);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        if (retry_count == 0) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>          SplitLogCounters.tot_mgr_get_data_err.increment();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>          getDataSetWatchFailure(path);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        } else {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          SplitLogCounters.tot_mgr_get_data_retry.increment();<a name="line.647"></a>
-<span class="sourceLineNo">648</span>          getDataSetWatch(path, retry_count - 1);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        }<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        return;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      }<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      try {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        getDataSetWatchSuccess(path, data, stat.getVersion());<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      } catch (DeserializationException e) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        LOG.warn("Deserialization problem", e);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      return;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span>  /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * Asynchronous handler for zk delete node results. Retries on failures.<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  public class DeleteAsyncCallback implements AsyncCallback.VoidCallback {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    private final Logger LOG = LoggerFactory.getLogger(DeleteAsyncCallback.class);<a name="line.665"></a>
-<span class="sourceLineNo">666</span><a name="line.666"></a>
-<span class="sourceLineNo">667</span>    @Override<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    public void processResult(int rc, String path, Object ctx) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      SplitLogCounters.tot_mgr_node_delete_result.increment();<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      if (rc != 0) {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        if (needAbandonRetries(rc, "Delete znode " + path)) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>          details.getFailedDeletions().add(path);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          return;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
-<span class="sourceLineNo">675</span>        if (rc != KeeperException.Code.NONODE.intValue()) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>          SplitLogCounters.tot_mgr_node_delete_err.increment();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>          Long retry_count = (Long) ctx;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          LOG.warn("Delete rc=" + KeeperException.Code.get(rc) + " for " + path<a name="line.678"></a>
-<span class="sourceLineNo">679</span>              + " remaining retries=" + retry_count);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>          if (retry_count == 0) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>            LOG.warn("Delete failed " + path);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>            details.getFailedDeletions().add(path);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>            deleteNodeFailure(path);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          } else {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>            deleteNode(path, retry_count - 1);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>          }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          return;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>        } else {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>          LOG.info(path + " does not exist. Either was created but deleted behind our"<a name="line.689"></a>
-<span class="sourceLineNo">690</span>              + " back by another pending delete OR was deleted"<a name="line.690"></a>
-<span class="sourceLineNo">691</span>              + " in earlier retry rounds. zkretries = " + ctx);<a name="line.691"></a>
-<span class="sourceLineNo">692</span>        }<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      } else {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>        LOG.debug("Deleted " + path);<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      }<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      deleteNodeSuccess(path);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  }<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>  /**<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * Asynchronous handler for zk create RESCAN-node results. Retries on failures.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   * &lt;p&gt;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   * A RESCAN node is created using PERSISTENT_SEQUENTIAL flag. It is a signal for all the<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * {@link org.apache.hadoop.hbase.regionserver.SplitLogWorker}s to rescan for new tasks.<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   */<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  public class CreateRescanAsyncCallback implements AsyncCallback.StringCallback {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    private final Logger LOG = LoggerFactory.getLogger(CreateRescanAsyncCallback.class);<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>    @Override<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    public void processResult(int rc, String path, Object ctx, String name) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      if (rc != 0) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>        if (needAbandonRetries(rc, "CreateRescan znode " + path)) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>          return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        }<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        Long retry_count = (Long) ctx;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        LOG.warn("rc=" + KeeperException.Code.get(rc) + " for " + path + " remaining retries="<a name="line.716"></a>
-<span class="sourceLineNo">717</span>            + retry_count);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        if (retry_count == 0) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          createRescanFailure();<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        } else {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          rescan(retry_count - 1);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        return;<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      }<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      // path is the original arg, name is the actual name that was created<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      createRescanSuccess(name);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  @Override<a name="line.730"></a>
-<span class="sourceLineNo">731</span>  public void setDetails(SplitLogManagerDetails details) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    this.details = details;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>  @Override<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  public SplitLogManagerDetails getDetails() {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return details;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Temporary function that is used by unit tests only<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   */<a name="line.742"></a>
-<span class="sourceLineNo">743</span>  @VisibleForTesting<a name="line.743"></a>
-<span class="sourceLineNo">744</span>  public void setIgnoreDeleteForTesting(boolean b) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    ignoreZKDeleteForTesting = b;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span>}<a name="line.747"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  @Override<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  public void checkTasks() {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    rescan(Long.MAX_VALUE);<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>   * signal the workers that a task was resubmitted by creating the RESCAN node.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  private void rescan(long retries) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    // The RESCAN node will be deleted almost immediately by the<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    // SplitLogManager as soon as it is created because it is being<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    // created in the DONE state. This behavior prevents a buildup<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    // of RESCAN nodes. But there is also a chance that a SplitLogWorker<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    // might miss the watch-trigger that creation of RESCAN node provides.<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    // Since the TimeoutMonitor will keep resubmitting UNASSIGNED tasks<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    // therefore this behavior is safe.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    SplitLogTask slt = new SplitLogTask.Done(this.details.getServerName());<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    this.watcher<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        .getRecoverableZooKeeper()<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        .getZooKeeper()<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        .create(ZKSplitLog.getRescanNode(watcher), slt.toByteArray(), Ids.OPEN_ACL_UNSAFE,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          CreateMode.EPHEMERAL_SEQUENTIAL, new CreateRescanAsyncCallback(), Long.valueOf(retries));<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  @Override<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  public void submitTask(String path) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    createNode(path, zkretries);<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>  public void checkTaskStillAvailable(String path) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    // A negative retry count will lead to ignoring all error processing.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    this.watcher<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .getRecoverableZooKeeper()<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        .getZooKeeper()<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        .getData(path, this.watcher, new GetDataAsyncCallback(),<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          Long.valueOf(-1) /* retry count */);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<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>  private void deleteNode(String path, Long retries) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    SplitLogCounters.tot_mgr_node_delete_queued.increment();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    // Once a task znode is ready for delete, that is it is in the TASK_DONE<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    // state, then no one should be writing to it anymore. That is no one<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    // will be updating the znode version any more.<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        .delete(path, -1, new DeleteAsyncCallback(), retries);<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>  private void deleteNodeSuccess(String path) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    if (ignoreZKDeleteForTesting) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      return;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Task task;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    task = details.getTasks().remove(path);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    if (task == null) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        SplitLogCounters.tot_mgr_rescan_deleted.increment();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      SplitLogCounters.tot_mgr_missing_state_in_delete.increment();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      LOG.debug("Deleted task without in memory state " + path);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      return;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    synchronized (task) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      task.status = DELETED;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      task.notify();<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    SplitLogCounters.tot_mgr_task_deleted.increment();<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>  private void deleteNodeFailure(String path) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    LOG.info("Failed to delete node " + path + " and will retry soon.");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return;<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>  private void createRescanSuccess(String path) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    SplitLogCounters.tot_mgr_rescan.increment();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    getDataSetWatch(path, zkretries);<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>  private void createRescanFailure() {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    LOG.error(HBaseMarkers.FATAL, "logic failure, rescan failure must not happen");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  /**<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * Helper function to check whether to abandon retries in ZooKeeper AsyncCallback functions<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * @param statusCode integer value of a ZooKeeper exception code<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * @param action description message about the retried action<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * @return true when need to abandon retries otherwise false<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  private boolean needAbandonRetries(int statusCode, String action) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    if (statusCode == KeeperException.Code.SESSIONEXPIRED.intValue()) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      LOG.error("ZK session expired. Master is expected to shut down. Abandoning retries for "<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          + "action=" + action);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      return true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    return false;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  private void createNode(String path, Long retry_count) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    SplitLogTask slt = new SplitLogTask.Unassigned(details.getServerName());<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    ZKUtil.asyncCreate(this.watcher, path, slt.toByteArray(), new CreateAsyncCallback(),<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      retry_count);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    SplitLogCounters.tot_mgr_node_create_queued.increment();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    return;<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>  private void createNodeSuccess(String path) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    LOG.debug("Put up splitlog task at znode " + path);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    getDataSetWatch(path, zkretries);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private void createNodeFailure(String path) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    // TODO the Manager should split the log locally instead of giving up<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    LOG.warn("Failed to create task node " + path);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    setDone(path, FAILURE);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>  }<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>  private void getDataSetWatch(String path, Long retry_count) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        .getData(path, this.watcher, new GetDataAsyncCallback(), retry_count);<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>  private void getDataSetWatchSuccess(String path, byte[] data, int version)<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throws DeserializationException {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    if (data == null) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      if (version == Integer.MIN_VALUE) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        // assume all done. The task znode suddenly disappeared.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        setDone(path, SUCCESS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        return;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      SplitLogCounters.tot_mgr_null_data.increment();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      LOG.error(HBaseMarkers.FATAL, "logic error - got null data " + path);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      setDone(path, FAILURE);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      return;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    data = ZKMetadata.removeMetaData(data);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    SplitLogTask slt = SplitLogTask.parseFrom(data);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    if (slt.isUnassigned()) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      LOG.debug("Task not yet acquired " + path + ", ver=" + version);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      handleUnassignedTask(path);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    } else if (slt.isOwned()) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      heartbeat(path, version, slt.getServerName());<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    } else if (slt.isResigned()) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      resubmitOrFail(path, FORCE);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    } else if (slt.isDone()) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      if (taskFinisher != null &amp;&amp; !ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        if (taskFinisher.finish(slt.getServerName(), ZKSplitLog.getFileName(path)) == Status.DONE) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>          setDone(path, SUCCESS);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        } else {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          resubmitOrFail(path, CHECK);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      } else {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        setDone(path, SUCCESS);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } else if (slt.isErr()) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      resubmitOrFail(path, CHECK);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    } else {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      LOG.error(HBaseMarkers.FATAL, "logic error - unexpected zk state for path = "<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          + path + " data = " + slt.toString());<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      setDone(path, FAILURE);<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>  private void resubmitOrFail(String path, ResubmitDirective directive) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    if (resubmitTask(path, findOrCreateOrphanTask(path), directive) == false) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      setDone(path, FAILURE);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private void getDataSetWatchFailure(String path) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    LOG.warn("Failed to set data watch " + path);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    setDone(path, FAILURE);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>  private void setDone(String path, TerminationStatus status) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    Task task = details.getTasks().get(path);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (task == null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (!ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        SplitLogCounters.tot_mgr_unacquired_orphan_done.increment();<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        LOG.debug("Unacquired orphan task is done " + p

<TRUNCATED>

[20/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html
index 318b206..20b2226 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html
@@ -199,7 +199,7 @@
 <span class="sourceLineNo">191</span>   * @throws NotAllMetaRegionsOnlineException if a meta or root region is not online<a name="line.191"></a>
 <span class="sourceLineNo">192</span>   */<a name="line.192"></a>
 <span class="sourceLineNo">193</span>  public ServerName waitMetaRegionLocation(ZKWatcher zkw, long timeout)<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  throws InterruptedException, NotAllMetaRegionsOnlineException {<a name="line.194"></a>
+<span class="sourceLineNo">194</span>    throws InterruptedException, NotAllMetaRegionsOnlineException {<a name="line.194"></a>
 <span class="sourceLineNo">195</span>    return waitMetaRegionLocation(zkw, RegionInfo.DEFAULT_REPLICA_ID, timeout);<a name="line.195"></a>
 <span class="sourceLineNo">196</span>  }<a name="line.196"></a>
 <span class="sourceLineNo">197</span><a name="line.197"></a>
@@ -217,9 +217,9 @@
 <span class="sourceLineNo">209</span>   * @throws NotAllMetaRegionsOnlineException if a meta or root region is not online<a name="line.209"></a>
 <span class="sourceLineNo">210</span>   */<a name="line.210"></a>
 <span class="sourceLineNo">211</span>  public ServerName waitMetaRegionLocation(ZKWatcher zkw, int replicaId, long timeout)<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  throws InterruptedException, NotAllMetaRegionsOnlineException {<a name="line.212"></a>
+<span class="sourceLineNo">212</span>    throws InterruptedException, NotAllMetaRegionsOnlineException {<a name="line.212"></a>
 <span class="sourceLineNo">213</span>    try {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      if (ZKUtil.checkExists(zkw, zkw.znodePaths.baseZNode) == -1) {<a name="line.214"></a>
+<span class="sourceLineNo">214</span>      if (ZKUtil.checkExists(zkw, zkw.getZNodePaths().baseZNode) == -1) {<a name="line.214"></a>
 <span class="sourceLineNo">215</span>        String errorMsg = "Check the value configured in 'zookeeper.znode.parent'. "<a name="line.215"></a>
 <span class="sourceLineNo">216</span>            + "There could be a mismatch with the one configured in the master.";<a name="line.216"></a>
 <span class="sourceLineNo">217</span>        LOG.error(errorMsg);<a name="line.217"></a>
@@ -396,7 +396,7 @@
 <span class="sourceLineNo">388</span>      service = connection.getAdmin(sn);<a name="line.388"></a>
 <span class="sourceLineNo">389</span>    } catch (RetriesExhaustedException e) {<a name="line.389"></a>
 <span class="sourceLineNo">390</span>      if (e.getCause() != null &amp;&amp; e.getCause() instanceof ConnectException) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        // Catch this; presume it means the cached connection has gone bad.<a name="line.391"></a>
+<span class="sourceLineNo">391</span>        LOG.debug("Catch this; presume it means the cached connection has gone bad.");<a name="line.391"></a>
 <span class="sourceLineNo">392</span>      } else {<a name="line.392"></a>
 <span class="sourceLineNo">393</span>        throw e;<a name="line.393"></a>
 <span class="sourceLineNo">394</span>      }<a name="line.394"></a>
@@ -415,12 +415,12 @@
 <span class="sourceLineNo">407</span>    } catch (IOException ioe) {<a name="line.407"></a>
 <span class="sourceLineNo">408</span>      Throwable cause = ioe.getCause();<a name="line.408"></a>
 <span class="sourceLineNo">409</span>      if (ioe instanceof ConnectException) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        // Catch. Connect refused.<a name="line.410"></a>
+<span class="sourceLineNo">410</span>        LOG.debug("Catch. Connect refused.");<a name="line.410"></a>
 <span class="sourceLineNo">411</span>      } else if (cause != null &amp;&amp; cause instanceof EOFException) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        // Catch. Other end disconnected us.<a name="line.412"></a>
+<span class="sourceLineNo">412</span>        LOG.debug("Catch. Other end disconnected us.");<a name="line.412"></a>
 <span class="sourceLineNo">413</span>      } else if (cause != null &amp;&amp; cause.getMessage() != null &amp;&amp;<a name="line.413"></a>
 <span class="sourceLineNo">414</span>        cause.getMessage().toLowerCase(Locale.ROOT).contains("connection reset")) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // Catch. Connection reset.<a name="line.415"></a>
+<span class="sourceLineNo">415</span>        LOG.debug("Catch. Connection reset.");<a name="line.415"></a>
 <span class="sourceLineNo">416</span>      } else {<a name="line.416"></a>
 <span class="sourceLineNo">417</span>        throw ioe;<a name="line.417"></a>
 <span class="sourceLineNo">418</span>      }<a name="line.418"></a>
@@ -468,7 +468,7 @@
 <span class="sourceLineNo">460</span>    byte[] data = ProtobufUtil.prependPBMagic(pbrsr.toByteArray());<a name="line.460"></a>
 <span class="sourceLineNo">461</span>    try {<a name="line.461"></a>
 <span class="sourceLineNo">462</span>      ZKUtil.setData(zookeeper,<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          zookeeper.znodePaths.getZNodeForReplica(replicaId), data);<a name="line.463"></a>
+<span class="sourceLineNo">463</span>          zookeeper.getZNodePaths().getZNodeForReplica(replicaId), data);<a name="line.463"></a>
 <span class="sourceLineNo">464</span>    } catch(KeeperException.NoNodeException nne) {<a name="line.464"></a>
 <span class="sourceLineNo">465</span>      if (replicaId == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.465"></a>
 <span class="sourceLineNo">466</span>        LOG.debug("META region location doesn't exist, create it");<a name="line.466"></a>
@@ -476,181 +476,182 @@
 <span class="sourceLineNo">468</span>        LOG.debug("META region location doesn't exist for replicaId=" + replicaId +<a name="line.468"></a>
 <span class="sourceLineNo">469</span>            ", create it");<a name="line.469"></a>
 <span class="sourceLineNo">470</span>      }<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      ZKUtil.createAndWatch(zookeeper, zookeeper.znodePaths.getZNodeForReplica(replicaId), data);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span>  /**<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   * Load the meta region state from the meta server ZNode.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   */<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  public static RegionState getMetaRegionState(ZKWatcher zkw) throws KeeperException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    return getMetaRegionState(zkw, RegionInfo.DEFAULT_REPLICA_ID);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>  }<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>   * Load the meta region state from the meta server ZNode.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   *<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   * @param replicaId the ID of the replica<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * @return regionstate<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.488"></a>
-<span class="sourceLineNo">489</span>   */<a name="line.489"></a>
-<span class="sourceLineNo">490</span>  public static RegionState getMetaRegionState(ZKWatcher zkw, int replicaId)<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          throws KeeperException {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    RegionState.State state = RegionState.State.OPEN;<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    ServerName serverName = null;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    try {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      byte[] data = ZKUtil.getData(zkw, zkw.znodePaths.getZNodeForReplica(replicaId));<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      if (data != null &amp;&amp; data.length &gt; 0 &amp;&amp; ProtobufUtil.isPBMagicPrefix(data)) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        try {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>          int prefixLen = ProtobufUtil.lengthOfPBMagic();<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          ZooKeeperProtos.MetaRegionServer rl =<a name="line.499"></a>
-<span class="sourceLineNo">500</span>            ZooKeeperProtos.MetaRegionServer.PARSER.parseFrom(data, prefixLen,<a name="line.500"></a>
-<span class="sourceLineNo">501</span>                    data.length - prefixLen);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          if (rl.hasState()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>            state = RegionState.State.convert(rl.getState());<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>          HBaseProtos.ServerName sn = rl.getServer();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          serverName = ServerName.valueOf(<a name="line.506"></a>
-<span class="sourceLineNo">507</span>            sn.getHostName(), sn.getPort(), sn.getStartCode());<a name="line.507"></a>
-<span class="sourceLineNo">508</span>        } catch (InvalidProtocolBufferException e) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          throw new DeserializationException("Unable to parse meta region location");<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      } else {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        // old style of meta region location?<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        serverName = ProtobufUtil.parseServerNameFrom(data);<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      }<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    } catch (DeserializationException e) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      throw ZKUtil.convert(e);<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    } catch (InterruptedException e) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      Thread.currentThread().interrupt();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    if (serverName == null) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      state = RegionState.State.OFFLINE;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    return new RegionState(<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        RegionReplicaUtil.getRegionInfoForReplica(<a name="line.524"></a>
-<span class="sourceLineNo">525</span>            RegionInfoBuilder.FIRST_META_REGIONINFO, replicaId),<a name="line.525"></a>
-<span class="sourceLineNo">526</span>        state, serverName);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span>  /**<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * Deletes the location of &lt;code&gt;hbase:meta&lt;/code&gt; in ZooKeeper.<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * @param zookeeper zookeeper reference<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * @throws KeeperException unexpected zookeeper exception<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   */<a name="line.533"></a>
-<span class="sourceLineNo">534</span>  public void deleteMetaLocation(ZKWatcher zookeeper)<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  throws KeeperException {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    deleteMetaLocation(zookeeper, RegionInfo.DEFAULT_REPLICA_ID);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  public void deleteMetaLocation(ZKWatcher zookeeper, int replicaId)<a name="line.539"></a>
-<span class="sourceLineNo">540</span>  throws KeeperException {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    if (replicaId == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      LOG.info("Deleting hbase:meta region location in ZooKeeper");<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    } else {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      LOG.info("Deleting hbase:meta for " + replicaId + " region location in ZooKeeper");<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    try {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      // Just delete the node.  Don't need any watches.<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      ZKUtil.deleteNode(zookeeper, zookeeper.znodePaths.getZNodeForReplica(replicaId));<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    } catch(KeeperException.NoNodeException nne) {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      // Has already been deleted<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
-<span class="sourceLineNo">552</span>  }<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  /**<a name="line.553"></a>
-<span class="sourceLineNo">554</span>   * Wait until the primary meta region is available. Get the secondary locations as well but don't<a name="line.554"></a>
-<span class="sourceLineNo">555</span>   * block for those.<a name="line.555"></a>
-<span class="sourceLineNo">556</span>   *<a name="line.556"></a>
-<span class="sourceLineNo">557</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.557"></a>
-<span class="sourceLineNo">558</span>   * @param timeout maximum time to wait in millis<a name="line.558"></a>
-<span class="sourceLineNo">559</span>   * @param conf the {@link Configuration} to use<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @return ServerName or null if we timed out.<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * @throws InterruptedException if waiting for the socket operation fails<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   */<a name="line.562"></a>
-<span class="sourceLineNo">563</span>  public List&lt;ServerName&gt; blockUntilAvailable(final ZKWatcher zkw, final long timeout,<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      Configuration conf) throws InterruptedException {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    int numReplicasConfigured = 1;<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span>    List&lt;ServerName&gt; servers = new ArrayList&lt;&gt;();<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    // Make the blocking call first so that we do the wait to know<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    // the znodes are all in place or timeout.<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    ServerName server = blockUntilAvailable(zkw, timeout);<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>    if (server == null) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      return null;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span>    servers.add(server);<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    try {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      List&lt;String&gt; metaReplicaNodes = zkw.getMetaReplicaNodes();<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      numReplicasConfigured = metaReplicaNodes.size();<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    } catch (KeeperException e) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      LOG.warn("Got ZK exception " + e);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    for (int replicaId = 1; replicaId &lt; numReplicasConfigured; replicaId++) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      // return all replica locations for the meta<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      servers.add(getMetaRegionLocation(zkw, replicaId));<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    }<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    return servers;<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  }<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>  /**<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * Wait until the meta region is available and is not in transition.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * @param zkw zookeeper connection to use<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @param timeout maximum time to wait, in millis<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @return ServerName or null if we timed out.<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @throws InterruptedException if waiting for the socket operation fails<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public ServerName blockUntilAvailable(final ZKWatcher zkw, final long timeout)<a name="line.598"></a>
-<span class="sourceLineNo">599</span>          throws InterruptedException {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    return blockUntilAvailable(zkw, RegionInfo.DEFAULT_REPLICA_ID, timeout);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>  }<a name="line.601"></a>
-<span class="sourceLineNo">602</span><a name="line.602"></a>
-<span class="sourceLineNo">603</span>  /**<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * Wait until the meta region is available and is not in transition.<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   *<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and constants<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   * @param replicaId the ID of the replica<a name="line.607"></a>
-<span class="sourceLineNo">608</span>   * @param timeout maximum time to wait in millis<a name="line.608"></a>
-<span class="sourceLineNo">609</span>   * @return ServerName or null if we timed out.<a name="line.609"></a>
-<span class="sourceLineNo">610</span>   * @throws InterruptedException if waiting for the socket operation fails<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   */<a name="line.611"></a>
-<span class="sourceLineNo">612</span>  public ServerName blockUntilAvailable(final ZKWatcher zkw, int replicaId, final long timeout)<a name="line.612"></a>
-<span class="sourceLineNo">613</span>          throws InterruptedException {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    if (timeout &lt; 0) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      throw new IllegalArgumentException();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>    if (zkw == null) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      throw new IllegalArgumentException();<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    }<a name="line.620"></a>
-<span class="sourceLineNo">621</span><a name="line.621"></a>
-<span class="sourceLineNo">622</span>    long startTime = System.currentTimeMillis();<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    ServerName sn = null;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    while (true) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      sn = getMetaRegionLocation(zkw, replicaId);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      if (sn != null || (System.currentTimeMillis() - startTime)<a name="line.626"></a>
-<span class="sourceLineNo">627</span>          &gt; timeout - HConstants.SOCKET_RETRY_WAIT_MS) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        break;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      Thread.sleep(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    }<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    return sn;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>  }<a name="line.633"></a>
-<span class="sourceLineNo">634</span><a name="line.634"></a>
-<span class="sourceLineNo">635</span>  /**<a name="line.635"></a>
-<span class="sourceLineNo">636</span>   * Stop working.<a name="line.636"></a>
-<span class="sourceLineNo">637</span>   * Interrupts any ongoing waits.<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   */<a name="line.638"></a>
-<span class="sourceLineNo">639</span>  public void stop() {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    if (!stopped) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      LOG.debug("Stopping MetaTableLocator");<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      stopped = true;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    }<a name="line.643"></a>
-<span class="sourceLineNo">644</span>  }<a name="line.644"></a>
-<span class="sourceLineNo">645</span>}<a name="line.645"></a>
+<span class="sourceLineNo">471</span>      ZKUtil.createAndWatch(zookeeper, zookeeper.getZNodePaths().getZNodeForReplica(replicaId),<a name="line.471"></a>
+<span class="sourceLineNo">472</span>              data);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  }<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>  /**<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * Load the meta region state from the meta server ZNode.<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   */<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  public static RegionState getMetaRegionState(ZKWatcher zkw) throws KeeperException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    return getMetaRegionState(zkw, RegionInfo.DEFAULT_REPLICA_ID);<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>  /**<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   * Load the meta region state from the meta server ZNode.<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   *<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   * @param replicaId the ID of the replica<a name="line.487"></a>
+<span class="sourceLineNo">488</span>   * @return regionstate<a name="line.488"></a>
+<span class="sourceLineNo">489</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.489"></a>
+<span class="sourceLineNo">490</span>   */<a name="line.490"></a>
+<span class="sourceLineNo">491</span>  public static RegionState getMetaRegionState(ZKWatcher zkw, int replicaId)<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          throws KeeperException {<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    RegionState.State state = RegionState.State.OPEN;<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    ServerName serverName = null;<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    try {<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      byte[] data = ZKUtil.getData(zkw, zkw.getZNodePaths().getZNodeForReplica(replicaId));<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      if (data != null &amp;&amp; data.length &gt; 0 &amp;&amp; ProtobufUtil.isPBMagicPrefix(data)) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>        try {<a name="line.498"></a>
+<span class="sourceLineNo">499</span>          int prefixLen = ProtobufUtil.lengthOfPBMagic();<a name="line.499"></a>
+<span class="sourceLineNo">500</span>          ZooKeeperProtos.MetaRegionServer rl =<a name="line.500"></a>
+<span class="sourceLineNo">501</span>            ZooKeeperProtos.MetaRegionServer.PARSER.parseFrom(data, prefixLen,<a name="line.501"></a>
+<span class="sourceLineNo">502</span>                    data.length - prefixLen);<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          if (rl.hasState()) {<a name="line.503"></a>
+<span class="sourceLineNo">504</span>            state = RegionState.State.convert(rl.getState());<a name="line.504"></a>
+<span class="sourceLineNo">505</span>          }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>          HBaseProtos.ServerName sn = rl.getServer();<a name="line.506"></a>
+<span class="sourceLineNo">507</span>          serverName = ServerName.valueOf(<a name="line.507"></a>
+<span class="sourceLineNo">508</span>            sn.getHostName(), sn.getPort(), sn.getStartCode());<a name="line.508"></a>
+<span class="sourceLineNo">509</span>        } catch (InvalidProtocolBufferException e) {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>          throw new DeserializationException("Unable to parse meta region location");<a name="line.510"></a>
+<span class="sourceLineNo">511</span>        }<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      } else {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>        // old style of meta region location?<a name="line.513"></a>
+<span class="sourceLineNo">514</span>        serverName = ProtobufUtil.parseServerNameFrom(data);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      }<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    } catch (DeserializationException e) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      throw ZKUtil.convert(e);<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    } catch (InterruptedException e) {<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      Thread.currentThread().interrupt();<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    }<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    if (serverName == null) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      state = RegionState.State.OFFLINE;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    return new RegionState(<a name="line.524"></a>
+<span class="sourceLineNo">525</span>        RegionReplicaUtil.getRegionInfoForReplica(<a name="line.525"></a>
+<span class="sourceLineNo">526</span>            RegionInfoBuilder.FIRST_META_REGIONINFO, replicaId),<a name="line.526"></a>
+<span class="sourceLineNo">527</span>        state, serverName);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>  }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span>  /**<a name="line.530"></a>
+<span class="sourceLineNo">531</span>   * Deletes the location of &lt;code&gt;hbase:meta&lt;/code&gt; in ZooKeeper.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   * @param zookeeper zookeeper reference<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   * @throws KeeperException unexpected zookeeper exception<a name="line.533"></a>
+<span class="sourceLineNo">534</span>   */<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  public void deleteMetaLocation(ZKWatcher zookeeper)<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    throws KeeperException {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    deleteMetaLocation(zookeeper, RegionInfo.DEFAULT_REPLICA_ID);<a name="line.537"></a>
+<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
+<span class="sourceLineNo">539</span><a name="line.539"></a>
+<span class="sourceLineNo">540</span>  public void deleteMetaLocation(ZKWatcher zookeeper, int replicaId)<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    throws KeeperException {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    if (replicaId == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      LOG.info("Deleting hbase:meta region location in ZooKeeper");<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    } else {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>      LOG.info("Deleting hbase:meta for " + replicaId + " region location in ZooKeeper");<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    try {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      // Just delete the node.  Don't need any watches.<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      ZKUtil.deleteNode(zookeeper, zookeeper.getZNodePaths().getZNodeForReplica(replicaId));<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    } catch(KeeperException.NoNodeException nne) {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      // Has already been deleted<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    }<a name="line.552"></a>
+<span class="sourceLineNo">553</span>  }<a name="line.553"></a>
+<span class="sourceLineNo">554</span>  /**<a name="line.554"></a>
+<span class="sourceLineNo">555</span>   * Wait until the primary meta region is available. Get the secondary locations as well but don't<a name="line.555"></a>
+<span class="sourceLineNo">556</span>   * block for those.<a name="line.556"></a>
+<span class="sourceLineNo">557</span>   *<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * @param timeout maximum time to wait in millis<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   * @param conf the {@link Configuration} to use<a name="line.560"></a>
+<span class="sourceLineNo">561</span>   * @return ServerName or null if we timed out.<a name="line.561"></a>
+<span class="sourceLineNo">562</span>   * @throws InterruptedException if waiting for the socket operation fails<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   */<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  public List&lt;ServerName&gt; blockUntilAvailable(final ZKWatcher zkw, final long timeout,<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      Configuration conf) throws InterruptedException {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    int numReplicasConfigured = 1;<a name="line.566"></a>
+<span class="sourceLineNo">567</span><a name="line.567"></a>
+<span class="sourceLineNo">568</span>    List&lt;ServerName&gt; servers = new ArrayList&lt;&gt;();<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    // Make the blocking call first so that we do the wait to know<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    // the znodes are all in place or timeout.<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    ServerName server = blockUntilAvailable(zkw, timeout);<a name="line.571"></a>
+<span class="sourceLineNo">572</span><a name="line.572"></a>
+<span class="sourceLineNo">573</span>    if (server == null) {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      return null;<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    }<a name="line.575"></a>
+<span class="sourceLineNo">576</span><a name="line.576"></a>
+<span class="sourceLineNo">577</span>    servers.add(server);<a name="line.577"></a>
+<span class="sourceLineNo">578</span><a name="line.578"></a>
+<span class="sourceLineNo">579</span>    try {<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      List&lt;String&gt; metaReplicaNodes = zkw.getMetaReplicaNodes();<a name="line.580"></a>
+<span class="sourceLineNo">581</span>      numReplicasConfigured = metaReplicaNodes.size();<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    } catch (KeeperException e) {<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      LOG.warn("Got ZK exception " + e);<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    }<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    for (int replicaId = 1; replicaId &lt; numReplicasConfigured; replicaId++) {<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      // return all replica locations for the meta<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      servers.add(getMetaRegionLocation(zkw, replicaId));<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    }<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    return servers;<a name="line.589"></a>
+<span class="sourceLineNo">590</span>  }<a name="line.590"></a>
+<span class="sourceLineNo">591</span><a name="line.591"></a>
+<span class="sourceLineNo">592</span>  /**<a name="line.592"></a>
+<span class="sourceLineNo">593</span>   * Wait until the meta region is available and is not in transition.<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @param zkw zookeeper connection to use<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   * @param timeout maximum time to wait, in millis<a name="line.595"></a>
+<span class="sourceLineNo">596</span>   * @return ServerName or null if we timed out.<a name="line.596"></a>
+<span class="sourceLineNo">597</span>   * @throws InterruptedException if waiting for the socket operation fails<a name="line.597"></a>
+<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
+<span class="sourceLineNo">599</span>  public ServerName blockUntilAvailable(final ZKWatcher zkw, final long timeout)<a name="line.599"></a>
+<span class="sourceLineNo">600</span>          throws InterruptedException {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    return blockUntilAvailable(zkw, RegionInfo.DEFAULT_REPLICA_ID, timeout);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>  }<a name="line.602"></a>
+<span class="sourceLineNo">603</span><a name="line.603"></a>
+<span class="sourceLineNo">604</span>  /**<a name="line.604"></a>
+<span class="sourceLineNo">605</span>   * Wait until the meta region is available and is not in transition.<a name="line.605"></a>
+<span class="sourceLineNo">606</span>   *<a name="line.606"></a>
+<span class="sourceLineNo">607</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and constants<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * @param replicaId the ID of the replica<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * @param timeout maximum time to wait in millis<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   * @return ServerName or null if we timed out.<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * @throws InterruptedException if waiting for the socket operation fails<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   */<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  public ServerName blockUntilAvailable(final ZKWatcher zkw, int replicaId, final long timeout)<a name="line.613"></a>
+<span class="sourceLineNo">614</span>          throws InterruptedException {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    if (timeout &lt; 0) {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      throw new IllegalArgumentException();<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>    if (zkw == null) {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      throw new IllegalArgumentException();<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>    long startTime = System.currentTimeMillis();<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    ServerName sn = null;<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    while (true) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>      sn = getMetaRegionLocation(zkw, replicaId);<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      if (sn != null || (System.currentTimeMillis() - startTime)<a name="line.627"></a>
+<span class="sourceLineNo">628</span>          &gt; timeout - HConstants.SOCKET_RETRY_WAIT_MS) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        break;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      }<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      Thread.sleep(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    }<a name="line.632"></a>
+<span class="sourceLineNo">633</span>    return sn;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>  }<a name="line.634"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   * Stop working.<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * Interrupts any ongoing waits.<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public void stop() {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    if (!stopped) {<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      LOG.debug("Stopping MetaTableLocator");<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      stopped = true;<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    }<a name="line.644"></a>
+<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
+<span class="sourceLineNo">646</span>}<a name="line.646"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.html
index 2c902e9..fa4ddcb 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.html
@@ -93,7 +93,7 @@
 <span class="sourceLineNo">085</span><a name="line.85"></a>
 <span class="sourceLineNo">086</span>  public RecoverableZooKeeper(String quorumServers, int sessionTimeout,<a name="line.86"></a>
 <span class="sourceLineNo">087</span>      Watcher watcher, int maxRetries, int retryIntervalMillis, int maxSleepTime)<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  throws IOException {<a name="line.88"></a>
+<span class="sourceLineNo">088</span>    throws IOException {<a name="line.88"></a>
 <span class="sourceLineNo">089</span>    this(quorumServers, sessionTimeout, watcher, maxRetries, retryIntervalMillis, maxSleepTime,<a name="line.89"></a>
 <span class="sourceLineNo">090</span>        null);<a name="line.90"></a>
 <span class="sourceLineNo">091</span>  }<a name="line.91"></a>
@@ -102,7 +102,7 @@
 <span class="sourceLineNo">094</span>      justification="None. Its always been this way.")<a name="line.94"></a>
 <span class="sourceLineNo">095</span>  public RecoverableZooKeeper(String quorumServers, int sessionTimeout,<a name="line.95"></a>
 <span class="sourceLineNo">096</span>      Watcher watcher, int maxRetries, int retryIntervalMillis, int maxSleepTime, String identifier)<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  throws IOException {<a name="line.97"></a>
+<span class="sourceLineNo">097</span>    throws IOException {<a name="line.97"></a>
 <span class="sourceLineNo">098</span>    // TODO: Add support for zk 'chroot'; we don't add it to the quorumServers String as we should.<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    this.retryCounterFactory =<a name="line.99"></a>
 <span class="sourceLineNo">100</span>      new RetryCounterFactory(maxRetries+1, retryIntervalMillis, maxSleepTime);<a name="line.100"></a>
@@ -308,7 +308,7 @@
 <span class="sourceLineNo">300</span>   * @return List of children znodes<a name="line.300"></a>
 <span class="sourceLineNo">301</span>   */<a name="line.301"></a>
 <span class="sourceLineNo">302</span>  public List&lt;String&gt; getChildren(String path, boolean watch)<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  throws KeeperException, InterruptedException {<a name="line.303"></a>
+<span class="sourceLineNo">303</span>    throws KeeperException, InterruptedException {<a name="line.303"></a>
 <span class="sourceLineNo">304</span>    try (TraceScope scope = TraceUtil.createTrace("RecoverableZookeeper.getChildren")) {<a name="line.304"></a>
 <span class="sourceLineNo">305</span>      RetryCounter retryCounter = retryCounterFactory.create();<a name="line.305"></a>
 <span class="sourceLineNo">306</span>      while (true) {<a name="line.306"></a>
@@ -339,7 +339,7 @@
 <span class="sourceLineNo">331</span>   * @return Data<a name="line.331"></a>
 <span class="sourceLineNo">332</span>   */<a name="line.332"></a>
 <span class="sourceLineNo">333</span>  public byte[] getData(String path, Watcher watcher, Stat stat)<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  throws KeeperException, InterruptedException {<a name="line.334"></a>
+<span class="sourceLineNo">334</span>    throws KeeperException, InterruptedException {<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    try (TraceScope scope = TraceUtil.createTrace("RecoverableZookeeper.getData")) {<a name="line.335"></a>
 <span class="sourceLineNo">336</span>      RetryCounter retryCounter = retryCounterFactory.create();<a name="line.336"></a>
 <span class="sourceLineNo">337</span>      while (true) {<a name="line.337"></a>
@@ -370,7 +370,7 @@
 <span class="sourceLineNo">362</span>   * @return Data<a name="line.362"></a>
 <span class="sourceLineNo">363</span>   */<a name="line.363"></a>
 <span class="sourceLineNo">364</span>  public byte[] getData(String path, boolean watch, Stat stat)<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  throws KeeperException, InterruptedException {<a name="line.365"></a>
+<span class="sourceLineNo">365</span>    throws KeeperException, InterruptedException {<a name="line.365"></a>
 <span class="sourceLineNo">366</span>    try (TraceScope scope = TraceUtil.createTrace("RecoverableZookeeper.getData")) {<a name="line.366"></a>
 <span class="sourceLineNo">367</span>      RetryCounter retryCounter = retryCounterFactory.create();<a name="line.367"></a>
 <span class="sourceLineNo">368</span>      while (true) {<a name="line.368"></a>
@@ -403,7 +403,7 @@
 <span class="sourceLineNo">395</span>   * @return Stat instance<a name="line.395"></a>
 <span class="sourceLineNo">396</span>   */<a name="line.396"></a>
 <span class="sourceLineNo">397</span>  public Stat setData(String path, byte[] data, int version)<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  throws KeeperException, InterruptedException {<a name="line.398"></a>
+<span class="sourceLineNo">398</span>    throws KeeperException, InterruptedException {<a name="line.398"></a>
 <span class="sourceLineNo">399</span>    try (TraceScope scope = TraceUtil.createTrace("RecoverableZookeeper.setData")) {<a name="line.399"></a>
 <span class="sourceLineNo">400</span>      RetryCounter retryCounter = retryCounterFactory.create();<a name="line.400"></a>
 <span class="sourceLineNo">401</span>      byte[] newData = ZKMetadata.appendMetaData(id, data);<a name="line.401"></a>
@@ -453,7 +453,7 @@
 <span class="sourceLineNo">445</span>   * @return list of ACLs<a name="line.445"></a>
 <span class="sourceLineNo">446</span>   */<a name="line.446"></a>
 <span class="sourceLineNo">447</span>  public List&lt;ACL&gt; getAcl(String path, Stat stat)<a name="line.447"></a>
-<span class="sourceLineNo">448</span>  throws KeeperException, InterruptedException {<a name="line.448"></a>
+<span class="sourceLineNo">448</span>    throws KeeperException, InterruptedException {<a name="line.448"></a>
 <span class="sourceLineNo">449</span>    try (TraceScope scope = TraceUtil.createTrace("RecoverableZookeeper.getAcl")) {<a name="line.449"></a>
 <span class="sourceLineNo">450</span>      RetryCounter retryCounter = retryCounterFactory.create();<a name="line.450"></a>
 <span class="sourceLineNo">451</span>      while (true) {<a name="line.451"></a>
@@ -484,7 +484,7 @@
 <span class="sourceLineNo">476</span>   * @return list of ACLs<a name="line.476"></a>
 <span class="sourceLineNo">477</span>   */<a name="line.477"></a>
 <span class="sourceLineNo">478</span>  public Stat setAcl(String path, List&lt;ACL&gt; acls, int version)<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  throws KeeperException, InterruptedException {<a name="line.479"></a>
+<span class="sourceLineNo">479</span>    throws KeeperException, InterruptedException {<a name="line.479"></a>
 <span class="sourceLineNo">480</span>    try (TraceScope scope = TraceUtil.createTrace("RecoverableZookeeper.setAcl")) {<a name="line.480"></a>
 <span class="sourceLineNo">481</span>      RetryCounter retryCounter = retryCounterFactory.create();<a name="line.481"></a>
 <span class="sourceLineNo">482</span>      while (true) {<a name="line.482"></a>
@@ -527,7 +527,7 @@
 <span class="sourceLineNo">519</span>   */<a name="line.519"></a>
 <span class="sourceLineNo">520</span>  public String create(String path, byte[] data, List&lt;ACL&gt; acl,<a name="line.520"></a>
 <span class="sourceLineNo">521</span>      CreateMode createMode)<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  throws KeeperException, InterruptedException {<a name="line.522"></a>
+<span class="sourceLineNo">522</span>    throws KeeperException, InterruptedException {<a name="line.522"></a>
 <span class="sourceLineNo">523</span>    try (TraceScope scope = TraceUtil.createTrace("RecoverableZookeeper.create")) {<a name="line.523"></a>
 <span class="sourceLineNo">524</span>      byte[] newData = ZKMetadata.appendMetaData(id, data);<a name="line.524"></a>
 <span class="sourceLineNo">525</span>      switch (createMode) {<a name="line.525"></a>
@@ -595,7 +595,7 @@
 <span class="sourceLineNo">587</span><a name="line.587"></a>
 <span class="sourceLineNo">588</span>  private String createSequential(String path, byte[] data,<a name="line.588"></a>
 <span class="sourceLineNo">589</span>      List&lt;ACL&gt; acl, CreateMode createMode)<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  throws KeeperException, InterruptedException {<a name="line.590"></a>
+<span class="sourceLineNo">590</span>    throws KeeperException, InterruptedException {<a name="line.590"></a>
 <span class="sourceLineNo">591</span>    RetryCounter retryCounter = retryCounterFactory.create();<a name="line.591"></a>
 <span class="sourceLineNo">592</span>    boolean first = true;<a name="line.592"></a>
 <span class="sourceLineNo">593</span>    String newPath = path+this.identifier;<a name="line.593"></a>
@@ -661,7 +661,7 @@
 <span class="sourceLineNo">653</span>   * Run multiple operations in a transactional manner. Retry before throwing exception<a name="line.653"></a>
 <span class="sourceLineNo">654</span>   */<a name="line.654"></a>
 <span class="sourceLineNo">655</span>  public List&lt;OpResult&gt; multi(Iterable&lt;Op&gt; ops)<a name="line.655"></a>
-<span class="sourceLineNo">656</span>  throws KeeperException, InterruptedException {<a name="line.656"></a>
+<span class="sourceLineNo">656</span>    throws KeeperException, InterruptedException {<a name="line.656"></a>
 <span class="sourceLineNo">657</span>    try (TraceScope scope = TraceUtil.createTrace("RecoverableZookeeper.multi")) {<a name="line.657"></a>
 <span class="sourceLineNo">658</span>      RetryCounter retryCounter = retryCounterFactory.create();<a name="line.658"></a>
 <span class="sourceLineNo">659</span>      Iterable&lt;Op&gt; multiOps = prepareZKMulti(ops);<a name="line.659"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html
index 55fee4f..12aab7c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html
@@ -46,7 +46,7 @@
 <span class="sourceLineNo">038</span>  private static final Logger LOG = LoggerFactory.getLogger(RegionNormalizerTracker.class);<a name="line.38"></a>
 <span class="sourceLineNo">039</span><a name="line.39"></a>
 <span class="sourceLineNo">040</span>  public RegionNormalizerTracker(ZKWatcher watcher, Abortable abortable) {<a name="line.40"></a>
-<span class="sourceLineNo">041</span>    super(watcher, watcher.znodePaths.regionNormalizerZNode, abortable);<a name="line.41"></a>
+<span class="sourceLineNo">041</span>    super(watcher, watcher.getZNodePaths().regionNormalizerZNode, abortable);<a name="line.41"></a>
 <span class="sourceLineNo">042</span>  }<a name="line.42"></a>
 <span class="sourceLineNo">043</span><a name="line.43"></a>
 <span class="sourceLineNo">044</span>  /**<a name="line.44"></a>
@@ -73,11 +73,11 @@
 <span class="sourceLineNo">065</span>  public void setNormalizerOn(boolean normalizerOn) throws KeeperException {<a name="line.65"></a>
 <span class="sourceLineNo">066</span>    byte [] upData = toByteArray(normalizerOn);<a name="line.66"></a>
 <span class="sourceLineNo">067</span>    try {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      ZKUtil.setData(watcher, watcher.znodePaths.regionNormalizerZNode, upData);<a name="line.68"></a>
+<span class="sourceLineNo">068</span>      ZKUtil.setData(watcher, watcher.getZNodePaths().regionNormalizerZNode, upData);<a name="line.68"></a>
 <span class="sourceLineNo">069</span>    } catch(KeeperException.NoNodeException nne) {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      ZKUtil.createAndWatch(watcher, watcher.znodePaths.regionNormalizerZNode, upData);<a name="line.70"></a>
+<span class="sourceLineNo">070</span>      ZKUtil.createAndWatch(watcher, watcher.getZNodePaths().regionNormalizerZNode, upData);<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    }<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    super.nodeDataChanged(watcher.znodePaths.regionNormalizerZNode);<a name="line.72"></a>
+<span class="sourceLineNo">072</span>    super.nodeDataChanged(watcher.getZNodePaths().regionNormalizerZNode);<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>  private byte [] toByteArray(boolean isNormalizerOn) {<a name="line.75"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKAclReset.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKAclReset.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKAclReset.html
index d668549..8bd10e4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKAclReset.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKAclReset.html
@@ -78,8 +78,8 @@
 <span class="sourceLineNo">070</span>    ZKWatcher zkw = new ZKWatcher(conf, "ZKAclReset", null);<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    try {<a name="line.71"></a>
 <span class="sourceLineNo">072</span>      LOG.info((eraseAcls ? "Erase" : "Set") + " HBase ACLs for " +<a name="line.72"></a>
-<span class="sourceLineNo">073</span>                zkw.getQuorum() + " " + zkw.znodePaths.baseZNode);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>      resetAcls(zkw, zkw.znodePaths.baseZNode, eraseAcls);<a name="line.74"></a>
+<span class="sourceLineNo">073</span>                zkw.getQuorum() + " " + zkw.getZNodePaths().baseZNode);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      resetAcls(zkw, zkw.getZNodePaths().baseZNode, eraseAcls);<a name="line.74"></a>
 <span class="sourceLineNo">075</span>    } finally {<a name="line.75"></a>
 <span class="sourceLineNo">076</span>      zkw.close();<a name="line.76"></a>
 <span class="sourceLineNo">077</span>    }<a name="line.77"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKClusterId.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKClusterId.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKClusterId.html
index 1b28843..338d1bc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKClusterId.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKClusterId.html
@@ -69,11 +69,11 @@
 <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>  public static String readClusterIdZNode(ZKWatcher watcher)<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  throws KeeperException {<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    if (ZKUtil.checkExists(watcher, watcher.znodePaths.clusterIdZNode) != -1) {<a name="line.65"></a>
+<span class="sourceLineNo">064</span>    throws KeeperException {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    if (ZKUtil.checkExists(watcher, watcher.getZNodePaths().clusterIdZNode) != -1) {<a name="line.65"></a>
 <span class="sourceLineNo">066</span>      byte [] data;<a name="line.66"></a>
 <span class="sourceLineNo">067</span>      try {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>        data = ZKUtil.getData(watcher, watcher.znodePaths.clusterIdZNode);<a name="line.68"></a>
+<span class="sourceLineNo">068</span>        data = ZKUtil.getData(watcher, watcher.getZNodePaths().clusterIdZNode);<a name="line.68"></a>
 <span class="sourceLineNo">069</span>      } catch (InterruptedException e) {<a name="line.69"></a>
 <span class="sourceLineNo">070</span>        Thread.currentThread().interrupt();<a name="line.70"></a>
 <span class="sourceLineNo">071</span>        return null;<a name="line.71"></a>
@@ -91,7 +91,7 @@
 <span class="sourceLineNo">083</span><a name="line.83"></a>
 <span class="sourceLineNo">084</span>  public static void setClusterId(ZKWatcher watcher, ClusterId id)<a name="line.84"></a>
 <span class="sourceLineNo">085</span>      throws KeeperException {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    ZKUtil.createSetData(watcher, watcher.znodePaths.clusterIdZNode, id.toByteArray());<a name="line.86"></a>
+<span class="sourceLineNo">086</span>    ZKUtil.createSetData(watcher, watcher.getZNodePaths().clusterIdZNode, id.toByteArray());<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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKMainServer.HACK_UNTIL_ZOOKEEPER_1897_ZooKeeperMain.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKMainServer.HACK_UNTIL_ZOOKEEPER_1897_ZooKeeperMain.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKMainServer.HACK_UNTIL_ZOOKEEPER_1897_ZooKeeperMain.html
index 85096e8..6f608cf 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKMainServer.HACK_UNTIL_ZOOKEEPER_1897_ZooKeeperMain.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKMainServer.HACK_UNTIL_ZOOKEEPER_1897_ZooKeeperMain.html
@@ -54,7 +54,7 @@
 <span class="sourceLineNo">046</span>   */<a name="line.46"></a>
 <span class="sourceLineNo">047</span>  private static class HACK_UNTIL_ZOOKEEPER_1897_ZooKeeperMain extends ZooKeeperMain {<a name="line.47"></a>
 <span class="sourceLineNo">048</span>    public HACK_UNTIL_ZOOKEEPER_1897_ZooKeeperMain(String[] args)<a name="line.48"></a>
-<span class="sourceLineNo">049</span>    throws IOException, InterruptedException {<a name="line.49"></a>
+<span class="sourceLineNo">049</span>      throws IOException, InterruptedException {<a name="line.49"></a>
 <span class="sourceLineNo">050</span>      super(args);<a name="line.50"></a>
 <span class="sourceLineNo">051</span>      // Make sure we are connected before we proceed. Can take a while on some systems. If we<a name="line.51"></a>
 <span class="sourceLineNo">052</span>      // run the command without being connected, we get ConnectionLoss KeeperErrorConnection...<a name="line.52"></a>
@@ -65,9 +65,9 @@
 <span class="sourceLineNo">057</span><a name="line.57"></a>
 <span class="sourceLineNo">058</span>    /**<a name="line.58"></a>
 <span class="sourceLineNo">059</span>     * Run the command-line args passed.  Calls System.exit when done.<a name="line.59"></a>
-<span class="sourceLineNo">060</span>     * @throws KeeperException<a name="line.60"></a>
-<span class="sourceLineNo">061</span>     * @throws IOException<a name="line.61"></a>
-<span class="sourceLineNo">062</span>     * @throws InterruptedException<a name="line.62"></a>
+<span class="sourceLineNo">060</span>     * @throws KeeperException if an unexpected ZooKeeper exception happens<a name="line.60"></a>
+<span class="sourceLineNo">061</span>     * @throws IOException in case of a network failure<a name="line.61"></a>
+<span class="sourceLineNo">062</span>     * @throws InterruptedException if the ZooKeeper client closes<a name="line.62"></a>
 <span class="sourceLineNo">063</span>     */<a name="line.63"></a>
 <span class="sourceLineNo">064</span>    void runCmdLine() throws KeeperException, IOException, InterruptedException {<a name="line.64"></a>
 <span class="sourceLineNo">065</span>      processCmd(this.cl);<a name="line.65"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKMainServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKMainServer.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKMainServer.html
index 85096e8..6f608cf 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKMainServer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKMainServer.html
@@ -54,7 +54,7 @@
 <span class="sourceLineNo">046</span>   */<a name="line.46"></a>
 <span class="sourceLineNo">047</span>  private static class HACK_UNTIL_ZOOKEEPER_1897_ZooKeeperMain extends ZooKeeperMain {<a name="line.47"></a>
 <span class="sourceLineNo">048</span>    public HACK_UNTIL_ZOOKEEPER_1897_ZooKeeperMain(String[] args)<a name="line.48"></a>
-<span class="sourceLineNo">049</span>    throws IOException, InterruptedException {<a name="line.49"></a>
+<span class="sourceLineNo">049</span>      throws IOException, InterruptedException {<a name="line.49"></a>
 <span class="sourceLineNo">050</span>      super(args);<a name="line.50"></a>
 <span class="sourceLineNo">051</span>      // Make sure we are connected before we proceed. Can take a while on some systems. If we<a name="line.51"></a>
 <span class="sourceLineNo">052</span>      // run the command without being connected, we get ConnectionLoss KeeperErrorConnection...<a name="line.52"></a>
@@ -65,9 +65,9 @@
 <span class="sourceLineNo">057</span><a name="line.57"></a>
 <span class="sourceLineNo">058</span>    /**<a name="line.58"></a>
 <span class="sourceLineNo">059</span>     * Run the command-line args passed.  Calls System.exit when done.<a name="line.59"></a>
-<span class="sourceLineNo">060</span>     * @throws KeeperException<a name="line.60"></a>
-<span class="sourceLineNo">061</span>     * @throws IOException<a name="line.61"></a>
-<span class="sourceLineNo">062</span>     * @throws InterruptedException<a name="line.62"></a>
+<span class="sourceLineNo">060</span>     * @throws KeeperException if an unexpected ZooKeeper exception happens<a name="line.60"></a>
+<span class="sourceLineNo">061</span>     * @throws IOException in case of a network failure<a name="line.61"></a>
+<span class="sourceLineNo">062</span>     * @throws InterruptedException if the ZooKeeper client closes<a name="line.62"></a>
 <span class="sourceLineNo">063</span>     */<a name="line.63"></a>
 <span class="sourceLineNo">064</span>    void runCmdLine() throws KeeperException, IOException, InterruptedException {<a name="line.64"></a>
 <span class="sourceLineNo">065</span>      processCmd(this.cl);<a name="line.65"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.html
index 3a17afb..be09113 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.html
@@ -110,7 +110,7 @@
 <span class="sourceLineNo">102</span>   * @throws InterruptedException if the waiting thread is interrupted<a name="line.102"></a>
 <span class="sourceLineNo">103</span>   */<a name="line.103"></a>
 <span class="sourceLineNo">104</span>  public synchronized byte [] blockUntilAvailable()<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  throws InterruptedException {<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    throws InterruptedException {<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    return blockUntilAvailable(0, false);<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>
@@ -246,11 +246,11 @@
 <span class="sourceLineNo">238</span>   */<a name="line.238"></a>
 <span class="sourceLineNo">239</span>  public boolean checkIfBaseNodeAvailable() {<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    try {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      if (ZKUtil.checkExists(watcher, watcher.znodePaths.baseZNode) == -1) {<a name="line.241"></a>
+<span class="sourceLineNo">241</span>      if (ZKUtil.checkExists(watcher, watcher.getZNodePaths().baseZNode) == -1) {<a name="line.241"></a>
 <span class="sourceLineNo">242</span>        return false;<a name="line.242"></a>
 <span class="sourceLineNo">243</span>      }<a name="line.243"></a>
 <span class="sourceLineNo">244</span>    } catch (KeeperException e) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      abortable.abort("Exception while checking if basenode (" + watcher.znodePaths.baseZNode<a name="line.245"></a>
+<span class="sourceLineNo">245</span>      abortable.abort("Exception while checking if basenode (" + watcher.getZNodePaths().baseZNode<a name="line.245"></a>
 <span class="sourceLineNo">246</span>          + ") exists in ZooKeeper.",<a name="line.246"></a>
 <span class="sourceLineNo">247</span>        e);<a name="line.247"></a>
 <span class="sourceLineNo">248</span>    }<a name="line.248"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.html
index 5f45988..a354fbe 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.html
@@ -55,7 +55,7 @@
 <span class="sourceLineNo">047</span>   * @param filename log file name (only the basename)<a name="line.47"></a>
 <span class="sourceLineNo">048</span>   */<a name="line.48"></a>
 <span class="sourceLineNo">049</span>  public static String getEncodedNodeName(ZKWatcher zkw, String filename) {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    return ZNodePaths.joinZNode(zkw.znodePaths.splitLogZNode, encode(filename));<a name="line.50"></a>
+<span class="sourceLineNo">050</span>    return ZNodePaths.joinZNode(zkw.getZNodePaths().splitLogZNode, encode(filename));<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  }<a name="line.51"></a>
 <span class="sourceLineNo">052</span><a name="line.52"></a>
 <span class="sourceLineNo">053</span>  public static String getFileName(String node) {<a name="line.53"></a>
@@ -80,7 +80,7 @@
 <span class="sourceLineNo">072</span>  }<a name="line.72"></a>
 <span class="sourceLineNo">073</span><a name="line.73"></a>
 <span class="sourceLineNo">074</span>  public static String getRescanNode(ZKWatcher zkw) {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    return ZNodePaths.joinZNode(zkw.znodePaths.splitLogZNode, "RESCAN");<a name="line.75"></a>
+<span class="sourceLineNo">075</span>    return ZNodePaths.joinZNode(zkw.getZNodePaths().splitLogZNode, "RESCAN");<a name="line.75"></a>
 <span class="sourceLineNo">076</span>  }<a name="line.76"></a>
 <span class="sourceLineNo">077</span><a name="line.77"></a>
 <span class="sourceLineNo">078</span>  /**<a name="line.78"></a>


[11/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 3862d04..d03da2f 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -5737,7 +5737,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/multiwal/TestReplicationSyncUpToolWithMultipleWAL.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.multiwal.<a href="org/apache/hadoop/hbase/replication/multiwal/TestReplicationSyncUpToolWithMultipleWAL.html" title="class in org.apache.hadoop.hbase.replication.multiwal">TestReplicationSyncUpToolWithMultipleWAL</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceFactory.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceFactory.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestMetricsReplicationSourceFactory</a></dt>
 <dd>&nbsp;</dd>
@@ -8182,7 +8182,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithTwoDifferentZKClusters.html#conf1">conf1</a></span> - Static variable in class org.apache.hadoop.hbase.client.replication.<a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithTwoDifferentZKClusters.html" title="class in org.apache.hadoop.hbase.client.replication">TestReplicationAdminWithTwoDifferentZKClusters</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#conf1">conf1</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#conf1">conf1</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestMultiSlaveReplication.html#conf1">conf1</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestMultiSlaveReplication.html" title="class in org.apache.hadoop.hbase.replication">TestMultiSlaveReplication</a></dt>
 <dd>&nbsp;</dd>
@@ -8200,7 +8200,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncReplicationAdminApiWithClusters.html#conf2">conf2</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncReplicationAdminApiWithClusters.html" title="class in org.apache.hadoop.hbase.client">TestAsyncReplicationAdminApiWithClusters</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#conf2">conf2</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#conf2">conf2</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestMultiSlaveReplication.html#conf2">conf2</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestMultiSlaveReplication.html" title="class in org.apache.hadoop.hbase.replication">TestMultiSlaveReplication</a></dt>
 <dd>&nbsp;</dd>
@@ -14001,7 +14001,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithTwoDifferentZKClusters.html#famName">famName</a></span> - Static variable in class org.apache.hadoop.hbase.client.replication.<a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithTwoDifferentZKClusters.html" title="class in org.apache.hadoop.hbase.client.replication">TestReplicationAdminWithTwoDifferentZKClusters</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#famName">famName</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#famName">famName</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestMasterReplication.html#famName">famName</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestMasterReplication.html" title="class in org.apache.hadoop.hbase.replication">TestMasterReplication</a></dt>
 <dd>&nbsp;</dd>
@@ -17841,8 +17841,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestAtomicOperation.MockHRegion.html#getRowLockInternal-byte:A-boolean-org.apache.hadoop.hbase.regionserver.Region.RowLock-">getRowLockInternal(byte[], boolean, Region.RowLock)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestAtomicOperation.MockHRegion.html" title="class in org.apache.hadoop.hbase.regionserver">TestAtomicOperation.MockHRegion</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#getRowNumbers-java.util.List-">getRowNumbers(List&lt;Cell&gt;)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestCellUtil.NonExtendedCell.html#getRowOffset--">getRowOffset()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestCellUtil.NonExtendedCell.html" title="class in org.apache.hadoop.hbase">TestCellUtil.NonExtendedCell</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestCellUtil.TestCell.html#getRowOffset--">getRowOffset()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestCellUtil.TestCell.html" title="class in org.apache.hadoop.hbase">TestCellUtil.TestCell</a></dt>
@@ -23528,7 +23526,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/master/TestTableCFsUpdater.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.replication.master.<a href="org/apache/hadoop/hbase/replication/master/TestTableCFsUpdater.html" title="class in org.apache.hadoop.hbase.replication.master">TestTableCFsUpdater</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpoint.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRegionReplicaReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
@@ -26352,7 +26350,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/master/TestTableCFsUpdater.html#name">name</a></span> - Variable in class org.apache.hadoop.hbase.replication.master.<a href="org/apache/hadoop/hbase/replication/master/TestTableCFsUpdater.html" title="class in org.apache.hadoop.hbase.replication.master">TestTableCFsUpdater</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#name">name</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#name">name</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpoint.html#name">name</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRegionReplicaReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
@@ -27457,6 +27455,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/test/IntegrationTestReplication.html#numNodes">numNodes</a></span> - Variable in class org.apache.hadoop.hbase.test.<a href="org/apache/hadoop/hbase/test/IntegrationTestReplication.html" title="class in org.apache.hadoop.hbase.test">IntegrationTestReplication</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#numOfPeer">numOfPeer</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/TestWALSplit.ZombieLastLogWriterRegionServer.html#numOfWriters">numOfWriters</a></span> - Variable in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/TestWALSplit.ZombieLastLogWriterRegionServer.html" title="class in org.apache.hadoop.hbase.wal">TestWALSplit.ZombieLastLogWriterRegionServer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.html#numOps">numOps</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureSchedulerPerformanceEvaluation</a></dt>
@@ -32403,6 +32403,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html#replication">replication</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSourceManager</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#REPLICATION_SOURCE_QUOTA">REPLICATION_SOURCE_QUOTA</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationWithTags.html#replicationAdmin">replicationAdmin</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationWithTags.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationWithTags</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSink.html#replicationClusterId">replicationClusterId</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSink</a></dt>
@@ -33283,7 +33285,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/TestDurability.html#ROW">ROW</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/TestDurability.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestDurability</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#ROW">ROW</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#ROW">ROW</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpointNoMaster.html#row">row</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpointNoMaster.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRegionReplicaReplicationEndpointNoMaster</a></dt>
 <dd>&nbsp;</dd>
@@ -33681,7 +33683,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#ROWS">ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#ROWS">ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#ROWS">ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/PerformanceEvaluation.PeInputSplit.html#rows">rows</a></span> - Variable in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/PerformanceEvaluation.PeInputSplit.html" title="class in org.apache.hadoop.hbase.rest">PerformanceEvaluation.PeInputSplit</a></dt>
 <dd>&nbsp;</dd>
@@ -37046,7 +37048,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/multiwal/TestReplicationSyncUpToolWithMultipleWAL.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.multiwal.<a href="org/apache/hadoop/hbase/replication/multiwal/TestReplicationSyncUpToolWithMultipleWAL.html" title="class in org.apache.hadoop.hbase.replication.multiwal">TestReplicationSyncUpToolWithMultipleWAL</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource</a></dt>
 <dd>&nbsp;</dd>
@@ -41799,7 +41801,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/master/TestTableCFsUpdater.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.master.<a href="org/apache/hadoop/hbase/replication/master/TestTableCFsUpdater.html" title="class in org.apache.hadoop.hbase.replication.master">TestTableCFsUpdater</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource</a></dt>
 <dd>&nbsp;</dd>
@@ -50403,9 +50405,9 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/TestGlobalQuotaSettingsImpl.html#TestGlobalQuotaSettingsImpl--">TestGlobalQuotaSettingsImpl()</a></span> - Constructor for class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestGlobalQuotaSettingsImpl.html" title="class in org.apache.hadoop.hbase.quotas">TestGlobalQuotaSettingsImpl</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestGlobalThrottler</span></a> - Class in <a href="org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></dt>
+<dt><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestGlobalReplicationThrottler</span></a> - Class in <a href="org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#TestGlobalThrottler--">TestGlobalThrottler()</a></span> - Constructor for class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#TestGlobalReplicationThrottler--">TestGlobalReplicationThrottler()</a></span> - Constructor for class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAccessController.html#testGrantRevoke--">testGrantRevoke()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAccessController.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController</a></dt>
 <dd>&nbsp;</dd>
@@ -56225,7 +56227,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html#testQueueSmallBlockEdgeCase--">testQueueSmallBlockEdgeCase()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html" title="class in org.apache.hadoop.hbase.io.hfile">TestCachedBlockQueue</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#testQuota--">testQuota()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#testQuota--">testQuota()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/quotas/TestQuotaAdmin.html" title="class in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">TestQuotaAdmin</span></a> - Class in <a href="org/apache/hadoop/hbase/quotas/package-summary.html">org.apache.hadoop.hbase.quotas</a></dt>
 <dd>
@@ -56245,7 +56247,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/TestSpaceLimitSettings.html#testQuotaMerging--">testQuotaMerging()</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestSpaceLimitSettings.html" title="class in org.apache.hadoop.hbase.quotas">TestSpaceLimitSettings</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#testQuotaNonZero">testQuotaNonZero</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#testQuotaNonZero">testQuotaNonZero</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/quotas/TestQuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">TestQuotaObserverChore</span></a> - Class in <a href="org/apache/hadoop/hbase/quotas/package-summary.html">org.apache.hadoop.hbase.quotas</a></dt>
 <dd>
@@ -56265,7 +56267,7 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/TestQuotaObserverChoreWithMiniCluster.html#TestQuotaObserverChoreWithMiniCluster--">TestQuotaObserverChoreWithMiniCluster()</a></span> - Constructor for class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestQuotaObserverChoreWithMiniCluster.html" title="class in org.apache.hadoop.hbase.quotas">TestQuotaObserverChoreWithMiniCluster</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#testQuotaPass">testQuotaPass</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#testQuotaPass">testQuotaPass</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncQuotaAdminApi.html#testQuotaRetrieverFilter--">testQuotaRetrieverFilter()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncQuotaAdminApi.html" title="class in org.apache.hadoop.hbase.client">TestAsyncQuotaAdminApi</a></dt>
 <dd>&nbsp;</dd>
@@ -65421,7 +65423,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithTwoDifferentZKClusters.html#utility1">utility1</a></span> - Static variable in class org.apache.hadoop.hbase.client.replication.<a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithTwoDifferentZKClusters.html" title="class in org.apache.hadoop.hbase.client.replication">TestReplicationAdminWithTwoDifferentZKClusters</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#utility1">utility1</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#utility1">utility1</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestMultiSlaveReplication.html#utility1">utility1</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestMultiSlaveReplication.html" title="class in org.apache.hadoop.hbase.replication">TestMultiSlaveReplication</a></dt>
 <dd>&nbsp;</dd>
@@ -65433,7 +65435,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithTwoDifferentZKClusters.html#utility2">utility2</a></span> - Static variable in class org.apache.hadoop.hbase.client.replication.<a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithTwoDifferentZKClusters.html" title="class in org.apache.hadoop.hbase.client.replication">TestReplicationAdminWithTwoDifferentZKClusters</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#utility2">utility2</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#utility2">utility2</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestMultiSlaveReplication.html#utility2">utility2</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestMultiSlaveReplication.html" title="class in org.apache.hadoop.hbase.replication">TestMultiSlaveReplication</a></dt>
 <dd>&nbsp;</dd>
@@ -65695,7 +65697,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestLogRolling.html#value">value</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestLogRolling.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractTestLogRolling</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#VALUE">VALUE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#VALUE">VALUE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/model/TestCellModel.html#VALUE">VALUE</a></span> - Static variable in class org.apache.hadoop.hbase.rest.model.<a href="org/apache/hadoop/hbase/rest/model/TestCellModel.html" title="class in org.apache.hadoop.hbase.rest.model">TestCellModel</a></dt>
 <dd>&nbsp;</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
index 9d92984..4acdf39 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
@@ -5307,23 +5307,23 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestGlobalThrottler.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestReplicationSource.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestReplicationSource.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestReplicationSinkManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicationSinkManager.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestReplicationSinkManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicationSinkManager.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestWALEntryStream.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestWALEntryStream.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestWALEntryStream.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestWALEntryStream.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestReplicationSink.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicationSink.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestReplicationSink.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicationSink.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestGlobalReplicationThrottler.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
index 3cc7e76..4255cfa 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
@@ -3382,11 +3382,11 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestGlobalThrottler.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#utility1">utility1</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestGlobalReplicationThrottler.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#utility1">utility1</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestGlobalThrottler.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#utility2">utility2</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestGlobalReplicationThrottler.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#utility2">utility2</a></span></code>&nbsp;</td>
 </tr>
 </tbody>
 </table>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html
index 49d6ed4..67b6c30 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.html#line.261">TestActiveMasterManager.DummyMaster</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.html#line.262">TestActiveMasterManager.DummyMaster</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.Server</pre>
 <div class="block">Dummy Master Implementation.</div>
@@ -281,7 +281,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>stopped</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.262">stopped</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.263">stopped</a></pre>
 </li>
 </ul>
 <a name="clusterStatusTracker">
@@ -290,7 +290,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterStatusTracker</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.zookeeper.ClusterStatusTracker <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.263">clusterStatusTracker</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.zookeeper.ClusterStatusTracker <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.264">clusterStatusTracker</a></pre>
 </li>
 </ul>
 <a name="activeMasterManager">
@@ -299,7 +299,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>activeMasterManager</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.master.ActiveMasterManager <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.264">activeMasterManager</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.master.ActiveMasterManager <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.265">activeMasterManager</a></pre>
 </li>
 </ul>
 </li>
@@ -316,7 +316,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DummyMaster</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.266">DummyMaster</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;zk,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.267">DummyMaster</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;zk,
                    org.apache.hadoop.hbase.ServerName&nbsp;master)</pre>
 </li>
 </ul>
@@ -334,7 +334,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.277">abort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.278">abort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -348,7 +348,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>isAborted</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.280">isAborted</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.281">isAborted</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>isAborted</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Abortable</code></dd>
@@ -361,7 +361,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.285">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.286">getConfiguration</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getConfiguration</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -374,7 +374,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getZooKeeper</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.290">getZooKeeper</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.291">getZooKeeper</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getZooKeeper</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -387,7 +387,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoordinatedStateManager</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.CoordinatedStateManager&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.295">getCoordinatedStateManager</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.CoordinatedStateManager&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.296">getCoordinatedStateManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getCoordinatedStateManager</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -400,7 +400,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerName</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.ServerName&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.300">getServerName</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.ServerName&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.301">getServerName</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getServerName</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -413,7 +413,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.305">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.306">isStopped</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>isStopped</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Stoppable</code></dd>
@@ -426,7 +426,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.310">stop</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;why)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.311">stop</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;why)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>stop</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Stoppable</code></dd>
@@ -439,7 +439,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getConnection</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.ClusterConnection&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.315">getConnection</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.client.ClusterConnection&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.316">getConnection</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getConnection</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -452,7 +452,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaTableLocator</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.zookeeper.MetaTableLocator&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.320">getMetaTableLocator</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.zookeeper.MetaTableLocator&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.321">getMetaTableLocator</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getMetaTableLocator</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -465,7 +465,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterStatusTracker</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.zookeeper.ClusterStatusTracker&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.324">getClusterStatusTracker</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.zookeeper.ClusterStatusTracker&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.325">getClusterStatusTracker</a>()</pre>
 </li>
 </ul>
 <a name="getActiveMasterManager--">
@@ -474,7 +474,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getActiveMasterManager</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.master.ActiveMasterManager&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.328">getActiveMasterManager</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.master.ActiveMasterManager&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.329">getActiveMasterManager</a>()</pre>
 </li>
 </ul>
 <a name="getChoreService--">
@@ -483,7 +483,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getChoreService</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.ChoreService&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.333">getChoreService</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.ChoreService&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.334">getChoreService</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getChoreService</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -496,7 +496,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterConnection</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.ClusterConnection&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.338">getClusterConnection</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.client.ClusterConnection&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.339">getClusterConnection</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getClusterConnection</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -509,7 +509,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileSystem</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.344">getFileSystem</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.345">getFileSystem</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getFileSystem</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -522,7 +522,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopping</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.349">isStopping</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.350">isStopping</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>isStopping</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -535,7 +535,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createConnection</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Connection&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.354">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Connection&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html#line.355">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html
index c5bde87..6d8cc26 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.html#line.233">TestActiveMasterManager.NodeDeletionListener</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.html#line.234">TestActiveMasterManager.NodeDeletionListener</a>
 extends org.apache.hadoop.hbase.zookeeper.ZKListener</pre>
 </li>
 </ul>
@@ -233,7 +233,7 @@ extends org.apache.hadoop.hbase.zookeeper.ZKListener</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/master/TestActiveMasterManager.NodeDeletionListener.html#line.234">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html#line.235">LOG</a></pre>
 </li>
 </ul>
 <a name="lock">
@@ -242,7 +242,7 @@ extends org.apache.hadoop.hbase.zookeeper.ZKListener</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>lock</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Semaphore.html?is-external=true" title="class or interface in java.util.concurrent">Semaphore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html#line.236">lock</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Semaphore.html?is-external=true" title="class or interface in java.util.concurrent">Semaphore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html#line.237">lock</a></pre>
 </li>
 </ul>
 <a name="node">
@@ -251,7 +251,7 @@ extends org.apache.hadoop.hbase.zookeeper.ZKListener</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>node</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/master/TestActiveMasterManager.NodeDeletionListener.html#line.237">node</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/master/TestActiveMasterManager.NodeDeletionListener.html#line.238">node</a></pre>
 </li>
 </ul>
 </li>
@@ -268,7 +268,7 @@ extends org.apache.hadoop.hbase.zookeeper.ZKListener</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NodeDeletionListener</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html#line.239">NodeDeletionListener</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;watcher,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html#line.240">NodeDeletionListener</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;watcher,
                             <a href="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;node)</pre>
 </li>
 </ul>
@@ -286,7 +286,7 @@ extends org.apache.hadoop.hbase.zookeeper.ZKListener</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>nodeDeleted</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html#line.246">nodeDeleted</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;path)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html#line.247">nodeDeleted</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;path)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code>nodeDeleted</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.zookeeper.ZKListener</code></dd>
@@ -299,7 +299,7 @@ extends org.apache.hadoop.hbase.zookeeper.ZKListener</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>waitForDeletion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html#line.253">waitForDeletion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.NodeDeletionListener.html#line.254">waitForDeletion</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html
index 2963154..4a391d4 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.html#line.212">TestActiveMasterManager.WaitToBeMasterThread</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.html#line.213">TestActiveMasterManager.WaitToBeMasterThread</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></pre>
 </li>
 </ul>
@@ -248,7 +248,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>manager</h4>
-<pre>org.apache.hadoop.hbase.master.ActiveMasterManager <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html#line.214">manager</a></pre>
+<pre>org.apache.hadoop.hbase.master.ActiveMasterManager <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html#line.215">manager</a></pre>
 </li>
 </ul>
 <a name="dummyMaster">
@@ -257,7 +257,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>dummyMaster</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html" title="class in org.apache.hadoop.hbase.master">TestActiveMasterManager.DummyMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html#line.215">dummyMaster</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/TestActiveMasterManager.DummyMaster.html" title="class in org.apache.hadoop.hbase.master">TestActiveMasterManager.DummyMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html#line.216">dummyMaster</a></pre>
 </li>
 </ul>
 <a name="isActiveMaster">
@@ -266,7 +266,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isActiveMaster</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html#line.216">isActiveMaster</a></pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html#line.217">isActiveMaster</a></pre>
 </li>
 </ul>
 </li>
@@ -283,7 +283,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WaitToBeMasterThread</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html#line.218">WaitToBeMasterThread</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;zk,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html#line.219">WaitToBeMasterThread</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;zk,
                             org.apache.hadoop.hbase.ServerName&nbsp;address)</pre>
 </li>
 </ul>
@@ -301,7 +301,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html#line.225">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.WaitToBeMasterThread.html#line.226">run</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.html
index a643cd6..820847e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestActiveMasterManager.html
@@ -369,7 +369,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>assertMaster</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.html#line.204">assertMaster</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;zk,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestActiveMasterManager.html#line.205">assertMaster</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;zk,
                           org.apache.hadoop.hbase.ServerName&nbsp;expectedAddress)
                    throws org.apache.zookeeper.KeeperException,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/master/TestHMasterRPCException.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestHMasterRPCException.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestHMasterRPCException.html
index 9ddb4c6..1bf2525 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestHMasterRPCException.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestHMasterRPCException.html
@@ -305,7 +305,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/TestHMasterRPCException.html#line.81">tearDown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestHMasterRPCException.html#line.82">tearDown</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>
@@ -319,7 +319,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testRPCException</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestHMasterRPCException.html#line.92">testRPCException</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestHMasterRPCException.html#line.93">testRPCException</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>,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                              org.apache.zookeeper.KeeperException</pre>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.MyRegionServer.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.MyRegionServer.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.MyRegionServer.html
index ba5cc1f..c616252 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.MyRegionServer.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.MyRegionServer.html
@@ -132,7 +132,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.html#line.133">TestMetaShutdownHandler.MyRegionServer</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.html#line.134">TestMetaShutdownHandler.MyRegionServer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/MiniHBaseCluster.MiniHBaseClusterRegionServer.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster.MiniHBaseClusterRegionServer</a></pre>
 </li>
 </ul>
@@ -260,7 +260,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/MiniHBaseCluster.MiniHBa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MyRegionServer</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.MyRegionServer.html#line.135">MyRegionServer</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.MyRegionServer.html#line.136">MyRegionServer</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                       org.apache.zookeeper.KeeperException,
                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -286,7 +286,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/MiniHBaseCluster.MiniHBa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.MyRegionServer.html#line.141">abort</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;reason,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaShutdownHandler.MyRegionServer.html#line.142">abort</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;reason,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/master/cleaner/TestLogsCleaner.FaultyZooKeeperWatcher.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/cleaner/TestLogsCleaner.FaultyZooKeeperWatcher.html b/testdevapidocs/org/apache/hadoop/hbase/master/cleaner/TestLogsCleaner.FaultyZooKeeperWatcher.html
index dc11159..77b4857 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/cleaner/TestLogsCleaner.FaultyZooKeeperWatcher.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/cleaner/TestLogsCleaner.FaultyZooKeeperWatcher.html
@@ -167,7 +167,7 @@ extends org.apache.hadoop.hbase.zookeeper.ZKWatcher</pre>
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.zookeeper.ZKWatcher</h3>
-<code>abortable, saslLatch, znodePaths</code></li>
+<code>abortable</code></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/master/cleaner/TestReplicationHFileCleaner.FaultyZooKeeperWatcher.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/cleaner/TestReplicationHFileCleaner.FaultyZooKeeperWatcher.html b/testdevapidocs/org/apache/hadoop/hbase/master/cleaner/TestReplicationHFileCleaner.FaultyZooKeeperWatcher.html
index ecb956a..f07f519 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/cleaner/TestReplicationHFileCleaner.FaultyZooKeeperWatcher.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/cleaner/TestReplicationHFileCleaner.FaultyZooKeeperWatcher.html
@@ -167,7 +167,7 @@ extends org.apache.hadoop.hbase.zookeeper.ZKWatcher</pre>
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.zookeeper.ZKWatcher</h3>
-<code>abortable, saslLatch, znodePaths</code></li>
+<code>abortable</code></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/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 6a130bd..560b50a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -576,15 +576,15 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
 </ul>
 </li>
 </ul>

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


[32/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html
index 80259dd..ec465b9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html
@@ -130,629 +130,631 @@
 <span class="sourceLineNo">122</span>  public int remainingTasksInCoordination() {<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    int count = 0;<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    try {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      List&lt;String&gt; tasks = ZKUtil.listChildrenNoWatch(watcher, watcher.znodePaths.splitLogZNode);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      if (tasks != null) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        int listSize = tasks.size();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        for (int i = 0; i &lt; listSize; i++) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>          if (!ZKSplitLog.isRescanNode(tasks.get(i))) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>            count++;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>          }<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    } catch (KeeperException ke) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      LOG.warn("Failed to check remaining tasks", ke);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      count = -1;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    return count;<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>   * It is possible for a task to stay in UNASSIGNED state indefinitely - say SplitLogManager wants<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * to resubmit a task. It forces the task to UNASSIGNED state but it dies before it could create<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * the RESCAN task node to signal the SplitLogWorkers to pick up the task. To prevent this<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * scenario the SplitLogManager resubmits all orphan and UNASSIGNED tasks at startup.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @param path<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private void handleUnassignedTask(String path) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      return;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    Task task = findOrCreateOrphanTask(path);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    if (task.isOrphan() &amp;&amp; (task.incarnation.get() == 0)) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      LOG.info("Resubmitting unassigned orphan task " + path);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      // ignore failure to resubmit. The timeout-monitor will handle it later<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      // albeit in a more crude fashion<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      resubmitTask(path, task, FORCE);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void deleteTask(String path) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    deleteNode(path, zkretries);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public boolean resubmitTask(String path, Task task, ResubmitDirective directive) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    // its ok if this thread misses the update to task.deleted. It will fail later<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    if (task.status != IN_PROGRESS) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      return false;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    int version;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    if (directive != FORCE) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      // We're going to resubmit:<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      // 1) immediately if the worker server is now marked as dead<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      // 2) after a configurable timeout if the server is not marked as dead but has still not<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      // finished the task. This allows to continue if the worker cannot actually handle it,<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      // for any reason.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      final long time = EnvironmentEdgeManager.currentTime() - task.last_update;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      final boolean alive =<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          details.getMaster().getServerManager() != null ? details.getMaster().getServerManager()<a name="line.181"></a>
-<span class="sourceLineNo">182</span>              .isServerOnline(task.cur_worker_name) : true;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      if (alive &amp;&amp; time &lt; timeout) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        LOG.trace("Skipping the resubmit of " + task.toString() + "  because the server "<a name="line.184"></a>
-<span class="sourceLineNo">185</span>            + task.cur_worker_name + " is not marked as dead, we waited for " + time<a name="line.185"></a>
-<span class="sourceLineNo">186</span>            + " while the timeout is " + timeout);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return false;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      if (task.unforcedResubmits.get() &gt;= resubmitThreshold) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        if (!task.resubmitThresholdReached) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          task.resubmitThresholdReached = true;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          SplitLogCounters.tot_mgr_resubmit_threshold_reached.increment();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>          LOG.info("Skipping resubmissions of task " + path + " because threshold "<a name="line.194"></a>
-<span class="sourceLineNo">195</span>              + resubmitThreshold + " reached");<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        return false;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // race with heartbeat() that might be changing last_version<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      version = task.last_version;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    } else {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      SplitLogCounters.tot_mgr_resubmit_force.increment();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      version = -1;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    LOG.info("Resubmitting task " + path);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    task.incarnation.incrementAndGet();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    boolean result = resubmit(path, version);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    if (!result) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return false;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    // don't count forced resubmits<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    if (directive != FORCE) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      task.unforcedResubmits.incrementAndGet();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    task.setUnassigned();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    rescan(Long.MAX_VALUE);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    SplitLogCounters.tot_mgr_resubmit.increment();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    return true;<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">125</span>      List&lt;String&gt; tasks = ZKUtil.listChildrenNoWatch(watcher,<a name="line.125"></a>
+<span class="sourceLineNo">126</span>              watcher.getZNodePaths().splitLogZNode);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      if (tasks != null) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        int listSize = tasks.size();<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        for (int i = 0; i &lt; listSize; i++) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>          if (!ZKSplitLog.isRescanNode(tasks.get(i))) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>            count++;<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>      }<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    } catch (KeeperException ke) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      LOG.warn("Failed to check remaining tasks", ke);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      count = -1;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    return count;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * It is possible for a task to stay in UNASSIGNED state indefinitely - say SplitLogManager wants<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * to resubmit a task. It forces the task to UNASSIGNED state but it dies before it could create<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * the RESCAN task node to signal the SplitLogWorkers to pick up the task. To prevent this<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * scenario the SplitLogManager resubmits all orphan and UNASSIGNED tasks at startup.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * @param path<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private void handleUnassignedTask(String path) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    Task task = findOrCreateOrphanTask(path);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    if (task.isOrphan() &amp;&amp; (task.incarnation.get() == 0)) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      LOG.info("Resubmitting unassigned orphan task " + path);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // ignore failure to resubmit. The timeout-monitor will handle it later<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // albeit in a more crude fashion<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      resubmitTask(path, task, FORCE);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void deleteTask(String path) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    deleteNode(path, zkretries);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  public boolean resubmitTask(String path, Task task, ResubmitDirective directive) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    // its ok if this thread misses the update to task.deleted. It will fail later<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    if (task.status != IN_PROGRESS) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      return false;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    int version;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    if (directive != FORCE) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      // We're going to resubmit:<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      // 1) immediately if the worker server is now marked as dead<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      // 2) after a configurable timeout if the server is not marked as dead but has still not<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      // finished the task. This allows to continue if the worker cannot actually handle it,<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      // for any reason.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      final long time = EnvironmentEdgeManager.currentTime() - task.last_update;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      final boolean alive =<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          details.getMaster().getServerManager() != null ? details.getMaster().getServerManager()<a name="line.182"></a>
+<span class="sourceLineNo">183</span>              .isServerOnline(task.cur_worker_name) : true;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      if (alive &amp;&amp; time &lt; timeout) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        LOG.trace("Skipping the resubmit of " + task.toString() + "  because the server "<a name="line.185"></a>
+<span class="sourceLineNo">186</span>            + task.cur_worker_name + " is not marked as dead, we waited for " + time<a name="line.186"></a>
+<span class="sourceLineNo">187</span>            + " while the timeout is " + timeout);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        return false;<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>      if (task.unforcedResubmits.get() &gt;= resubmitThreshold) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        if (!task.resubmitThresholdReached) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          task.resubmitThresholdReached = true;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          SplitLogCounters.tot_mgr_resubmit_threshold_reached.increment();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          LOG.info("Skipping resubmissions of task " + path + " because threshold "<a name="line.195"></a>
+<span class="sourceLineNo">196</span>              + resubmitThreshold + " reached");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        }<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>      // race with heartbeat() that might be changing last_version<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      version = task.last_version;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } else {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      SplitLogCounters.tot_mgr_resubmit_force.increment();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      version = -1;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    LOG.info("Resubmitting task " + path);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    task.incarnation.incrementAndGet();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    boolean result = resubmit(path, version);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    if (!result) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return false;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // don't count forced resubmits<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    if (directive != FORCE) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      task.unforcedResubmits.incrementAndGet();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    task.setUnassigned();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    rescan(Long.MAX_VALUE);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    SplitLogCounters.tot_mgr_resubmit.increment();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    return true;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
 <span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  @Override<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  public void checkTasks() {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    rescan(Long.MAX_VALUE);<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>   * signal the workers that a task was resubmitted by creating the RESCAN node.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  private void rescan(long retries) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    // The RESCAN node will be deleted almost immediately by the<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    // SplitLogManager as soon as it is created because it is being<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    // created in the DONE state. This behavior prevents a buildup<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    // of RESCAN nodes. But there is also a chance that a SplitLogWorker<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    // might miss the watch-trigger that creation of RESCAN node provides.<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    // Since the TimeoutMonitor will keep resubmitting UNASSIGNED tasks<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    // therefore this behavior is safe.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    SplitLogTask slt = new SplitLogTask.Done(this.details.getServerName());<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    this.watcher<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        .getRecoverableZooKeeper()<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        .getZooKeeper()<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        .create(ZKSplitLog.getRescanNode(watcher), slt.toByteArray(), Ids.OPEN_ACL_UNSAFE,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          CreateMode.EPHEMERAL_SEQUENTIAL, new CreateRescanAsyncCallback(), Long.valueOf(retries));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  @Override<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public void submitTask(String path) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    createNode(path, zkretries);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  }<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>  @Override<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void checkTaskStillAvailable(String path) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // A negative retry count will lead to ignoring all error processing.<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    this.watcher<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        .getRecoverableZooKeeper()<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        .getZooKeeper()<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        .getData(path, this.watcher, new GetDataAsyncCallback(),<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          Long.valueOf(-1) /* retry count */);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private void deleteNode(String path, Long retries) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    SplitLogCounters.tot_mgr_node_delete_queued.increment();<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // Once a task znode is ready for delete, that is it is in the TASK_DONE<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    // state, then no one should be writing to it anymore. That is no one<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    // will be updating the znode version any more.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        .delete(path, -1, new DeleteAsyncCallback(), retries);<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>  private void deleteNodeSuccess(String path) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (ignoreZKDeleteForTesting) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    Task task;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    task = details.getTasks().remove(path);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    if (task == null) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        SplitLogCounters.tot_mgr_rescan_deleted.increment();<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      SplitLogCounters.tot_mgr_missing_state_in_delete.increment();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      LOG.debug("Deleted task without in memory state " + path);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      return;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    synchronized (task) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      task.status = DELETED;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      task.notify();<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    SplitLogCounters.tot_mgr_task_deleted.increment();<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>  private void deleteNodeFailure(String path) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    LOG.info("Failed to delete node " + path + " and will retry soon.");<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  private void createRescanSuccess(String path) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    SplitLogCounters.tot_mgr_rescan.increment();<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    getDataSetWatch(path, zkretries);<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>  private void createRescanFailure() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    LOG.error(HBaseMarkers.FATAL, "logic failure, rescan failure must not happen");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>  /**<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * Helper function to check whether to abandon retries in ZooKeeper AsyncCallback functions<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * @param statusCode integer value of a ZooKeeper exception code<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * @param action description message about the retried action<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return true when need to abandon retries otherwise false<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  private boolean needAbandonRetries(int statusCode, String action) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    if (statusCode == KeeperException.Code.SESSIONEXPIRED.intValue()) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      LOG.error("ZK session expired. Master is expected to shut down. Abandoning retries for "<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          + "action=" + action);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return true;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return false;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private void createNode(String path, Long retry_count) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    SplitLogTask slt = new SplitLogTask.Unassigned(details.getServerName());<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    ZKUtil.asyncCreate(this.watcher, path, slt.toByteArray(), new CreateAsyncCallback(),<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      retry_count);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    SplitLogCounters.tot_mgr_node_create_queued.increment();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private void createNodeSuccess(String path) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    LOG.debug("Put up splitlog task at znode " + path);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    getDataSetWatch(path, zkretries);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  private void createNodeFailure(String path) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    // TODO the Manager should split the log locally instead of giving up<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    LOG.warn("Failed to create task node " + path);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    setDone(path, FAILURE);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  private void getDataSetWatch(String path, Long retry_count) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        .getData(path, this.watcher, new GetDataAsyncCallback(), retry_count);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  private void getDataSetWatchSuccess(String path, byte[] data, int version)<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      throws DeserializationException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    if (data == null) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      if (version == Integer.MIN_VALUE) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        // assume all done. The task znode suddenly disappeared.<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        setDone(path, SUCCESS);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        return;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      SplitLogCounters.tot_mgr_null_data.increment();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      LOG.error(HBaseMarkers.FATAL, "logic error - got null data " + path);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      setDone(path, FAILURE);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      return;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    data = ZKMetadata.removeMetaData(data);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    SplitLogTask slt = SplitLogTask.parseFrom(data);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    if (slt.isUnassigned()) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      LOG.debug("Task not yet acquired " + path + ", ver=" + version);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      handleUnassignedTask(path);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    } else if (slt.isOwned()) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      heartbeat(path, version, slt.getServerName());<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    } else if (slt.isResigned()) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      resubmitOrFail(path, FORCE);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    } else if (slt.isDone()) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      if (taskFinisher != null &amp;&amp; !ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        if (taskFinisher.finish(slt.getServerName(), ZKSplitLog.getFileName(path)) == Status.DONE) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          setDone(path, SUCCESS);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        } else {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          resubmitOrFail(path, CHECK);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      } else {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        setDone(path, SUCCESS);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } else if (slt.isErr()) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      resubmitOrFail(path, CHECK);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } else {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.error(HBaseMarkers.FATAL, "logic error - unexpected zk state for path = "<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          + path + " data = " + slt.toString());<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      setDone(path, FAILURE);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  private void resubmitOrFail(String path, ResubmitDirective directive) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    if (resubmitTask(path, findOrCreateOrphanTask(path), directive) == false) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      setDone(path, FAILURE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  private void getDataSetWatchFailure(String path) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    LOG.warn("Failed to set data watch " + path);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    setDone(path, FAILURE);<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>  private void setDone(String path, TerminationStatus status) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    Task task = details.getTasks().get(path);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    if (task == null) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      if (!ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        SplitLogCounters.tot_mgr_unacquired_orphan_done.increment();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.debug("Unacquired orphan task is done " + path);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    } else {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      synchronized (task) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        if (task.status == IN_PROGRESS) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          if (status == SUCCESS) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            SplitLogCounters.tot_mgr_log_split_success.increment();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            LOG.info("Done splitting " + path);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>          } else {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            SplitLogCounters.tot_mgr_log_split_err.increment();<a name="line.416"></a>
-<span class="sourceLineNo">417</span>            LOG.warn("Error splitting " + path);<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          }<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          task.status = status;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          if (task.batch != null) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>            synchronized (task.batch) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>              if (status == SUCCESS) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>                task.batch.done++;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>              } else {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>                task.batch.error++;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>              }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>              task.batch.notify();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>            }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    // delete the task node in zk. It's an async<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // call and no one is blocked waiting for this node to be deleted. All<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    // task names are unique (log.&lt;timestamp&gt;) there is no risk of deleting<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    // a future task.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    // if a deletion fails, TimeoutMonitor will retry the same deletion later<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    deleteNode(path, zkretries);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    return;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>  }<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  private Task findOrCreateOrphanTask(String path) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return computeIfAbsent(details.getTasks(), path, Task::new, () -&gt; {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      LOG.info("Creating orphan task " + path);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      SplitLogCounters.tot_mgr_orphan_task_acquired.increment();<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    });<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private void heartbeat(String path, int new_version, ServerName workerName) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Task task = findOrCreateOrphanTask(path);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (new_version != task.last_version) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      if (task.isUnassigned()) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        LOG.info("Task " + path + " acquired by " + workerName);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      task.heartbeat(EnvironmentEdgeManager.currentTime(), new_version, workerName);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      SplitLogCounters.tot_mgr_heartbeat.increment();<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    } else {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // duplicate heartbeats - heartbeats w/o zk node version<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      // changing - are possible. The timeout thread does<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // getDataSetWatch() just to check whether a node still<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // exists or not<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private void lookForOrphans() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    List&lt;String&gt; orphans;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    try {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      orphans = ZKUtil.listChildrenNoWatch(this.watcher, this.watcher.znodePaths.splitLogZNode);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      if (orphans == null) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        LOG.warn("Could not get children of " + this.watcher.znodePaths.splitLogZNode);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        return;<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    } catch (KeeperException e) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      LOG.warn("Could not get children of " + this.watcher.znodePaths.splitLogZNode + " "<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          + StringUtils.stringifyException(e));<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    int rescan_nodes = 0;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    int listSize = orphans.size();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    for (int i = 0; i &lt; listSize; i++) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      String path = orphans.get(i);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      String nodepath = ZNodePaths.joinZNode(watcher.znodePaths.splitLogZNode, path);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      if (ZKSplitLog.isRescanNode(watcher, nodepath)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        rescan_nodes++;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        LOG.debug("Found orphan rescan node " + path);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        LOG.info("Found orphan task " + path);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      getDataSetWatch(nodepath, zkretries);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    LOG.info("Found " + (orphans.size() - rescan_nodes) + " orphan tasks and " + rescan_nodes<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        + " rescan nodes");<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  @Override<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public void nodeDataChanged(String path) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Task task;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    task = details.getTasks().get(path);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (task != null || ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      if (task != null) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      getDataSetWatch(path, zkretries);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>  }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>  private boolean resubmit(String path, int version) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    try {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      // blocking zk call but this is done from the timeout thread<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      SplitLogTask slt =<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          new SplitLogTask.Unassigned(this.details.getServerName());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (ZKUtil.setData(this.watcher, path, slt.toByteArray(), version) == false) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        LOG.debug("Failed to resubmit task " + path + " version changed");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return false;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    } catch (NoNodeException e) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.warn("Failed to resubmit because znode doesn't exist " + path<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          + " task done (or forced done by removing the znode)");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      try {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        getDataSetWatchSuccess(path, null, Integer.MIN_VALUE);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      } catch (DeserializationException e1) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        LOG.debug("Failed to re-resubmit task " + path + " because of deserialization issue", e1);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        return false;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      return false;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    } catch (KeeperException.BadVersionException e) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      LOG.debug("Failed to resubmit task " + path + " version changed");<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return false;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    } catch (KeeperException e) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      SplitLogCounters.tot_mgr_resubmit_failed.increment();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      LOG.warn("Failed to resubmit " + path, e);<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      return false;<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    return true;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * {@link org.apache.hadoop.hbase.master.SplitLogManager} can use objects implementing this<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   * interface to finish off a partially done task by<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * {@link org.apache.hadoop.hbase.regionserver.SplitLogWorker}. This provides a<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * serialization point at the end of the task processing. Must be restartable and idempotent.<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   */<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public interface TaskFinisher {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>     * status that can be returned finish()<a name="line.547"></a>
-<span class="sourceLineNo">548</span>     */<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    enum Status {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span>       * task completed successfully<a name="line.551"></a>
-<span class="sourceLineNo">552</span>       */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      DONE(),<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>       * task completed with error<a name="line.555"></a>
-<span class="sourceLineNo">556</span>       */<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      ERR()<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    /**<a name="line.560"></a>
-<span class="sourceLineNo">561</span>     * finish the partially done task. workername provides clue to where the partial results of the<a name="line.561"></a>
-<span class="sourceLineNo">562</span>     * partially done tasks are present. taskname is the name of the task that was put up in<a name="line.562"></a>
-<span class="sourceLineNo">563</span>     * zookeeper.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>     * &lt;p&gt;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>     * @param workerName<a name="line.565"></a>
-<span class="sourceLineNo">566</span>     * @param taskname<a name="line.566"></a>
-<span class="sourceLineNo">567</span>     * @return DONE if task completed successfully, ERR otherwise<a name="line.567"></a>
-<span class="sourceLineNo">568</span>     */<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    Status finish(ServerName workerName, String taskname);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>  /**<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   * Asynchronous handler for zk create node results. Retries on failures.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   */<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  public class CreateAsyncCallback implements AsyncCallback.StringCallback {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    private final Logger LOG = LoggerFactory.getLogger(CreateAsyncCallback.class);<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    public void processResult(int rc, String path, Object ctx, String name) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      SplitLogCounters.tot_mgr_node_create_result.increment();<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      if (rc != 0) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        if (needAbandonRetries(rc, "Create znode " + path)) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>          createNodeFailure(path);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>          return;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>        if (rc == KeeperException.Code.NODEEXISTS.intValue()) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>          // What if there is a delete pending against this pre-existing<a name="line.587"></a>
-<span class="sourceLineNo">588</span>          // znode? Then this soon-to-be-deleted task znode must be in TASK_DONE<a name="line.588"></a>
-<span class="sourceLineNo">589</span>          // state. Only operations that will be carried out on this node by<a name="line.589"></a>
-<span class="sourceLineNo">590</span>          // this manager are get-znode-data, task-finisher and delete-znode.<a name="line.590"></a>
-<span class="sourceLineNo">591</span>          // And all code pieces correctly handle the case of suddenly<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          // disappearing task-znode.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>          LOG.debug("Found pre-existing znode " + path);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>          SplitLogCounters.tot_mgr_node_already_exists.increment();<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        } else {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>          Long retry_count = (Long) ctx;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          LOG.warn("Create rc=" + KeeperException.Code.get(rc) + " for " + path<a name="line.597"></a>
-<span class="sourceLineNo">598</span>              + " remaining retries=" + retry_count);<a name="line.598"></a>
-<span class="sourceLineNo">599</span>          if (retry_count == 0) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>            SplitLogCounters.tot_mgr_node_create_err.increment();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>            createNodeFailure(path);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>          } else {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            SplitLogCounters.tot_mgr_node_create_retry.increment();<a name="line.603"></a>
-<span class="sourceLineNo">604</span>            createNode(path, retry_count - 1);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>          return;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      createNodeSuccess(path);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Asynchronous handler for zk get-data-set-watch on node results. Retries on failures.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   */<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  public class GetDataAsyncCallback implements AsyncCallback.DataCallback {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    private final Logger LOG = LoggerFactory.getLogger(GetDataAsyncCallback.class);<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>    @Override<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    public void processResult(int rc, String path, Object ctx, byte[] data, Stat stat) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      SplitLogCounters.tot_mgr_get_data_result.increment();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      if (rc != 0) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        if (needAbandonRetries(rc, "GetData from znode " + path)) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          return;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        }<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        if (rc == KeeperException.Code.NONODE.intValue()) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>          SplitLogCounters.tot_mgr_get_data_nonode.increment();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>          LOG.warn("Task znode " + path + " vanished or not created yet.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>          // ignore since we should not end up in a case where there is in-memory task,<a name="line.629"></a>
-<span class="sourceLineNo">630</span>          // but no znode. The only case is between the time task is created in-memory<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          // and the znode is created. See HBASE-11217.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          return;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>        Long retry_count = (Long) ctx;<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>        if (retry_count &lt; 0) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          LOG.warn("Getdata rc=" + KeeperException.Code.get(rc) + " " + path<a name="line.637"></a>
-<span class="sourceLineNo">638</span>              + ". Ignoring error. No error handling. No retrying.");<a name="line.638"></a>
-<span class="sourceLineNo">639</span>          return;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        LOG.warn("Getdata rc=" + KeeperException.Code.get(rc) + " " + path<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            + " remaining retries=" + retry_count);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        if (retry_count == 0) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>          SplitLogCounters.tot_mgr_get_data_err.increment();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>          getDataSetWatchFailure(path);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        } else {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          SplitLogCounters.tot_mgr_get_data_retry.increment();<a name="line.647"></a>
-<span class="sourceLineNo">648</span>          getDataSetWatch(path, retry_count - 1);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        }<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        return;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      }<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      try {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        getDataSetWatchSuccess(path, data, stat.getVersion());<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      } catch (DeserializationException e) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        LOG.warn("Deserialization problem", e);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      return;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span>  /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * Asynchronous handler for zk delete node results. Retries on failures.<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  public class DeleteAsyncCallback implements AsyncCallback.VoidCallback {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    private final Logger LOG = LoggerFactory.getLogger(DeleteAsyncCallback.class);<a name="line.665"></a>
-<span class="sourceLineNo">666</span><a name="line.666"></a>
-<span class="sourceLineNo">667</span>    @Override<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    public void processResult(int rc, String path, Object ctx) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      SplitLogCounters.tot_mgr_node_delete_result.increment();<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      if (rc != 0) {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        if (needAbandonRetries(rc, "Delete znode " + path)) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>          details.getFailedDeletions().add(path);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          return;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
-<span class="sourceLineNo">675</span>        if (rc != KeeperException.Code.NONODE.intValue()) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>          SplitLogCounters.tot_mgr_node_delete_err.increment();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>          Long retry_count = (Long) ctx;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          LOG.warn("Delete rc=" + KeeperException.Code.get(rc) + " for " + path<a name="line.678"></a>
-<span class="sourceLineNo">679</span>              + " remaining retries=" + retry_count);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>          if (retry_count == 0) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>            LOG.warn("Delete failed " + path);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>            details.getFailedDeletions().add(path);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>            deleteNodeFailure(path);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          } else {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>            deleteNode(path, retry_count - 1);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>          }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          return;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>        } else {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>          LOG.info(path + " does not exist. Either was created but deleted behind our"<a name="line.689"></a>
-<span class="sourceLineNo">690</span>              + " back by another pending delete OR was deleted"<a name="line.690"></a>
-<span class="sourceLineNo">691</span>              + " in earlier retry rounds. zkretries = " + ctx);<a name="line.691"></a>
-<span class="sourceLineNo">692</span>        }<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      } else {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>        LOG.debug("Deleted " + path);<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      }<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      deleteNodeSuccess(path);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  }<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>  /**<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * Asynchronous handler for zk create RESCAN-node results. Retries on failures.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   * &lt;p&gt;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   * A RESCAN node is created using PERSISTENT_SEQUENTIAL flag. It is a signal for all the<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * {@link org.apache.hadoop.hbase.regionserver.SplitLogWorker}s to rescan for new tasks.<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   */<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  public class CreateRescanAsyncCallback implements AsyncCallback.StringCallback {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    private final Logger LOG = LoggerFactory.getLogger(CreateRescanAsyncCallback.class);<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>    @Override<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    public void processResult(int rc, String path, Object ctx, String name) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      if (rc != 0) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>        if (needAbandonRetries(rc, "CreateRescan znode " + path)) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>          return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        }<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        Long retry_count = (Long) ctx;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        LOG.warn("rc=" + KeeperException.Code.get(rc) + " for " + path + " remaining retries="<a name="line.716"></a>
-<span class="sourceLineNo">717</span>            + retry_count);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        if (retry_count == 0) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          createRescanFailure();<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        } else {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          rescan(retry_count - 1);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        return;<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      }<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      // path is the original arg, name is the actual name that was created<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      createRescanSuccess(name);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  @Override<a name="line.730"></a>
-<span class="sourceLineNo">731</span>  public void setDetails(SplitLogManagerDetails details) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    this.details = details;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>  @Override<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  public SplitLogManagerDetails getDetails() {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return details;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Temporary function that is used by unit tests only<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   */<a name="line.742"></a>
-<span class="sourceLineNo">743</span>  @VisibleForTesting<a name="line.743"></a>
-<span class="sourceLineNo">744</span>  public void setIgnoreDeleteForTesting(boolean b) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    ignoreZKDeleteForTesting = b;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span>}<a name="line.747"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  @Override<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  public void checkTasks() {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    rescan(Long.MAX_VALUE);<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>   * signal the workers that a task was resubmitted by creating the RESCAN node.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  private void rescan(long retries) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    // The RESCAN node will be deleted almost immediately by the<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    // SplitLogManager as soon as it is created because it is being<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    // created in the DONE state. This behavior prevents a buildup<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    // of RESCAN nodes. But there is also a chance that a SplitLogWorker<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    // might miss the watch-trigger that creation of RESCAN node provides.<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    // Since the TimeoutMonitor will keep resubmitting UNASSIGNED tasks<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    // therefore this behavior is safe.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    SplitLogTask slt = new SplitLogTask.Done(this.details.getServerName());<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    this.watcher<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        .getRecoverableZooKeeper()<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        .getZooKeeper()<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        .create(ZKSplitLog.getRescanNode(watcher), slt.toByteArray(), Ids.OPEN_ACL_UNSAFE,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          CreateMode.EPHEMERAL_SEQUENTIAL, new CreateRescanAsyncCallback(), Long.valueOf(retries));<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  @Override<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  public void submitTask(String path) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    createNode(path, zkretries);<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>  public void checkTaskStillAvailable(String path) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    // A negative retry count will lead to ignoring all error processing.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    this.watcher<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .getRecoverableZooKeeper()<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        .getZooKeeper()<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        .getData(path, this.watcher, new GetDataAsyncCallback(),<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          Long.valueOf(-1) /* retry count */);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<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>  private void deleteNode(String path, Long retries) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    SplitLogCounters.tot_mgr_node_delete_queued.increment();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    // Once a task znode is ready for delete, that is it is in the TASK_DONE<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    // state, then no one should be writing to it anymore. That is no one<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    // will be updating the znode version any more.<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        .delete(path, -1, new DeleteAsyncCallback(), retries);<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>  private void deleteNodeSuccess(String path) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    if (ignoreZKDeleteForTesting) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      return;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Task task;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    task = details.getTasks().remove(path);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    if (task == null) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        SplitLogCounters.tot_mgr_rescan_deleted.increment();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      SplitLogCounters.tot_mgr_missing_state_in_delete.increment();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      LOG.debug("Deleted task without in memory state " + path);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      return;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    synchronized (task) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      task.status = DELETED;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      task.notify();<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    SplitLogCounters.tot_mgr_task_deleted.increment();<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>  private void deleteNodeFailure(String path) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    LOG.info("Failed to delete node " + path + " and will retry soon.");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return;<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>  private void createRescanSuccess(String path) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    SplitLogCounters.tot_mgr_rescan.increment();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    getDataSetWatch(path, zkretries);<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>  private void createRescanFailure() {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    LOG.error(HBaseMarkers.FATAL, "logic failure, rescan failure must not happen");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  /**<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * Helper function to check whether to abandon retries in ZooKeeper AsyncCallback functions<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * @param statusCode integer value of a ZooKeeper exception code<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * @param action description message about the retried action<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * @return true when need to abandon retries otherwise false<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  private boolean needAbandonRetries(int statusCode, String action) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    if (statusCode == KeeperException.Code.SESSIONEXPIRED.intValue()) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      LOG.error("ZK session expired. Master is expected to shut down. Abandoning retries for "<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          + "action=" + action);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      return true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    return false;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  private void createNode(String path, Long retry_count) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    SplitLogTask slt = new SplitLogTask.Unassigned(details.getServerName());<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    ZKUtil.asyncCreate(this.watcher, path, slt.toByteArray(), new CreateAsyncCallback(),<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      retry_count);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    SplitLogCounters.tot_mgr_node_create_queued.increment();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    return;<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>  private void createNodeSuccess(String path) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    LOG.debug("Put up splitlog task at znode " + path);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    getDataSetWatch(path, zkretries);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private void createNodeFailure(String path) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    // TODO the Manager should split the log locally instead of giving up<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    LOG.warn("Failed to create task node " + path);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    setDone(path, FAILURE);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>  }<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>  private void getDataSetWatch(String path, Long retry_count) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        .getData(path, this.watcher, new GetDataAsyncCallback(), retry_count);<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>  private void getDataSetWatchSuccess(String path, byte[] data, int version)<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throws DeserializationException {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    if (data == null) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      if (version == Integer.MIN_VALUE) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        // assume all done. The task znode suddenly disappeared.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        setDone(path, SUCCESS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        return;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      SplitLogCounters.tot_mgr_null_data.increment();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      LOG.error(HBaseMarkers.FATAL, "logic error - got null data " + path);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      setDone(path, FAILURE);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      return;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    data = ZKMetadata.removeMetaData(data);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    SplitLogTask slt = SplitLogTask.parseFrom(data);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    if (slt.isUnassigned()) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      LOG.debug("Task not yet acquired " + path + ", ver=" + version);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      handleUnassignedTask(path);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    } else if (slt.isOwned()) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      heartbeat(path, version, slt.getServerName());<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    } else if (slt.isResigned()) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      resubmitOrFail(path, FORCE);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    } else if (slt.isDone()) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      if (taskFinisher != null &amp;&amp; !ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        if (taskFinisher.finish(slt.getServerName(), ZKSplitLog.getFileName(path)) == Status.DONE) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>          setDone(path, SUCCESS);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        } else {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          resubmitOrFail(path, CHECK);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      } else {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        setDone(path, SUCCESS);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } else if (slt.isErr()) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      resubmitOrFail(path, CHECK);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    } else {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      LOG.error(HBaseMarkers.FATAL, "logic error - unexpected zk state for path = "<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          + path + " data = " + slt.toString());<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      setDone(path, FAILURE);<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>  private void resubmitOrFail(String path, ResubmitDirective directive) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    if (resubmitTask(path, findOrCreateOrphanTask(path), directive) == false) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      setDone(path, FAILURE);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private void getDataSetWatchFailure(String path) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    LOG.warn("Failed to set data watch " + path);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    setDone(path, FAILURE);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>  private void setDone(String path, TerminationStatus status) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    Task task = details.getTasks().get(path);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (task == null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (!ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        SplitLogCounters.tot_mgr_unacquired_orphan_done.increment();<a name="lin

<TRUNCATED>

[33/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html
index 80259dd..ec465b9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html
@@ -130,629 +130,631 @@
 <span class="sourceLineNo">122</span>  public int remainingTasksInCoordination() {<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    int count = 0;<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    try {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      List&lt;String&gt; tasks = ZKUtil.listChildrenNoWatch(watcher, watcher.znodePaths.splitLogZNode);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      if (tasks != null) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        int listSize = tasks.size();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        for (int i = 0; i &lt; listSize; i++) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>          if (!ZKSplitLog.isRescanNode(tasks.get(i))) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>            count++;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>          }<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    } catch (KeeperException ke) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      LOG.warn("Failed to check remaining tasks", ke);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      count = -1;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    return count;<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>   * It is possible for a task to stay in UNASSIGNED state indefinitely - say SplitLogManager wants<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * to resubmit a task. It forces the task to UNASSIGNED state but it dies before it could create<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * the RESCAN task node to signal the SplitLogWorkers to pick up the task. To prevent this<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * scenario the SplitLogManager resubmits all orphan and UNASSIGNED tasks at startup.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @param path<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private void handleUnassignedTask(String path) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      return;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    Task task = findOrCreateOrphanTask(path);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    if (task.isOrphan() &amp;&amp; (task.incarnation.get() == 0)) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      LOG.info("Resubmitting unassigned orphan task " + path);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      // ignore failure to resubmit. The timeout-monitor will handle it later<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      // albeit in a more crude fashion<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      resubmitTask(path, task, FORCE);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void deleteTask(String path) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    deleteNode(path, zkretries);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public boolean resubmitTask(String path, Task task, ResubmitDirective directive) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    // its ok if this thread misses the update to task.deleted. It will fail later<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    if (task.status != IN_PROGRESS) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      return false;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    int version;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    if (directive != FORCE) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      // We're going to resubmit:<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      // 1) immediately if the worker server is now marked as dead<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      // 2) after a configurable timeout if the server is not marked as dead but has still not<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      // finished the task. This allows to continue if the worker cannot actually handle it,<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      // for any reason.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      final long time = EnvironmentEdgeManager.currentTime() - task.last_update;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      final boolean alive =<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          details.getMaster().getServerManager() != null ? details.getMaster().getServerManager()<a name="line.181"></a>
-<span class="sourceLineNo">182</span>              .isServerOnline(task.cur_worker_name) : true;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      if (alive &amp;&amp; time &lt; timeout) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        LOG.trace("Skipping the resubmit of " + task.toString() + "  because the server "<a name="line.184"></a>
-<span class="sourceLineNo">185</span>            + task.cur_worker_name + " is not marked as dead, we waited for " + time<a name="line.185"></a>
-<span class="sourceLineNo">186</span>            + " while the timeout is " + timeout);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return false;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      if (task.unforcedResubmits.get() &gt;= resubmitThreshold) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        if (!task.resubmitThresholdReached) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          task.resubmitThresholdReached = true;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          SplitLogCounters.tot_mgr_resubmit_threshold_reached.increment();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>          LOG.info("Skipping resubmissions of task " + path + " because threshold "<a name="line.194"></a>
-<span class="sourceLineNo">195</span>              + resubmitThreshold + " reached");<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        return false;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // race with heartbeat() that might be changing last_version<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      version = task.last_version;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    } else {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      SplitLogCounters.tot_mgr_resubmit_force.increment();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      version = -1;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    LOG.info("Resubmitting task " + path);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    task.incarnation.incrementAndGet();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    boolean result = resubmit(path, version);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    if (!result) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return false;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    // don't count forced resubmits<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    if (directive != FORCE) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      task.unforcedResubmits.incrementAndGet();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    task.setUnassigned();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    rescan(Long.MAX_VALUE);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    SplitLogCounters.tot_mgr_resubmit.increment();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    return true;<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">125</span>      List&lt;String&gt; tasks = ZKUtil.listChildrenNoWatch(watcher,<a name="line.125"></a>
+<span class="sourceLineNo">126</span>              watcher.getZNodePaths().splitLogZNode);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      if (tasks != null) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        int listSize = tasks.size();<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        for (int i = 0; i &lt; listSize; i++) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>          if (!ZKSplitLog.isRescanNode(tasks.get(i))) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>            count++;<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>      }<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    } catch (KeeperException ke) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      LOG.warn("Failed to check remaining tasks", ke);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      count = -1;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    return count;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * It is possible for a task to stay in UNASSIGNED state indefinitely - say SplitLogManager wants<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * to resubmit a task. It forces the task to UNASSIGNED state but it dies before it could create<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * the RESCAN task node to signal the SplitLogWorkers to pick up the task. To prevent this<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * scenario the SplitLogManager resubmits all orphan and UNASSIGNED tasks at startup.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * @param path<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private void handleUnassignedTask(String path) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    Task task = findOrCreateOrphanTask(path);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    if (task.isOrphan() &amp;&amp; (task.incarnation.get() == 0)) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      LOG.info("Resubmitting unassigned orphan task " + path);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // ignore failure to resubmit. The timeout-monitor will handle it later<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // albeit in a more crude fashion<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      resubmitTask(path, task, FORCE);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void deleteTask(String path) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    deleteNode(path, zkretries);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  public boolean resubmitTask(String path, Task task, ResubmitDirective directive) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    // its ok if this thread misses the update to task.deleted. It will fail later<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    if (task.status != IN_PROGRESS) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      return false;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    int version;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    if (directive != FORCE) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      // We're going to resubmit:<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      // 1) immediately if the worker server is now marked as dead<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      // 2) after a configurable timeout if the server is not marked as dead but has still not<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      // finished the task. This allows to continue if the worker cannot actually handle it,<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      // for any reason.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      final long time = EnvironmentEdgeManager.currentTime() - task.last_update;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      final boolean alive =<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          details.getMaster().getServerManager() != null ? details.getMaster().getServerManager()<a name="line.182"></a>
+<span class="sourceLineNo">183</span>              .isServerOnline(task.cur_worker_name) : true;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      if (alive &amp;&amp; time &lt; timeout) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        LOG.trace("Skipping the resubmit of " + task.toString() + "  because the server "<a name="line.185"></a>
+<span class="sourceLineNo">186</span>            + task.cur_worker_name + " is not marked as dead, we waited for " + time<a name="line.186"></a>
+<span class="sourceLineNo">187</span>            + " while the timeout is " + timeout);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        return false;<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>      if (task.unforcedResubmits.get() &gt;= resubmitThreshold) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        if (!task.resubmitThresholdReached) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          task.resubmitThresholdReached = true;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          SplitLogCounters.tot_mgr_resubmit_threshold_reached.increment();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          LOG.info("Skipping resubmissions of task " + path + " because threshold "<a name="line.195"></a>
+<span class="sourceLineNo">196</span>              + resubmitThreshold + " reached");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        }<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>      // race with heartbeat() that might be changing last_version<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      version = task.last_version;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } else {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      SplitLogCounters.tot_mgr_resubmit_force.increment();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      version = -1;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    LOG.info("Resubmitting task " + path);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    task.incarnation.incrementAndGet();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    boolean result = resubmit(path, version);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    if (!result) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return false;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // don't count forced resubmits<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    if (directive != FORCE) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      task.unforcedResubmits.incrementAndGet();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    task.setUnassigned();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    rescan(Long.MAX_VALUE);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    SplitLogCounters.tot_mgr_resubmit.increment();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    return true;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
 <span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  @Override<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  public void checkTasks() {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    rescan(Long.MAX_VALUE);<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>   * signal the workers that a task was resubmitted by creating the RESCAN node.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  private void rescan(long retries) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    // The RESCAN node will be deleted almost immediately by the<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    // SplitLogManager as soon as it is created because it is being<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    // created in the DONE state. This behavior prevents a buildup<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    // of RESCAN nodes. But there is also a chance that a SplitLogWorker<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    // might miss the watch-trigger that creation of RESCAN node provides.<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    // Since the TimeoutMonitor will keep resubmitting UNASSIGNED tasks<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    // therefore this behavior is safe.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    SplitLogTask slt = new SplitLogTask.Done(this.details.getServerName());<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    this.watcher<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        .getRecoverableZooKeeper()<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        .getZooKeeper()<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        .create(ZKSplitLog.getRescanNode(watcher), slt.toByteArray(), Ids.OPEN_ACL_UNSAFE,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          CreateMode.EPHEMERAL_SEQUENTIAL, new CreateRescanAsyncCallback(), Long.valueOf(retries));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  @Override<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public void submitTask(String path) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    createNode(path, zkretries);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  }<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>  @Override<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void checkTaskStillAvailable(String path) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // A negative retry count will lead to ignoring all error processing.<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    this.watcher<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        .getRecoverableZooKeeper()<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        .getZooKeeper()<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        .getData(path, this.watcher, new GetDataAsyncCallback(),<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          Long.valueOf(-1) /* retry count */);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private void deleteNode(String path, Long retries) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    SplitLogCounters.tot_mgr_node_delete_queued.increment();<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // Once a task znode is ready for delete, that is it is in the TASK_DONE<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    // state, then no one should be writing to it anymore. That is no one<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    // will be updating the znode version any more.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        .delete(path, -1, new DeleteAsyncCallback(), retries);<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>  private void deleteNodeSuccess(String path) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (ignoreZKDeleteForTesting) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    Task task;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    task = details.getTasks().remove(path);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    if (task == null) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        SplitLogCounters.tot_mgr_rescan_deleted.increment();<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      SplitLogCounters.tot_mgr_missing_state_in_delete.increment();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      LOG.debug("Deleted task without in memory state " + path);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      return;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    synchronized (task) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      task.status = DELETED;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      task.notify();<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    SplitLogCounters.tot_mgr_task_deleted.increment();<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>  private void deleteNodeFailure(String path) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    LOG.info("Failed to delete node " + path + " and will retry soon.");<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  private void createRescanSuccess(String path) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    SplitLogCounters.tot_mgr_rescan.increment();<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    getDataSetWatch(path, zkretries);<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>  private void createRescanFailure() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    LOG.error(HBaseMarkers.FATAL, "logic failure, rescan failure must not happen");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>  /**<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * Helper function to check whether to abandon retries in ZooKeeper AsyncCallback functions<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * @param statusCode integer value of a ZooKeeper exception code<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * @param action description message about the retried action<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return true when need to abandon retries otherwise false<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  private boolean needAbandonRetries(int statusCode, String action) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    if (statusCode == KeeperException.Code.SESSIONEXPIRED.intValue()) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      LOG.error("ZK session expired. Master is expected to shut down. Abandoning retries for "<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          + "action=" + action);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return true;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return false;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private void createNode(String path, Long retry_count) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    SplitLogTask slt = new SplitLogTask.Unassigned(details.getServerName());<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    ZKUtil.asyncCreate(this.watcher, path, slt.toByteArray(), new CreateAsyncCallback(),<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      retry_count);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    SplitLogCounters.tot_mgr_node_create_queued.increment();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private void createNodeSuccess(String path) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    LOG.debug("Put up splitlog task at znode " + path);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    getDataSetWatch(path, zkretries);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  private void createNodeFailure(String path) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    // TODO the Manager should split the log locally instead of giving up<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    LOG.warn("Failed to create task node " + path);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    setDone(path, FAILURE);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  private void getDataSetWatch(String path, Long retry_count) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        .getData(path, this.watcher, new GetDataAsyncCallback(), retry_count);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  private void getDataSetWatchSuccess(String path, byte[] data, int version)<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      throws DeserializationException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    if (data == null) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      if (version == Integer.MIN_VALUE) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        // assume all done. The task znode suddenly disappeared.<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        setDone(path, SUCCESS);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        return;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      SplitLogCounters.tot_mgr_null_data.increment();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      LOG.error(HBaseMarkers.FATAL, "logic error - got null data " + path);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      setDone(path, FAILURE);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      return;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    data = ZKMetadata.removeMetaData(data);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    SplitLogTask slt = SplitLogTask.parseFrom(data);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    if (slt.isUnassigned()) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      LOG.debug("Task not yet acquired " + path + ", ver=" + version);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      handleUnassignedTask(path);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    } else if (slt.isOwned()) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      heartbeat(path, version, slt.getServerName());<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    } else if (slt.isResigned()) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      resubmitOrFail(path, FORCE);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    } else if (slt.isDone()) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      if (taskFinisher != null &amp;&amp; !ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        if (taskFinisher.finish(slt.getServerName(), ZKSplitLog.getFileName(path)) == Status.DONE) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          setDone(path, SUCCESS);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        } else {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          resubmitOrFail(path, CHECK);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      } else {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        setDone(path, SUCCESS);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } else if (slt.isErr()) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      resubmitOrFail(path, CHECK);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } else {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.error(HBaseMarkers.FATAL, "logic error - unexpected zk state for path = "<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          + path + " data = " + slt.toString());<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      setDone(path, FAILURE);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  private void resubmitOrFail(String path, ResubmitDirective directive) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    if (resubmitTask(path, findOrCreateOrphanTask(path), directive) == false) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      setDone(path, FAILURE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  private void getDataSetWatchFailure(String path) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    LOG.warn("Failed to set data watch " + path);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    setDone(path, FAILURE);<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>  private void setDone(String path, TerminationStatus status) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    Task task = details.getTasks().get(path);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    if (task == null) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      if (!ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        SplitLogCounters.tot_mgr_unacquired_orphan_done.increment();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.debug("Unacquired orphan task is done " + path);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    } else {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      synchronized (task) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        if (task.status == IN_PROGRESS) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          if (status == SUCCESS) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            SplitLogCounters.tot_mgr_log_split_success.increment();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            LOG.info("Done splitting " + path);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>          } else {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            SplitLogCounters.tot_mgr_log_split_err.increment();<a name="line.416"></a>
-<span class="sourceLineNo">417</span>            LOG.warn("Error splitting " + path);<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          }<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          task.status = status;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          if (task.batch != null) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>            synchronized (task.batch) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>              if (status == SUCCESS) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>                task.batch.done++;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>              } else {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>                task.batch.error++;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>              }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>              task.batch.notify();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>            }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    // delete the task node in zk. It's an async<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // call and no one is blocked waiting for this node to be deleted. All<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    // task names are unique (log.&lt;timestamp&gt;) there is no risk of deleting<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    // a future task.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    // if a deletion fails, TimeoutMonitor will retry the same deletion later<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    deleteNode(path, zkretries);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    return;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>  }<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  private Task findOrCreateOrphanTask(String path) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return computeIfAbsent(details.getTasks(), path, Task::new, () -&gt; {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      LOG.info("Creating orphan task " + path);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      SplitLogCounters.tot_mgr_orphan_task_acquired.increment();<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    });<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private void heartbeat(String path, int new_version, ServerName workerName) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Task task = findOrCreateOrphanTask(path);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (new_version != task.last_version) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      if (task.isUnassigned()) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        LOG.info("Task " + path + " acquired by " + workerName);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      task.heartbeat(EnvironmentEdgeManager.currentTime(), new_version, workerName);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      SplitLogCounters.tot_mgr_heartbeat.increment();<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    } else {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // duplicate heartbeats - heartbeats w/o zk node version<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      // changing - are possible. The timeout thread does<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // getDataSetWatch() just to check whether a node still<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // exists or not<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private void lookForOrphans() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    List&lt;String&gt; orphans;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    try {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      orphans = ZKUtil.listChildrenNoWatch(this.watcher, this.watcher.znodePaths.splitLogZNode);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      if (orphans == null) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        LOG.warn("Could not get children of " + this.watcher.znodePaths.splitLogZNode);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        return;<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    } catch (KeeperException e) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      LOG.warn("Could not get children of " + this.watcher.znodePaths.splitLogZNode + " "<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          + StringUtils.stringifyException(e));<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    int rescan_nodes = 0;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    int listSize = orphans.size();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    for (int i = 0; i &lt; listSize; i++) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      String path = orphans.get(i);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      String nodepath = ZNodePaths.joinZNode(watcher.znodePaths.splitLogZNode, path);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      if (ZKSplitLog.isRescanNode(watcher, nodepath)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        rescan_nodes++;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        LOG.debug("Found orphan rescan node " + path);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        LOG.info("Found orphan task " + path);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      getDataSetWatch(nodepath, zkretries);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    LOG.info("Found " + (orphans.size() - rescan_nodes) + " orphan tasks and " + rescan_nodes<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        + " rescan nodes");<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  @Override<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public void nodeDataChanged(String path) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Task task;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    task = details.getTasks().get(path);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (task != null || ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      if (task != null) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      getDataSetWatch(path, zkretries);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>  }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>  private boolean resubmit(String path, int version) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    try {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      // blocking zk call but this is done from the timeout thread<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      SplitLogTask slt =<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          new SplitLogTask.Unassigned(this.details.getServerName());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (ZKUtil.setData(this.watcher, path, slt.toByteArray(), version) == false) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        LOG.debug("Failed to resubmit task " + path + " version changed");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return false;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    } catch (NoNodeException e) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.warn("Failed to resubmit because znode doesn't exist " + path<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          + " task done (or forced done by removing the znode)");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      try {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        getDataSetWatchSuccess(path, null, Integer.MIN_VALUE);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      } catch (DeserializationException e1) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        LOG.debug("Failed to re-resubmit task " + path + " because of deserialization issue", e1);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        return false;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      return false;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    } catch (KeeperException.BadVersionException e) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      LOG.debug("Failed to resubmit task " + path + " version changed");<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return false;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    } catch (KeeperException e) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      SplitLogCounters.tot_mgr_resubmit_failed.increment();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      LOG.warn("Failed to resubmit " + path, e);<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      return false;<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    return true;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * {@link org.apache.hadoop.hbase.master.SplitLogManager} can use objects implementing this<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   * interface to finish off a partially done task by<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * {@link org.apache.hadoop.hbase.regionserver.SplitLogWorker}. This provides a<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * serialization point at the end of the task processing. Must be restartable and idempotent.<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   */<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public interface TaskFinisher {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>     * status that can be returned finish()<a name="line.547"></a>
-<span class="sourceLineNo">548</span>     */<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    enum Status {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span>       * task completed successfully<a name="line.551"></a>
-<span class="sourceLineNo">552</span>       */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      DONE(),<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>       * task completed with error<a name="line.555"></a>
-<span class="sourceLineNo">556</span>       */<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      ERR()<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    /**<a name="line.560"></a>
-<span class="sourceLineNo">561</span>     * finish the partially done task. workername provides clue to where the partial results of the<a name="line.561"></a>
-<span class="sourceLineNo">562</span>     * partially done tasks are present. taskname is the name of the task that was put up in<a name="line.562"></a>
-<span class="sourceLineNo">563</span>     * zookeeper.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>     * &lt;p&gt;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>     * @param workerName<a name="line.565"></a>
-<span class="sourceLineNo">566</span>     * @param taskname<a name="line.566"></a>
-<span class="sourceLineNo">567</span>     * @return DONE if task completed successfully, ERR otherwise<a name="line.567"></a>
-<span class="sourceLineNo">568</span>     */<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    Status finish(ServerName workerName, String taskname);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>  /**<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   * Asynchronous handler for zk create node results. Retries on failures.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   */<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  public class CreateAsyncCallback implements AsyncCallback.StringCallback {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    private final Logger LOG = LoggerFactory.getLogger(CreateAsyncCallback.class);<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    public void processResult(int rc, String path, Object ctx, String name) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      SplitLogCounters.tot_mgr_node_create_result.increment();<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      if (rc != 0) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        if (needAbandonRetries(rc, "Create znode " + path)) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>          createNodeFailure(path);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>          return;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>        if (rc == KeeperException.Code.NODEEXISTS.intValue()) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>          // What if there is a delete pending against this pre-existing<a name="line.587"></a>
-<span class="sourceLineNo">588</span>          // znode? Then this soon-to-be-deleted task znode must be in TASK_DONE<a name="line.588"></a>
-<span class="sourceLineNo">589</span>          // state. Only operations that will be carried out on this node by<a name="line.589"></a>
-<span class="sourceLineNo">590</span>          // this manager are get-znode-data, task-finisher and delete-znode.<a name="line.590"></a>
-<span class="sourceLineNo">591</span>          // And all code pieces correctly handle the case of suddenly<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          // disappearing task-znode.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>          LOG.debug("Found pre-existing znode " + path);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>          SplitLogCounters.tot_mgr_node_already_exists.increment();<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        } else {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>          Long retry_count = (Long) ctx;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          LOG.warn("Create rc=" + KeeperException.Code.get(rc) + " for " + path<a name="line.597"></a>
-<span class="sourceLineNo">598</span>              + " remaining retries=" + retry_count);<a name="line.598"></a>
-<span class="sourceLineNo">599</span>          if (retry_count == 0) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>            SplitLogCounters.tot_mgr_node_create_err.increment();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>            createNodeFailure(path);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>          } else {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            SplitLogCounters.tot_mgr_node_create_retry.increment();<a name="line.603"></a>
-<span class="sourceLineNo">604</span>            createNode(path, retry_count - 1);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>          return;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      createNodeSuccess(path);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Asynchronous handler for zk get-data-set-watch on node results. Retries on failures.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   */<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  public class GetDataAsyncCallback implements AsyncCallback.DataCallback {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    private final Logger LOG = LoggerFactory.getLogger(GetDataAsyncCallback.class);<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>    @Override<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    public void processResult(int rc, String path, Object ctx, byte[] data, Stat stat) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      SplitLogCounters.tot_mgr_get_data_result.increment();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      if (rc != 0) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        if (needAbandonRetries(rc, "GetData from znode " + path)) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          return;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        }<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        if (rc == KeeperException.Code.NONODE.intValue()) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>          SplitLogCounters.tot_mgr_get_data_nonode.increment();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>          LOG.warn("Task znode " + path + " vanished or not created yet.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>          // ignore since we should not end up in a case where there is in-memory task,<a name="line.629"></a>
-<span class="sourceLineNo">630</span>          // but no znode. The only case is between the time task is created in-memory<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          // and the znode is created. See HBASE-11217.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          return;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>        Long retry_count = (Long) ctx;<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>        if (retry_count &lt; 0) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          LOG.warn("Getdata rc=" + KeeperException.Code.get(rc) + " " + path<a name="line.637"></a>
-<span class="sourceLineNo">638</span>              + ". Ignoring error. No error handling. No retrying.");<a name="line.638"></a>
-<span class="sourceLineNo">639</span>          return;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        LOG.warn("Getdata rc=" + KeeperException.Code.get(rc) + " " + path<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            + " remaining retries=" + retry_count);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        if (retry_count == 0) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>          SplitLogCounters.tot_mgr_get_data_err.increment();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>          getDataSetWatchFailure(path);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        } else {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          SplitLogCounters.tot_mgr_get_data_retry.increment();<a name="line.647"></a>
-<span class="sourceLineNo">648</span>          getDataSetWatch(path, retry_count - 1);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        }<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        return;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      }<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      try {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        getDataSetWatchSuccess(path, data, stat.getVersion());<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      } catch (DeserializationException e) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        LOG.warn("Deserialization problem", e);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      return;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span>  /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * Asynchronous handler for zk delete node results. Retries on failures.<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  public class DeleteAsyncCallback implements AsyncCallback.VoidCallback {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    private final Logger LOG = LoggerFactory.getLogger(DeleteAsyncCallback.class);<a name="line.665"></a>
-<span class="sourceLineNo">666</span><a name="line.666"></a>
-<span class="sourceLineNo">667</span>    @Override<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    public void processResult(int rc, String path, Object ctx) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      SplitLogCounters.tot_mgr_node_delete_result.increment();<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      if (rc != 0) {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        if (needAbandonRetries(rc, "Delete znode " + path)) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>          details.getFailedDeletions().add(path);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          return;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
-<span class="sourceLineNo">675</span>        if (rc != KeeperException.Code.NONODE.intValue()) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>          SplitLogCounters.tot_mgr_node_delete_err.increment();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>          Long retry_count = (Long) ctx;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          LOG.warn("Delete rc=" + KeeperException.Code.get(rc) + " for " + path<a name="line.678"></a>
-<span class="sourceLineNo">679</span>              + " remaining retries=" + retry_count);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>          if (retry_count == 0) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>            LOG.warn("Delete failed " + path);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>            details.getFailedDeletions().add(path);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>            deleteNodeFailure(path);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          } else {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>            deleteNode(path, retry_count - 1);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>          }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          return;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>        } else {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>          LOG.info(path + " does not exist. Either was created but deleted behind our"<a name="line.689"></a>
-<span class="sourceLineNo">690</span>              + " back by another pending delete OR was deleted"<a name="line.690"></a>
-<span class="sourceLineNo">691</span>              + " in earlier retry rounds. zkretries = " + ctx);<a name="line.691"></a>
-<span class="sourceLineNo">692</span>        }<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      } else {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>        LOG.debug("Deleted " + path);<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      }<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      deleteNodeSuccess(path);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  }<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>  /**<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * Asynchronous handler for zk create RESCAN-node results. Retries on failures.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   * &lt;p&gt;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   * A RESCAN node is created using PERSISTENT_SEQUENTIAL flag. It is a signal for all the<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * {@link org.apache.hadoop.hbase.regionserver.SplitLogWorker}s to rescan for new tasks.<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   */<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  public class CreateRescanAsyncCallback implements AsyncCallback.StringCallback {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    private final Logger LOG = LoggerFactory.getLogger(CreateRescanAsyncCallback.class);<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>    @Override<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    public void processResult(int rc, String path, Object ctx, String name) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      if (rc != 0) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>        if (needAbandonRetries(rc, "CreateRescan znode " + path)) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>          return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        }<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        Long retry_count = (Long) ctx;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        LOG.warn("rc=" + KeeperException.Code.get(rc) + " for " + path + " remaining retries="<a name="line.716"></a>
-<span class="sourceLineNo">717</span>            + retry_count);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        if (retry_count == 0) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          createRescanFailure();<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        } else {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          rescan(retry_count - 1);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        return;<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      }<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      // path is the original arg, name is the actual name that was created<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      createRescanSuccess(name);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  @Override<a name="line.730"></a>
-<span class="sourceLineNo">731</span>  public void setDetails(SplitLogManagerDetails details) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    this.details = details;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>  @Override<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  public SplitLogManagerDetails getDetails() {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return details;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Temporary function that is used by unit tests only<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   */<a name="line.742"></a>
-<span class="sourceLineNo">743</span>  @VisibleForTesting<a name="line.743"></a>
-<span class="sourceLineNo">744</span>  public void setIgnoreDeleteForTesting(boolean b) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    ignoreZKDeleteForTesting = b;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span>}<a name="line.747"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  @Override<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  public void checkTasks() {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    rescan(Long.MAX_VALUE);<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>   * signal the workers that a task was resubmitted by creating the RESCAN node.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  private void rescan(long retries) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    // The RESCAN node will be deleted almost immediately by the<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    // SplitLogManager as soon as it is created because it is being<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    // created in the DONE state. This behavior prevents a buildup<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    // of RESCAN nodes. But there is also a chance that a SplitLogWorker<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    // might miss the watch-trigger that creation of RESCAN node provides.<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    // Since the TimeoutMonitor will keep resubmitting UNASSIGNED tasks<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    // therefore this behavior is safe.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    SplitLogTask slt = new SplitLogTask.Done(this.details.getServerName());<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    this.watcher<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        .getRecoverableZooKeeper()<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        .getZooKeeper()<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        .create(ZKSplitLog.getRescanNode(watcher), slt.toByteArray(), Ids.OPEN_ACL_UNSAFE,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          CreateMode.EPHEMERAL_SEQUENTIAL, new CreateRescanAsyncCallback(), Long.valueOf(retries));<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  @Override<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  public void submitTask(String path) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    createNode(path, zkretries);<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>  public void checkTaskStillAvailable(String path) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    // A negative retry count will lead to ignoring all error processing.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    this.watcher<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .getRecoverableZooKeeper()<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        .getZooKeeper()<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        .getData(path, this.watcher, new GetDataAsyncCallback(),<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          Long.valueOf(-1) /* retry count */);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<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>  private void deleteNode(String path, Long retries) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    SplitLogCounters.tot_mgr_node_delete_queued.increment();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    // Once a task znode is ready for delete, that is it is in the TASK_DONE<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    // state, then no one should be writing to it anymore. That is no one<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    // will be updating the znode version any more.<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        .delete(path, -1, new DeleteAsyncCallback(), retries);<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>  private void deleteNodeSuccess(String path) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    if (ignoreZKDeleteForTesting) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      return;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Task task;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    task = details.getTasks().remove(path);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    if (task == null) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        SplitLogCounters.tot_mgr_rescan_deleted.increment();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      SplitLogCounters.tot_mgr_missing_state_in_delete.increment();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      LOG.debug("Deleted task without in memory state " + path);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      return;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    synchronized (task) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      task.status = DELETED;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      task.notify();<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    SplitLogCounters.tot_mgr_task_deleted.increment();<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>  private void deleteNodeFailure(String path) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    LOG.info("Failed to delete node " + path + " and will retry soon.");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return;<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>  private void createRescanSuccess(String path) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    SplitLogCounters.tot_mgr_rescan.increment();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    getDataSetWatch(path, zkretries);<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>  private void createRescanFailure() {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    LOG.error(HBaseMarkers.FATAL, "logic failure, rescan failure must not happen");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  /**<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * Helper function to check whether to abandon retries in ZooKeeper AsyncCallback functions<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * @param statusCode integer value of a ZooKeeper exception code<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * @param action description message about the retried action<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * @return true when need to abandon retries otherwise false<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  private boolean needAbandonRetries(int statusCode, String action) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    if (statusCode == KeeperException.Code.SESSIONEXPIRED.intValue()) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      LOG.error("ZK session expired. Master is expected to shut down. Abandoning retries for "<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          + "action=" + action);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      return true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    return false;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  private void createNode(String path, Long retry_count) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    SplitLogTask slt = new SplitLogTask.Unassigned(details.getServerName());<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    ZKUtil.asyncCreate(this.watcher, path, slt.toByteArray(), new CreateAsyncCallback(),<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      retry_count);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    SplitLogCounters.tot_mgr_node_create_queued.increment();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    return;<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>  private void createNodeSuccess(String path) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    LOG.debug("Put up splitlog task at znode " + path);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    getDataSetWatch(path, zkretries);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private void createNodeFailure(String path) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    // TODO the Manager should split the log locally instead of giving up<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    LOG.warn("Failed to create task node " + path);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    setDone(path, FAILURE);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>  }<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>  private void getDataSetWatch(String path, Long retry_count) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        .getData(path, this.watcher, new GetDataAsyncCallback(), retry_count);<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>  private void getDataSetWatchSuccess(String path, byte[] data, int version)<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throws DeserializationException {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    if (data == null) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      if (version == Integer.MIN_VALUE) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        // assume all done. The task znode suddenly disappeared.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        setDone(path, SUCCESS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        return;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      SplitLogCounters.tot_mgr_null_data.increment();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      LOG.error(HBaseMarkers.FATAL, "logic error - got null data " + path);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      setDone(path, FAILURE);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      return;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    data = ZKMetadata.removeMetaData(data);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    SplitLogTask slt = SplitLogTask.parseFrom(data);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    if (slt.isUnassigned()) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      LOG.debug("Task not yet acquired " + path + ", ver=" + version);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      handleUnassignedTask(path);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    } else if (slt.isOwned()) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      heartbeat(path, version, slt.getServerName());<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    } else if (slt.isResigned()) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      resubmitOrFail(path, FORCE);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    } else if (slt.isDone()) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      if (taskFinisher != null &amp;&amp; !ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        if (taskFinisher.finish(slt.getServerName(), ZKSplitLog.getFileName(path)) == Status.DONE) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>          setDone(path, SUCCESS);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        } else {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          resubmitOrFail(path, CHECK);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      } else {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        setDone(path, SUCCESS);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } else if (slt.isErr()) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      resubmitOrFail(path, CHECK);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    } else {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      LOG.error(HBaseMarkers.FATAL, "logic error - unexpected zk state for path = "<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          + path + " data = " + slt.toString());<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      setDone(path, FAILURE);<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>  private void resubmitOrFail(String path, ResubmitDirective directive) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    if (resubmitTask(path, findOrCreateOrphanTask(path), directive) == false) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      setDone(path, FAILURE);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private void getDataSetWatchFailure(String path) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    LOG.warn("Failed to set data watch " + path);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    setDone(path, FAILURE);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>  private void setDone(String path, TerminationStatus status) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    Task task = details.getTasks().get(path);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (task == null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (!ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        SplitLogCounters.tot_mgr_unacquired_orphan_done.increment();<a name="line.407

<TRUNCATED>

[39/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html
index 83ac764..4f81361 100644
--- a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html
+++ b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html
@@ -672,7 +672,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>handleUnassignedTask</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.148">handleUnassignedTask</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;path)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.149">handleUnassignedTask</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;path)</pre>
 <div class="block">It is possible for a task to stay in UNASSIGNED state indefinitely - say SplitLogManager wants
  to resubmit a task. It forces the task to UNASSIGNED state but it dies before it could create
  the RESCAN task node to signal the SplitLogWorkers to pick up the task. To prevent this
@@ -689,7 +689,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteTask</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.162">deleteTask</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;path)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.163">deleteTask</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;path)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLogManagerCoordination.html#deleteTask-java.lang.String-">deleteTask</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLogManagerCoordination.html" title="interface in org.apache.hadoop.hbase.coordination">SplitLogManagerCoordination</a></code></dd>
@@ -704,7 +704,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>resubmitTask</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.167">resubmitTask</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;path,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.168">resubmitTask</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;path,
                             <a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.Task.html" title="class in org.apache.hadoop.hbase.master">SplitLogManager.Task</a>&nbsp;task,
                             <a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master">SplitLogManager.ResubmitDirective</a>&nbsp;directive)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLogManagerCoordination.html#resubmitTask-java.lang.String-org.apache.hadoop.hbase.master.SplitLogManager.Task-org.apache.hadoop.hbase.master.SplitLogManager.ResubmitDirective-">SplitLogManagerCoordination</a></code></span></div>
@@ -727,7 +727,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>checkTasks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.224">checkTasks</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.225">checkTasks</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLogManagerCoordination.html#checkTasks--">SplitLogManagerCoordination</a></code></span></div>
 <div class="block">tells Coordination that it should check for new tasks</div>
 <dl>
@@ -742,7 +742,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>rescan</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.231">rescan</a>(long&nbsp;retries)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.232">rescan</a>(long&nbsp;retries)</pre>
 <div class="block">signal the workers that a task was resubmitted by creating the RESCAN node.</div>
 </li>
 </ul>
@@ -752,7 +752,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>submitTask</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.248">submitTask</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;path)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.249">submitTask</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;path)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLogManagerCoordination.html#submitTask-java.lang.String-">submitTask</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLogManagerCoordination.html" title="interface in org.apache.hadoop.hbase.coordination">SplitLogManagerCoordination</a></code></dd>
@@ -767,7 +767,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>checkTaskStillAvailable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.253">checkTaskStillAvailable</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;path)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.254">checkTaskStillAvailable</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;path)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLogManagerCoordination.html#checkTaskStillAvailable-java.lang.String-">SplitLogManagerCoordination</a></code></span></div>
 <div class="block">Check that the task is still there</div>
 <dl>
@@ -784,7 +784,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteNode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.263">deleteNode</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;path,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.264">deleteNode</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;path,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;retries)</pre>
 </li>
 </ul>
@@ -794,7 +794,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteNodeSuccess</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.272">deleteNodeSuccess</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;path)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.273">deleteNodeSuccess</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;path)</pre>
 </li>
 </ul>
 <a name="deleteNodeFailure-java.lang.String-">
@@ -803,7 +803,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteNodeFailure</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.293">deleteNodeFailure</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;path)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.294">deleteNodeFailure</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;path)</pre>
 </li>
 </ul>
 <a name="createRescanSuccess-java.lang.String-">
@@ -812,7 +812,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>createRescanSuccess</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.298">createRescanSuccess</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;path)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.299">createRescanSuccess</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;path)</pre>
 </li>
 </ul>
 <a name="createRescanFailure--">
@@ -821,7 +821,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>createRescanFailure</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.303">createRescanFailure</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.304">createRescanFailure</a>()</pre>
 </li>
 </ul>
 <a name="needAbandonRetries-int-java.lang.String-">
@@ -830,7 +830,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>needAbandonRetries</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.313">needAbandonRetries</a>(int&nbsp;statusCode,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.314">needAbandonRetries</a>(int&nbsp;statusCode,
                                    <a href="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;action)</pre>
 <div class="block">Helper function to check whether to abandon retries in ZooKeeper AsyncCallback functions</div>
 <dl>
@@ -848,7 +848,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>createNode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.322">createNode</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;path,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.323">createNode</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;path,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;retry_count)</pre>
 </li>
 </ul>
@@ -858,7 +858,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>createNodeSuccess</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.330">createNodeSuccess</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;path)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.331">createNodeSuccess</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;path)</pre>
 </li>
 </ul>
 <a name="createNodeFailure-java.lang.String-">
@@ -867,7 +867,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>createNodeFailure</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.335">createNodeFailure</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;path)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.336">createNodeFailure</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;path)</pre>
 </li>
 </ul>
 <a name="getDataSetWatch-java.lang.String-java.lang.Long-">
@@ -876,7 +876,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataSetWatch</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.341">getDataSetWatch</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;path,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.342">getDataSetWatch</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;path,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;retry_count)</pre>
 </li>
 </ul>
@@ -886,7 +886,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataSetWatchSuccess</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.347">getDataSetWatchSuccess</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;path,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.348">getDataSetWatchSuccess</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;path,
                                     byte[]&nbsp;data,
                                     int&nbsp;version)
                              throws <a href="../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a></pre>
@@ -902,7 +902,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>resubmitOrFail</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.391">resubmitOrFail</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;path,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.392">resubmitOrFail</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;path,
                             <a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master">SplitLogManager.ResubmitDirective</a>&nbsp;directive)</pre>
 </li>
 </ul>
@@ -912,7 +912,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataSetWatchFailure</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.397">getDataSetWatchFailure</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;path)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.398">getDataSetWatchFailure</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;path)</pre>
 </li>
 </ul>
 <a name="setDone-java.lang.String-org.apache.hadoop.hbase.master.SplitLogManager.TerminationStatus-">
@@ -921,7 +921,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>setDone</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.402">setDone</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;path,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.403">setDone</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;path,
                      <a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master">SplitLogManager.TerminationStatus</a>&nbsp;status)</pre>
 </li>
 </ul>
@@ -931,7 +931,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>findOrCreateOrphanTask</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.Task.html" title="class in org.apache.hadoop.hbase.master">SplitLogManager.Task</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.442">findOrCreateOrphanTask</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;path)</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.Task.html" title="class in org.apache.hadoop.hbase.master">SplitLogManager.Task</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.443">findOrCreateOrphanTask</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;path)</pre>
 </li>
 </ul>
 <a name="heartbeat-java.lang.String-int-org.apache.hadoop.hbase.ServerName-">
@@ -940,7 +940,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>heartbeat</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.449">heartbeat</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;path,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.450">heartbeat</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;path,
                        int&nbsp;new_version,
                        <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;workerName)</pre>
 </li>
@@ -951,7 +951,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>lookForOrphans</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.466">lookForOrphans</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.467">lookForOrphans</a>()</pre>
 </li>
 </ul>
 <a name="nodeDataChanged-java.lang.String-">
@@ -960,7 +960,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>nodeDataChanged</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.497">nodeDataChanged</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;path)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.499">nodeDataChanged</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;path)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeDataChanged-java.lang.String-">ZKListener</a></code></span></div>
 <div class="block">Called when an existing node has changed data.</div>
 <dl>
@@ -977,7 +977,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>resubmit</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.508">resubmit</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;path,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.510">resubmit</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;path,
                          int&nbsp;version)</pre>
 </li>
 </ul>
@@ -987,7 +987,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>setDetails</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.731">setDetails</a>(<a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLogManagerCoordination.SplitLogManagerDetails.html" title="class in org.apache.hadoop.hbase.coordination">SplitLogManagerCoordination.SplitLogManagerDetails</a>&nbsp;details)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.733">setDetails</a>(<a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLogManagerCoordination.SplitLogManagerDetails.html" title="class in org.apache.hadoop.hbase.coordination">SplitLogManagerCoordination.SplitLogManagerDetails</a>&nbsp;details)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLogManagerCoordination.html#setDetails-org.apache.hadoop.hbase.coordination.SplitLogManagerCoordination.SplitLogManagerDetails-">SplitLogManagerCoordination</a></code></span></div>
 <div class="block">Provide the configuration from the SplitLogManager</div>
 <dl>
@@ -1002,7 +1002,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockList">
 <li class="blockList">
 <h4>getDetails</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLogManagerCoordination.SplitLogManagerDetails.html" title="class in org.apache.hadoop.hbase.coordination">SplitLogManagerCoordination.SplitLogManagerDetails</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.736">getDetails</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLogManagerCoordination.SplitLogManagerDetails.html" title="class in org.apache.hadoop.hbase.coordination">SplitLogManagerCoordination.SplitLogManagerDetails</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.738">getDetails</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLogManagerCoordination.html#getDetails--">SplitLogManagerCoordination</a></code></span></div>
 <div class="block">Returns the configuration that was provided previously</div>
 <dl>
@@ -1017,7 +1017,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coordination/SplitLog
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setIgnoreDeleteForTesting</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.744">setIgnoreDeleteForTesting</a>(boolean&nbsp;b)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.746">setIgnoreDeleteForTesting</a>(boolean&nbsp;b)</pre>
 <div class="block">Temporary function that is used by unit tests only</div>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index ec7c4ef..51b2799 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -183,13 +183,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
 </ul>
 </li>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index 99a6541..76f6d8f 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -295,8 +295,8 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index d74e73d..d9d8232 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -346,11 +346,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 2ae933c..f4c8834 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -209,9 +209,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.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index a1317b4..fba1ed0 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -437,19 +437,19 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 9b43ec8..f8599fa 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -212,11 +212,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index b3fe7bf..ef8d766 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -229,13 +229,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 7461437..bf99d5e 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -703,20 +703,20 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index 3bd22b5..b377318 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,8 +130,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html b/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
index 3936b98..9078ac8 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.211">HBaseReplicationEndpoint.PeerRegionServerListener</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.212">HBaseReplicationEndpoint.PeerRegionServerListener</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKListener</a></pre>
 <div class="block">Tracks changes to the list of region servers in a peer's cluster.</div>
 </li>
@@ -227,7 +227,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationEndpoint</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html#line.213">replicationEndpoint</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html#line.214">replicationEndpoint</a></pre>
 </li>
 </ul>
 <a name="regionServerListNode">
@@ -236,7 +236,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>regionServerListNode</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html#line.214">regionServerListNode</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html#line.215">regionServerListNode</a></pre>
 </li>
 </ul>
 </li>
@@ -253,7 +253,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>PeerRegionServerListener</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html#line.216">PeerRegionServerListener</a>(<a href="../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a>&nbsp;replicationPeer)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html#line.217">PeerRegionServerListener</a>(<a href="../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a>&nbsp;replicationPeer)</pre>
 </li>
 </ul>
 </li>
@@ -270,7 +270,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>nodeChildrenChanged</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html#line.223">nodeChildrenChanged</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;path)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html#line.224">nodeChildrenChanged</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;path)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeChildrenChanged-java.lang.String-">ZKListener</a></code></span></div>
 <div class="block">Called when an existing node has a child node added or removed.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html b/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
index 5e46467..9ce6174 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
@@ -623,7 +623,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServers</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.178">getRegionServers</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.179">getRegionServers</a>()</pre>
 <div class="block">Get a list of all the addresses of all the region servers
  for this peer cluster</div>
 <dl>
@@ -638,7 +638,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>setRegionServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.194">setRegionServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;regionServers)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.195">setRegionServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;regionServers)</pre>
 <div class="block">Set the list of region servers for that peer</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -652,7 +652,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getLastRegionServerUpdate</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.204">getLastRegionServerUpdate</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.205">getLastRegionServerUpdate</a>()</pre>
 <div class="block">Get the timestamp at which the last change occurred to the list of region servers to replicate
  to.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
index 31c81b7..098a00c 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
@@ -1303,7 +1303,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>postShipEdits</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.601">postShipEdits</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.602">postShipEdits</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
                           int&nbsp;batchSize)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#postShipEdits-java.util.List-int-">ReplicationSourceInterface</a></code></span></div>
 <div class="block">Call this after the shipper thread ship some entries to peer cluster.</div>
@@ -1322,7 +1322,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALFileLengthProvider</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALFileLengthProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.610">getWALFileLengthProvider</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALFileLengthProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.611">getWALFileLengthProvider</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getWALFileLengthProvider--">getWALFileLengthProvider</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a></code></dd>
@@ -1337,7 +1337,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerWALsBelongTo</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.615">getServerWALsBelongTo</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.616">getServerWALsBelongTo</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getServerWALsBelongTo--">ReplicationSourceInterface</a></code></span></div>
 <div class="block">The queue of WALs only belong to one region server. This will return the server name which all
  WALs belong to.</div>
@@ -1355,7 +1355,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>getServer</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.619">getServer</a>()</pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.620">getServer</a>()</pre>
 </li>
 </ul>
 <a name="getQueueStorage--">
@@ -1364,7 +1364,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getQueueStorage</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.623">getQueueStorage</a>()</pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.624">getQueueStorage</a>()</pre>
 </li>
 </ul>
 </li>


[37/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html b/devapidocs/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html
index c413def..30ac380 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.BulkHFileVisitor.html" title="interface in org.apache.hadoop.hbase.tool"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/tool/WriteSinkCoprocessor.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" target="_top">Frames</a></li>
@@ -321,7 +321,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.BulkHFileVisitor.html" title="interface in org.apache.hadoop.hbase.tool"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/tool/WriteSinkCoprocessor.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html b/devapidocs/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html
new file mode 100644
index 0000000..05196e64
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html
@@ -0,0 +1,487 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>PreUpgradeValidator (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="PreUpgradeValidator (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":9,"i3":10,"i4":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/PreUpgradeValidator.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/tool/WriteSinkCoprocessor.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" target="_top">Frames</a></li>
+<li><a href="PreUpgradeValidator.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.tool</div>
+<h2 title="Class PreUpgradeValidator" class="title">Class PreUpgradeValidator</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html" title="class in org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util.AbstractHBaseTool</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.tool.PreUpgradeValidator</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd>org.apache.hadoop.conf.Configurable, org.apache.hadoop.util.Tool</dd>
+</dl>
+<hr>
+<br>
+<pre>@InterfaceAudience.LimitedPrivate(value="Tools")
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#line.50">PreUpgradeValidator</a>
+extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html" title="class in org.apache.hadoop.hbase.util">AbstractHBaseTool</a></pre>
+<div class="block">Tool for validating that cluster can be upgraded from HBase 1.x to 2.0
+ <p>
+ Available validations:
+ <ul>
+ <li>all: Run all pre-upgrade validations</li>
+ <li>validateDBE: Check Data Block Encoding for column families</li>
+ </ul>
+ </p></div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#DATA_BLOCK_ENCODING">DATA_BLOCK_ENCODING</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#LOG">LOG</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#NAME">NAME</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#validateAll">validateAll</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#validateDBE">validateDBE</a></span></code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.util.AbstractHBaseTool">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html" title="class in org.apache.hadoop.hbase.util">AbstractHBaseTool</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#cmdLineArgs">cmdLineArgs</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#conf">conf</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#EXIT_FAILURE">EXIT_FAILURE</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#EXIT_SUCCESS">EXIT_SUCCESS</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#LONG_HELP_OPTION">LONG_HELP_OPTION</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#options">options</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#SHORT_HELP_OPTION">SHORT_HELP_OPTION</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#PreUpgradeValidator--">PreUpgradeValidator</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#addOptions--">addOptions</a></span>()</code>
+<div class="block">Override this to add command-line options using <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addOptWithArg-java.lang.String-java.lang.String-"><code>AbstractHBaseTool.addOptWithArg(java.lang.String, java.lang.String)</code></a>
+ and similar methods.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#doWork--">doWork</a></span>()</code>
+<div class="block">The "main function" of the tool</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#main-java.lang.String:A-">main</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#processOptions-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">processOptions</a></span>(org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine&nbsp;cmd)</code>
+<div class="block">This method is called to process the options after they have been parsed.</div>
+</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#validateDBE--">validateDBE</a></span>()</code>
+<div class="block">Check DataBlockEncodings for column families.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.util.AbstractHBaseTool">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html" title="class in org.apache.hadoop.hbase.util">AbstractHBaseTool</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addOption-org.apache.hbase.thirdparty.org.apache.commons.cli.Option-">addOption</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addOptNoArg-java.lang.String-java.lang.String-">addOptNoArg</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addOptNoArg-java.lang.String-java.lang.String-java.lang.String-">addOptNoArg</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addOptWithArg-java.lang.String-java.lang.String-">addOptWithArg</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addOptWithArg-java.lang.String-java.lang.String-java.lang.String-">addOptWithArg</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addRequiredOption-org.apache.hbase.thirdparty.org.apache.commons.cli.Option-">addRequiredOption</a>, <a href="../../../../../org/apache/hadoop/hbase
 /util/AbstractHBaseTool.html#addRequiredOptWithArg-java.lang.String-java.lang.String-">addRequiredOptWithArg</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addRequiredOptWithArg-java.lang.String-java.lang.String-java.lang.String-">addRequiredOptWithArg</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#doStaticMain-java.lang.String:A-">doStaticMain</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#getConf--">getConf</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#getOptionAsDouble-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-java.lang.String-double-">getOptionAsDouble</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#getOptionAsInt-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-java.lang.String-int-">getOptionAsInt</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.htm
 l#getOptionAsLong-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-java.lang.String-int-">getOptionAsLong</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#newParser--">newParser</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#parseArgs-java.lang.String:A-">parseArgs</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#parseInt-java.lang.String-int-int-">parseInt</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#parseLong-java.lang.String-long-long-">parseLong</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#printUsage--">printUsage</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#printUsage-java.lang.String-java.lang.String-java.lang.String-">printUsage</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#processOldArgs-java.util.List-">processOldArgs</a>, 
 <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#run-java.lang.String:A-">run</a>, <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#setConf-org.apache.hadoop.conf.Configuration-">setConf</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="NAME">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NAME</h4>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#line.52">NAME</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.tool.PreUpgradeValidator.NAME">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="LOG">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>LOG</h4>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#line.53">LOG</a></pre>
+</li>
+</ul>
+<a name="DATA_BLOCK_ENCODING">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>DATA_BLOCK_ENCODING</h4>
+<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#line.54">DATA_BLOCK_ENCODING</a></pre>
+</li>
+</ul>
+<a name="validateAll">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>validateAll</h4>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#line.55">validateAll</a></pre>
+</li>
+</ul>
+<a name="validateDBE">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>validateDBE</h4>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#line.56">validateDBE</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="PreUpgradeValidator--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>PreUpgradeValidator</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#line.50">PreUpgradeValidator</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="validateDBE--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>validateDBE</h4>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#line.64">validateDBE</a>()
+                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block">Check DataBlockEncodings for column families.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>DataBlockEncoding compatible with HBase 2</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - if a remote or network exception occurs</dd>
+</dl>
+</li>
+</ul>
+<a name="addOptions--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addOptions</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#line.103">addOptions</a>()</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addOptions--">AbstractHBaseTool</a></code></span></div>
+<div class="block">Override this to add command-line options using <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addOptWithArg-java.lang.String-java.lang.String-"><code>AbstractHBaseTool.addOptWithArg(java.lang.String, java.lang.String)</code></a>
+ and similar methods.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addOptions--">addOptions</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html" title="class in org.apache.hadoop.hbase.util">AbstractHBaseTool</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="processOptions-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>processOptions</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#line.109">processOptions</a>(org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine&nbsp;cmd)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#processOptions-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">AbstractHBaseTool</a></code></span></div>
+<div class="block">This method is called to process the options after they have been parsed.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#processOptions-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">processOptions</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html" title="class in org.apache.hadoop.hbase.util">AbstractHBaseTool</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="doWork--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>doWork</h4>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#line.115">doWork</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"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#doWork--">AbstractHBaseTool</a></code></span></div>
+<div class="block">The "main function" of the tool</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#doWork--">doWork</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html" title="class in org.apache.hadoop.hbase.util">AbstractHBaseTool</a></code></dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="main-java.lang.String:A-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>main</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#line.126">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/PreUpgradeValidator.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/tool/WriteSinkCoprocessor.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" target="_top">Frames</a></li>
+<li><a href="PreUpgradeValidator.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/tool/WriteSinkCoprocessor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/WriteSinkCoprocessor.html b/devapidocs/org/apache/hadoop/hbase/tool/WriteSinkCoprocessor.html
index 6dd49fa..938c09f 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/WriteSinkCoprocessor.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/WriteSinkCoprocessor.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li>Next&nbsp;Class</li>
 </ul>
 <ul class="navList">
@@ -436,7 +436,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionCop
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li>Next&nbsp;Class</li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/tool/class-use/PreUpgradeValidator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/class-use/PreUpgradeValidator.html b/devapidocs/org/apache/hadoop/hbase/tool/class-use/PreUpgradeValidator.html
new file mode 100644
index 0000000..e997250
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/tool/class-use/PreUpgradeValidator.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.tool.PreUpgradeValidator (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.tool.PreUpgradeValidator (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/tool/class-use/PreUpgradeValidator.html" target="_top">Frames</a></li>
+<li><a href="PreUpgradeValidator.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.tool.PreUpgradeValidator" class="title">Uses of Class<br>org.apache.hadoop.hbase.tool.PreUpgradeValidator</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.tool.PreUpgradeValidator</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/tool/class-use/PreUpgradeValidator.html" target="_top">Frames</a></li>
+<li><a href="PreUpgradeValidator.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/tool/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/package-frame.html b/devapidocs/org/apache/hadoop/hbase/tool/package-frame.html
index 32cdab1..540df43 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/package-frame.html
@@ -32,6 +32,7 @@
 <li><a href="Canary.ZookeeperTask.html" title="class in org.apache.hadoop.hbase.tool" target="classFrame">Canary.ZookeeperTask</a></li>
 <li><a href="LoadIncrementalHFiles.html" title="class in org.apache.hadoop.hbase.tool" target="classFrame">LoadIncrementalHFiles</a></li>
 <li><a href="LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool" target="classFrame">LoadIncrementalHFiles.LoadQueueItem</a></li>
+<li><a href="PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool" target="classFrame">PreUpgradeValidator</a></li>
 <li><a href="WriteSinkCoprocessor.html" title="class in org.apache.hadoop.hbase.tool" target="classFrame">WriteSinkCoprocessor</a></li>
 </ul>
 <h2 title="Enums">Enums</h2>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/tool/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/package-summary.html b/devapidocs/org/apache/hadoop/hbase/tool/package-summary.html
index 8f9a965..951ce75 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/package-summary.html
@@ -170,6 +170,12 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">PreUpgradeValidator</a></td>
+<td class="colLast">
+<div class="block">Tool for validating that cluster can be upgraded from HBase 1.x to 2.0</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/tool/WriteSinkCoprocessor.html" title="class in org.apache.hadoop.hbase.tool">WriteSinkCoprocessor</a></td>
 <td class="colLast">
 <div class="block">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/tool/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/package-tree.html b/devapidocs/org/apache/hadoop/hbase/tool/package-tree.html
index fdc1cb8..6aaf7d0 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/package-tree.html
@@ -81,6 +81,11 @@
 <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.util.<a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">AbstractHBaseTool</span></a> (implements org.apache.hadoop.conf.Configurable, org.apache.hadoop.util.Tool)
+<ul>
+<li type="circle">org.apache.hadoop.hbase.tool.<a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">PreUpgradeValidator</span></a></li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.tool.<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">Canary</span></a> (implements org.apache.hadoop.util.Tool)</li>
 <li type="circle">org.apache.hadoop.hbase.tool.<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">Canary.Monitor</span></a> (implements java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>)
 <ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/util/AbstractHBaseTool.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/AbstractHBaseTool.html b/devapidocs/org/apache/hadoop/hbase/util/AbstractHBaseTool.html
index c508999..a7cdc44 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/AbstractHBaseTool.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/AbstractHBaseTool.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/backup/BackupDriver.html" title="class in org.apache.hadoop.hbase.backup">BackupDriver</a>, <a href="../../../../../org/apache/hadoop/hbase/snapshot/CreateSnapshot.html" title="class in org.apache.hadoop.hbase.snapshot">CreateSnapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/snapshot/ExportSnapshot.html" title="class in org.apache.hadoop.hbase.snapshot">ExportSnapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/util/RegionMover.html" title="class in org.apache.hadoop.hbase.util">RegionMover</a>, <a href="../../../../../org/apache/hadoop/hbase/backup/RestoreDriver.html" title="class in org.apache.hadoop.hbase.backup">RestoreDriver</a>, <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotInfo.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotInfo</a></dd>
+<dd><a href="../../../../../org/apache/hadoop/hbase/backup/BackupDriver.html" title="class in org.apache.hadoop.hbase.backup">BackupDriver</a>, <a href="../../../../../org/apache/hadoop/hbase/snapshot/CreateSnapshot.html" title="class in org.apache.hadoop.hbase.snapshot">CreateSnapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/snapshot/ExportSnapshot.html" title="class in org.apache.hadoop.hbase.snapshot">ExportSnapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">PreUpgradeValidator</a>, <a href="../../../../../org/apache/hadoop/hbase/util/RegionMover.html" title="class in org.apache.hadoop.hbase.util">RegionMover</a>, <a href="../../../../../org/apache/hadoop/hbase/backup/RestoreDriver.html" title="class in org.apache.hadoop.hbase.backup">RestoreDriver</a>, <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotInfo.html" title="class in org.apache.hadoop.hbase.snapshot">Snaps
 hotInfo</a></dd>
 </dl>
 <hr>
 <br>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/util/class-use/AbstractHBaseTool.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/class-use/AbstractHBaseTool.html b/devapidocs/org/apache/hadoop/hbase/util/class-use/AbstractHBaseTool.html
index 96e76a3..f493f39 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/class-use/AbstractHBaseTool.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/AbstractHBaseTool.html
@@ -95,6 +95,10 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.tool">org.apache.hadoop.hbase.tool</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -179,6 +183,26 @@
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.tool">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html" title="class in org.apache.hadoop.hbase.util">AbstractHBaseTool</a> in <a href="../../../../../../org/apache/hadoop/hbase/tool/package-summary.html">org.apache.hadoop.hbase.tool</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing subclasses, and an explanation">
+<caption><span>Subclasses of <a href="../../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html" title="class in org.apache.hadoop.hbase.util">AbstractHBaseTool</a> in <a href="../../../../../../org/apache/hadoop/hbase/tool/package-summary.html">org.apache.hadoop.hbase.tool</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">PreUpgradeValidator</a></span></code>
+<div class="block">Tool for validating that cluster can be upgraded from HBase 1.x to 2.0</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.util">
 <!--   -->
 </a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 1f8660c..9cb748f 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -532,14 +532,14 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/util/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-use.html b/devapidocs/org/apache/hadoop/hbase/util/package-use.html
index 0ea489a..5c5deb1 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-use.html
@@ -1551,6 +1551,11 @@ service.</div>
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/AbstractHBaseTool.html#org.apache.hadoop.hbase.tool">AbstractHBaseTool</a>
+<div class="block">Common base class used for HBase command-line tools.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/Pair.html#org.apache.hadoop.hbase.tool">Pair</a>
 <div class="block">A generic class for pairs.</div>
 </td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.Entry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.Entry.html b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.Entry.html
index 296589b..4edf533 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.Entry.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.Entry.html
@@ -463,24 +463,28 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <td class="colLast"><span class="typeNameLabel">ReplicationSourceWALReader.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#filterEntry-org.apache.hadoop.hbase.wal.WAL.Entry-">filterEntry</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private long</code></td>
-<td class="colLast"><span class="typeNameLabel">ReplicationSourceWALReader.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#getEntrySize-org.apache.hadoop.hbase.wal.WAL.Entry-">getEntrySize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</code>&nbsp;</td>
+<td class="colFirst"><code>static long</code></td>
+<td class="colLast"><span class="typeNameLabel">ReplicationSourceWALReader.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#getEntrySizeExcludeBulkLoad-org.apache.hadoop.hbase.wal.WAL.Entry-">getEntrySizeExcludeBulkLoad</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><span class="typeNameLabel">ReplicationSourceWALReader.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#getEntrySizeIncludeBulkLoad-org.apache.hadoop.hbase.wal.WAL.Entry-">getEntrySizeIncludeBulkLoad</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#getEstimatedEntrySize-org.apache.hadoop.hbase.wal.WAL.Entry-">getEstimatedEntrySize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;e)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionReplicaReplicationEndpoint.RegionReplicaOutputSink.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.RegionReplicaOutputSink.html#keepRegionEvent-org.apache.hadoop.hbase.wal.WAL.Entry-">keepRegionEvent</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationSourceWALReader.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#updateBatchStats-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-org.apache.hadoop.hbase.wal.WAL.Entry-long-">updateBatchStats</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch,
                 <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry,
                 long&nbsp;entrySize)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">SerialReplicationChecker.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/SerialReplicationChecker.html#waitUntilCanPush-org.apache.hadoop.hbase.wal.WAL.Entry-org.apache.hadoop.hbase.Cell-">waitUntilCanPush</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry,
                 <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;firstCellInEdit)</code>&nbsp;</td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALEdit.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALEdit.html b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALEdit.html
index 3780f39..9f2d680 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALEdit.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALEdit.html
@@ -694,22 +694,16 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>private int</code></td>
-<td class="colLast"><span class="typeNameLabel">ReplicationSourceWALReader.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#calculateTotalSizeOfStoreFiles-org.apache.hadoop.hbase.wal.WALEdit-">calculateTotalSizeOfStoreFiles</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</code>
-<div class="block">Calculate the total size of all the store files</div>
-</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationSourceShipper.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#cleanUpHFileRefs-org.apache.hadoop.hbase.wal.WALEdit-">cleanUpHFileRefs</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationSourceWALReader.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#countDistinctRowKeysAndHFiles-org.apache.hadoop.hbase.wal.WALEdit-">countDistinctRowKeysAndHFiles</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</code>
 <div class="block">Count the number of different row keys in the given edit because of mini-batching.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) static void</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationSourceWALActionListener.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALActionListener.html#scopeWALEdits-org.apache.hadoop.hbase.wal.WALKey-org.apache.hadoop.hbase.wal.WALEdit-org.apache.hadoop.conf.Configuration-">scopeWALEdits</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALKey.html" title="interface in org.apache.hadoop.hbase.wal">WALKey</a>&nbsp;logKey,
              <a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;logEdit,
@@ -717,6 +711,12 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <div class="block">Utility method used to set the correct scopes on each log key.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><span class="typeNameLabel">ReplicationSourceWALReader.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#sizeOfStoreFilesIncludeBulkLoad-org.apache.hadoop.hbase.wal.WALEdit-">sizeOfStoreFilesIncludeBulkLoad</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</code>
+<div class="block">Calculate the total size of all the store files</div>
+</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationSourceWALActionListener.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALActionListener.html#visitLogEntryBeforeWrite-org.apache.hadoop.hbase.wal.WALKey-org.apache.hadoop.hbase.wal.WALEdit-">visitLogEntryBeforeWrite</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALKey.html" title="interface in org.apache.hadoop.hbase.wal">WALKey</a>&nbsp;logKey,

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html b/devapidocs/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html
index 39e81a7..9d30629 100644
--- a/devapidocs/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html
+++ b/devapidocs/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html
@@ -311,7 +311,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html#line.62">start</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html#line.63">start</a>()</pre>
 <div class="block">Starts the tracking of whether master is in Maintenance Mode.</div>
 </li>
 </ul>
@@ -321,7 +321,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>nodeCreated</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html#line.68">nodeCreated</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;path)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html#line.69">nodeCreated</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;path)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeCreated-java.lang.String-">ZKListener</a></code></span></div>
 <div class="block">Called when a new node has been created.</div>
 <dl>
@@ -338,7 +338,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>nodeDeleted</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html#line.73">nodeDeleted</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;path)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html#line.74">nodeDeleted</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;path)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeDeleted-java.lang.String-">ZKListener</a></code></span></div>
 <div class="block">Called when a node has been deleted</div>
 <dl>
@@ -355,7 +355,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>nodeChildrenChanged</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html#line.78">nodeChildrenChanged</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;path)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html#line.79">nodeChildrenChanged</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;path)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeChildrenChanged-java.lang.String-">ZKListener</a></code></span></div>
 <div class="block">Called when an existing node has a child node added or removed.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html b/devapidocs/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html
index 633f32f..cd0b50b 100644
--- a/devapidocs/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html
+++ b/devapidocs/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html
@@ -808,7 +808,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaRegionState</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html#line.478">getMetaRegionState</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw)
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html#line.479">getMetaRegionState</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw)
                                       throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Load the meta region state from the meta server ZNode.</div>
 <dl>
@@ -823,7 +823,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaRegionState</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html#line.490">getMetaRegionState</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html#line.491">getMetaRegionState</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                              int&nbsp;replicaId)
                                       throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Load the meta region state from the meta server ZNode.</div>
@@ -844,7 +844,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteMetaLocation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html#line.534">deleteMetaLocation</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zookeeper)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html#line.535">deleteMetaLocation</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zookeeper)
                         throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Deletes the location of <code>hbase:meta</code> in ZooKeeper.</div>
 <dl>
@@ -861,7 +861,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteMetaLocation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html#line.539">deleteMetaLocation</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zookeeper,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html#line.540">deleteMetaLocation</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zookeeper,
                                int&nbsp;replicaId)
                         throws org.apache.zookeeper.KeeperException</pre>
 <dl>
@@ -876,7 +876,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>blockUntilAvailable</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html#line.563">blockUntilAvailable</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html#line.564">blockUntilAvailable</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                             long&nbsp;timeout,
                                             org.apache.hadoop.conf.Configuration&nbsp;conf)
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -900,7 +900,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>blockUntilAvailable</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html#line.598">blockUntilAvailable</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html#line.599">blockUntilAvailable</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                       long&nbsp;timeout)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Wait until the meta region is available and is not in transition.</div>
@@ -921,7 +921,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>blockUntilAvailable</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html#line.612">blockUntilAvailable</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html#line.613">blockUntilAvailable</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                       int&nbsp;replicaId,
                                       long&nbsp;timeout)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -944,7 +944,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html#line.639">stop</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html#line.640">stop</a>()</pre>
 <div class="block">Stop working.
  Interrupts any ongoing waits.</div>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKMainServer.HACK_UNTIL_ZOOKEEPER_1897_ZooKeeperMain.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKMainServer.HACK_UNTIL_ZOOKEEPER_1897_ZooKeeperMain.html b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKMainServer.HACK_UNTIL_ZOOKEEPER_1897_ZooKeeperMain.html
index 293d673..66f3481 100644
--- a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKMainServer.HACK_UNTIL_ZOOKEEPER_1897_ZooKeeperMain.html
+++ b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKMainServer.HACK_UNTIL_ZOOKEEPER_1897_ZooKeeperMain.html
@@ -244,9 +244,9 @@ extends org.apache.zookeeper.ZooKeeperMain</pre>
 <div class="block">Run the command-line args passed.  Calls System.exit when done.</div>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.zookeeper.KeeperException</code></dd>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></code></dd>
+<dd><code>org.apache.zookeeper.KeeperException</code> - if an unexpected ZooKeeper exception happens</dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - in case of a network failure</dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></code> - if the ZooKeeper client closes</dd>
 </dl>
 </li>
 </ul>


[28/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.GetDataAsyncCallback.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.GetDataAsyncCallback.html b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.GetDataAsyncCallback.html
index 6cadf75..5167ba6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.GetDataAsyncCallback.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.GetDataAsyncCallback.html
@@ -105,7 +105,7 @@
 <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 nodeChildrenChanged(String path) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    if (path.equals(watcher.znodePaths.splitLogZNode)) {<a name="line.100"></a>
+<span class="sourceLineNo">100</span>    if (path.equals(watcher.getZNodePaths().splitLogZNode)) {<a name="line.100"></a>
 <span class="sourceLineNo">101</span>      if (LOG.isTraceEnabled()) {<a name="line.101"></a>
 <span class="sourceLineNo">102</span>        LOG.trace("tasks arrived or departed on " + path);<a name="line.102"></a>
 <span class="sourceLineNo">103</span>      }<a name="line.103"></a>
@@ -339,7 +339,7 @@
 <span class="sourceLineNo">331</span>    int availableRSs = 1;<a name="line.331"></a>
 <span class="sourceLineNo">332</span>    try {<a name="line.332"></a>
 <span class="sourceLineNo">333</span>      List&lt;String&gt; regionServers =<a name="line.333"></a>
-<span class="sourceLineNo">334</span>          ZKUtil.listChildrenNoWatch(watcher, watcher.znodePaths.rsZNode);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>          ZKUtil.listChildrenNoWatch(watcher, watcher.getZNodePaths().rsZNode);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>      availableRSs = Math.max(availableRSs, (regionServers == null) ? 0 : regionServers.size());<a name="line.335"></a>
 <span class="sourceLineNo">336</span>    } catch (KeeperException e) {<a name="line.336"></a>
 <span class="sourceLineNo">337</span>      // do nothing<a name="line.337"></a>
@@ -420,7 +420,7 @@
 <span class="sourceLineNo">412</span>      List&lt;String&gt; paths;<a name="line.412"></a>
 <span class="sourceLineNo">413</span>      paths = getTaskList();<a name="line.413"></a>
 <span class="sourceLineNo">414</span>      if (paths == null) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        LOG.warn("Could not get tasks, did someone remove " + watcher.znodePaths.splitLogZNode<a name="line.415"></a>
+<span class="sourceLineNo">415</span>        LOG.warn("Could not get tasks, did someone remove " + watcher.getZNodePaths().splitLogZNode<a name="line.415"></a>
 <span class="sourceLineNo">416</span>            + " ... worker thread exiting.");<a name="line.416"></a>
 <span class="sourceLineNo">417</span>        return;<a name="line.417"></a>
 <span class="sourceLineNo">418</span>      }<a name="line.418"></a>
@@ -447,7 +447,7 @@
 <span class="sourceLineNo">439</span>            // don't call ZKSplitLog.getNodeName() because that will lead to<a name="line.439"></a>
 <span class="sourceLineNo">440</span>            // double encoding of the path name<a name="line.440"></a>
 <span class="sourceLineNo">441</span>            taskGrabbed |= grabTask(ZNodePaths.joinZNode(<a name="line.441"></a>
-<span class="sourceLineNo">442</span>                watcher.znodePaths.splitLogZNode, paths.get(idx)));<a name="line.442"></a>
+<span class="sourceLineNo">442</span>                watcher.getZNodePaths().splitLogZNode, paths.get(idx)));<a name="line.442"></a>
 <span class="sourceLineNo">443</span>            break;<a name="line.443"></a>
 <span class="sourceLineNo">444</span>          } else {<a name="line.444"></a>
 <span class="sourceLineNo">445</span>            LOG.debug("Current region server " + server.getServerName() + " has "<a name="line.445"></a>
@@ -480,14 +480,14 @@
 <span class="sourceLineNo">472</span>    while (!shouldStop) {<a name="line.472"></a>
 <span class="sourceLineNo">473</span>      try {<a name="line.473"></a>
 <span class="sourceLineNo">474</span>        childrenPaths = ZKUtil.listChildrenAndWatchForNewChildren(watcher,<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          watcher.znodePaths.splitLogZNode);<a name="line.475"></a>
+<span class="sourceLineNo">475</span>          watcher.getZNodePaths().splitLogZNode);<a name="line.475"></a>
 <span class="sourceLineNo">476</span>        if (childrenPaths != null) {<a name="line.476"></a>
 <span class="sourceLineNo">477</span>          return childrenPaths;<a name="line.477"></a>
 <span class="sourceLineNo">478</span>        }<a name="line.478"></a>
 <span class="sourceLineNo">479</span>      } catch (KeeperException e) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        LOG.warn("Could not get children of znode " + watcher.znodePaths.splitLogZNode, e);<a name="line.480"></a>
+<span class="sourceLineNo">480</span>        LOG.warn("Could not get children of znode " + watcher.getZNodePaths().splitLogZNode, e);<a name="line.480"></a>
 <span class="sourceLineNo">481</span>      }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      LOG.debug("Retry listChildren of znode " + watcher.znodePaths.splitLogZNode<a name="line.482"></a>
+<span class="sourceLineNo">482</span>      LOG.debug("Retry listChildren of znode " + watcher.getZNodePaths().splitLogZNode<a name="line.482"></a>
 <span class="sourceLineNo">483</span>          + " after sleep for " + sleepTime + "ms!");<a name="line.483"></a>
 <span class="sourceLineNo">484</span>      Thread.sleep(sleepTime);<a name="line.484"></a>
 <span class="sourceLineNo">485</span>    }<a name="line.485"></a>
@@ -503,14 +503,14 @@
 <span class="sourceLineNo">495</span>  public boolean isReady() throws InterruptedException {<a name="line.495"></a>
 <span class="sourceLineNo">496</span>    int result = -1;<a name="line.496"></a>
 <span class="sourceLineNo">497</span>    try {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      result = ZKUtil.checkExists(watcher, watcher.znodePaths.splitLogZNode);<a name="line.498"></a>
+<span class="sourceLineNo">498</span>      result = ZKUtil.checkExists(watcher, watcher.getZNodePaths().splitLogZNode);<a name="line.498"></a>
 <span class="sourceLineNo">499</span>    } catch (KeeperException e) {<a name="line.499"></a>
 <span class="sourceLineNo">500</span>      // ignore<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      LOG.warn("Exception when checking for " + watcher.znodePaths.splitLogZNode<a name="line.501"></a>
+<span class="sourceLineNo">501</span>      LOG.warn("Exception when checking for " + watcher.getZNodePaths().splitLogZNode<a name="line.501"></a>
 <span class="sourceLineNo">502</span>          + " ... retrying", e);<a name="line.502"></a>
 <span class="sourceLineNo">503</span>    }<a name="line.503"></a>
 <span class="sourceLineNo">504</span>    if (result == -1) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      LOG.info(watcher.znodePaths.splitLogZNode<a name="line.505"></a>
+<span class="sourceLineNo">505</span>      LOG.info(watcher.getZNodePaths().splitLogZNode<a name="line.505"></a>
 <span class="sourceLineNo">506</span>          + " znode does not exist, waiting for master to create");<a name="line.506"></a>
 <span class="sourceLineNo">507</span>      Thread.sleep(1000);<a name="line.507"></a>
 <span class="sourceLineNo">508</span>    }<a name="line.508"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.ZkSplitTaskDetails.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.ZkSplitTaskDetails.html b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.ZkSplitTaskDetails.html
index 6cadf75..5167ba6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.ZkSplitTaskDetails.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.ZkSplitTaskDetails.html
@@ -105,7 +105,7 @@
 <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 nodeChildrenChanged(String path) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    if (path.equals(watcher.znodePaths.splitLogZNode)) {<a name="line.100"></a>
+<span class="sourceLineNo">100</span>    if (path.equals(watcher.getZNodePaths().splitLogZNode)) {<a name="line.100"></a>
 <span class="sourceLineNo">101</span>      if (LOG.isTraceEnabled()) {<a name="line.101"></a>
 <span class="sourceLineNo">102</span>        LOG.trace("tasks arrived or departed on " + path);<a name="line.102"></a>
 <span class="sourceLineNo">103</span>      }<a name="line.103"></a>
@@ -339,7 +339,7 @@
 <span class="sourceLineNo">331</span>    int availableRSs = 1;<a name="line.331"></a>
 <span class="sourceLineNo">332</span>    try {<a name="line.332"></a>
 <span class="sourceLineNo">333</span>      List&lt;String&gt; regionServers =<a name="line.333"></a>
-<span class="sourceLineNo">334</span>          ZKUtil.listChildrenNoWatch(watcher, watcher.znodePaths.rsZNode);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>          ZKUtil.listChildrenNoWatch(watcher, watcher.getZNodePaths().rsZNode);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>      availableRSs = Math.max(availableRSs, (regionServers == null) ? 0 : regionServers.size());<a name="line.335"></a>
 <span class="sourceLineNo">336</span>    } catch (KeeperException e) {<a name="line.336"></a>
 <span class="sourceLineNo">337</span>      // do nothing<a name="line.337"></a>
@@ -420,7 +420,7 @@
 <span class="sourceLineNo">412</span>      List&lt;String&gt; paths;<a name="line.412"></a>
 <span class="sourceLineNo">413</span>      paths = getTaskList();<a name="line.413"></a>
 <span class="sourceLineNo">414</span>      if (paths == null) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        LOG.warn("Could not get tasks, did someone remove " + watcher.znodePaths.splitLogZNode<a name="line.415"></a>
+<span class="sourceLineNo">415</span>        LOG.warn("Could not get tasks, did someone remove " + watcher.getZNodePaths().splitLogZNode<a name="line.415"></a>
 <span class="sourceLineNo">416</span>            + " ... worker thread exiting.");<a name="line.416"></a>
 <span class="sourceLineNo">417</span>        return;<a name="line.417"></a>
 <span class="sourceLineNo">418</span>      }<a name="line.418"></a>
@@ -447,7 +447,7 @@
 <span class="sourceLineNo">439</span>            // don't call ZKSplitLog.getNodeName() because that will lead to<a name="line.439"></a>
 <span class="sourceLineNo">440</span>            // double encoding of the path name<a name="line.440"></a>
 <span class="sourceLineNo">441</span>            taskGrabbed |= grabTask(ZNodePaths.joinZNode(<a name="line.441"></a>
-<span class="sourceLineNo">442</span>                watcher.znodePaths.splitLogZNode, paths.get(idx)));<a name="line.442"></a>
+<span class="sourceLineNo">442</span>                watcher.getZNodePaths().splitLogZNode, paths.get(idx)));<a name="line.442"></a>
 <span class="sourceLineNo">443</span>            break;<a name="line.443"></a>
 <span class="sourceLineNo">444</span>          } else {<a name="line.444"></a>
 <span class="sourceLineNo">445</span>            LOG.debug("Current region server " + server.getServerName() + " has "<a name="line.445"></a>
@@ -480,14 +480,14 @@
 <span class="sourceLineNo">472</span>    while (!shouldStop) {<a name="line.472"></a>
 <span class="sourceLineNo">473</span>      try {<a name="line.473"></a>
 <span class="sourceLineNo">474</span>        childrenPaths = ZKUtil.listChildrenAndWatchForNewChildren(watcher,<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          watcher.znodePaths.splitLogZNode);<a name="line.475"></a>
+<span class="sourceLineNo">475</span>          watcher.getZNodePaths().splitLogZNode);<a name="line.475"></a>
 <span class="sourceLineNo">476</span>        if (childrenPaths != null) {<a name="line.476"></a>
 <span class="sourceLineNo">477</span>          return childrenPaths;<a name="line.477"></a>
 <span class="sourceLineNo">478</span>        }<a name="line.478"></a>
 <span class="sourceLineNo">479</span>      } catch (KeeperException e) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        LOG.warn("Could not get children of znode " + watcher.znodePaths.splitLogZNode, e);<a name="line.480"></a>
+<span class="sourceLineNo">480</span>        LOG.warn("Could not get children of znode " + watcher.getZNodePaths().splitLogZNode, e);<a name="line.480"></a>
 <span class="sourceLineNo">481</span>      }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      LOG.debug("Retry listChildren of znode " + watcher.znodePaths.splitLogZNode<a name="line.482"></a>
+<span class="sourceLineNo">482</span>      LOG.debug("Retry listChildren of znode " + watcher.getZNodePaths().splitLogZNode<a name="line.482"></a>
 <span class="sourceLineNo">483</span>          + " after sleep for " + sleepTime + "ms!");<a name="line.483"></a>
 <span class="sourceLineNo">484</span>      Thread.sleep(sleepTime);<a name="line.484"></a>
 <span class="sourceLineNo">485</span>    }<a name="line.485"></a>
@@ -503,14 +503,14 @@
 <span class="sourceLineNo">495</span>  public boolean isReady() throws InterruptedException {<a name="line.495"></a>
 <span class="sourceLineNo">496</span>    int result = -1;<a name="line.496"></a>
 <span class="sourceLineNo">497</span>    try {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      result = ZKUtil.checkExists(watcher, watcher.znodePaths.splitLogZNode);<a name="line.498"></a>
+<span class="sourceLineNo">498</span>      result = ZKUtil.checkExists(watcher, watcher.getZNodePaths().splitLogZNode);<a name="line.498"></a>
 <span class="sourceLineNo">499</span>    } catch (KeeperException e) {<a name="line.499"></a>
 <span class="sourceLineNo">500</span>      // ignore<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      LOG.warn("Exception when checking for " + watcher.znodePaths.splitLogZNode<a name="line.501"></a>
+<span class="sourceLineNo">501</span>      LOG.warn("Exception when checking for " + watcher.getZNodePaths().splitLogZNode<a name="line.501"></a>
 <span class="sourceLineNo">502</span>          + " ... retrying", e);<a name="line.502"></a>
 <span class="sourceLineNo">503</span>    }<a name="line.503"></a>
 <span class="sourceLineNo">504</span>    if (result == -1) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      LOG.info(watcher.znodePaths.splitLogZNode<a name="line.505"></a>
+<span class="sourceLineNo">505</span>      LOG.info(watcher.getZNodePaths().splitLogZNode<a name="line.505"></a>
 <span class="sourceLineNo">506</span>          + " znode does not exist, waiting for master to create");<a name="line.506"></a>
 <span class="sourceLineNo">507</span>      Thread.sleep(1000);<a name="line.507"></a>
 <span class="sourceLineNo">508</span>    }<a name="line.508"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.html b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.html
index 6cadf75..5167ba6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.html
@@ -105,7 +105,7 @@
 <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 nodeChildrenChanged(String path) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    if (path.equals(watcher.znodePaths.splitLogZNode)) {<a name="line.100"></a>
+<span class="sourceLineNo">100</span>    if (path.equals(watcher.getZNodePaths().splitLogZNode)) {<a name="line.100"></a>
 <span class="sourceLineNo">101</span>      if (LOG.isTraceEnabled()) {<a name="line.101"></a>
 <span class="sourceLineNo">102</span>        LOG.trace("tasks arrived or departed on " + path);<a name="line.102"></a>
 <span class="sourceLineNo">103</span>      }<a name="line.103"></a>
@@ -339,7 +339,7 @@
 <span class="sourceLineNo">331</span>    int availableRSs = 1;<a name="line.331"></a>
 <span class="sourceLineNo">332</span>    try {<a name="line.332"></a>
 <span class="sourceLineNo">333</span>      List&lt;String&gt; regionServers =<a name="line.333"></a>
-<span class="sourceLineNo">334</span>          ZKUtil.listChildrenNoWatch(watcher, watcher.znodePaths.rsZNode);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>          ZKUtil.listChildrenNoWatch(watcher, watcher.getZNodePaths().rsZNode);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>      availableRSs = Math.max(availableRSs, (regionServers == null) ? 0 : regionServers.size());<a name="line.335"></a>
 <span class="sourceLineNo">336</span>    } catch (KeeperException e) {<a name="line.336"></a>
 <span class="sourceLineNo">337</span>      // do nothing<a name="line.337"></a>
@@ -420,7 +420,7 @@
 <span class="sourceLineNo">412</span>      List&lt;String&gt; paths;<a name="line.412"></a>
 <span class="sourceLineNo">413</span>      paths = getTaskList();<a name="line.413"></a>
 <span class="sourceLineNo">414</span>      if (paths == null) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        LOG.warn("Could not get tasks, did someone remove " + watcher.znodePaths.splitLogZNode<a name="line.415"></a>
+<span class="sourceLineNo">415</span>        LOG.warn("Could not get tasks, did someone remove " + watcher.getZNodePaths().splitLogZNode<a name="line.415"></a>
 <span class="sourceLineNo">416</span>            + " ... worker thread exiting.");<a name="line.416"></a>
 <span class="sourceLineNo">417</span>        return;<a name="line.417"></a>
 <span class="sourceLineNo">418</span>      }<a name="line.418"></a>
@@ -447,7 +447,7 @@
 <span class="sourceLineNo">439</span>            // don't call ZKSplitLog.getNodeName() because that will lead to<a name="line.439"></a>
 <span class="sourceLineNo">440</span>            // double encoding of the path name<a name="line.440"></a>
 <span class="sourceLineNo">441</span>            taskGrabbed |= grabTask(ZNodePaths.joinZNode(<a name="line.441"></a>
-<span class="sourceLineNo">442</span>                watcher.znodePaths.splitLogZNode, paths.get(idx)));<a name="line.442"></a>
+<span class="sourceLineNo">442</span>                watcher.getZNodePaths().splitLogZNode, paths.get(idx)));<a name="line.442"></a>
 <span class="sourceLineNo">443</span>            break;<a name="line.443"></a>
 <span class="sourceLineNo">444</span>          } else {<a name="line.444"></a>
 <span class="sourceLineNo">445</span>            LOG.debug("Current region server " + server.getServerName() + " has "<a name="line.445"></a>
@@ -480,14 +480,14 @@
 <span class="sourceLineNo">472</span>    while (!shouldStop) {<a name="line.472"></a>
 <span class="sourceLineNo">473</span>      try {<a name="line.473"></a>
 <span class="sourceLineNo">474</span>        childrenPaths = ZKUtil.listChildrenAndWatchForNewChildren(watcher,<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          watcher.znodePaths.splitLogZNode);<a name="line.475"></a>
+<span class="sourceLineNo">475</span>          watcher.getZNodePaths().splitLogZNode);<a name="line.475"></a>
 <span class="sourceLineNo">476</span>        if (childrenPaths != null) {<a name="line.476"></a>
 <span class="sourceLineNo">477</span>          return childrenPaths;<a name="line.477"></a>
 <span class="sourceLineNo">478</span>        }<a name="line.478"></a>
 <span class="sourceLineNo">479</span>      } catch (KeeperException e) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        LOG.warn("Could not get children of znode " + watcher.znodePaths.splitLogZNode, e);<a name="line.480"></a>
+<span class="sourceLineNo">480</span>        LOG.warn("Could not get children of znode " + watcher.getZNodePaths().splitLogZNode, e);<a name="line.480"></a>
 <span class="sourceLineNo">481</span>      }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      LOG.debug("Retry listChildren of znode " + watcher.znodePaths.splitLogZNode<a name="line.482"></a>
+<span class="sourceLineNo">482</span>      LOG.debug("Retry listChildren of znode " + watcher.getZNodePaths().splitLogZNode<a name="line.482"></a>
 <span class="sourceLineNo">483</span>          + " after sleep for " + sleepTime + "ms!");<a name="line.483"></a>
 <span class="sourceLineNo">484</span>      Thread.sleep(sleepTime);<a name="line.484"></a>
 <span class="sourceLineNo">485</span>    }<a name="line.485"></a>
@@ -503,14 +503,14 @@
 <span class="sourceLineNo">495</span>  public boolean isReady() throws InterruptedException {<a name="line.495"></a>
 <span class="sourceLineNo">496</span>    int result = -1;<a name="line.496"></a>
 <span class="sourceLineNo">497</span>    try {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      result = ZKUtil.checkExists(watcher, watcher.znodePaths.splitLogZNode);<a name="line.498"></a>
+<span class="sourceLineNo">498</span>      result = ZKUtil.checkExists(watcher, watcher.getZNodePaths().splitLogZNode);<a name="line.498"></a>
 <span class="sourceLineNo">499</span>    } catch (KeeperException e) {<a name="line.499"></a>
 <span class="sourceLineNo">500</span>      // ignore<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      LOG.warn("Exception when checking for " + watcher.znodePaths.splitLogZNode<a name="line.501"></a>
+<span class="sourceLineNo">501</span>      LOG.warn("Exception when checking for " + watcher.getZNodePaths().splitLogZNode<a name="line.501"></a>
 <span class="sourceLineNo">502</span>          + " ... retrying", e);<a name="line.502"></a>
 <span class="sourceLineNo">503</span>    }<a name="line.503"></a>
 <span class="sourceLineNo">504</span>    if (result == -1) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      LOG.info(watcher.znodePaths.splitLogZNode<a name="line.505"></a>
+<span class="sourceLineNo">505</span>      LOG.info(watcher.getZNodePaths().splitLogZNode<a name="line.505"></a>
 <span class="sourceLineNo">506</span>          + " znode does not exist, waiting for master to create");<a name="line.506"></a>
 <span class="sourceLineNo">507</span>      Thread.sleep(1000);<a name="line.507"></a>
 <span class="sourceLineNo">508</span>    }<a name="line.508"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/master/ActiveMasterManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/ActiveMasterManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/ActiveMasterManager.html
index 4dcf522..e6aa77f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/ActiveMasterManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/ActiveMasterManager.html
@@ -101,7 +101,7 @@
 <span class="sourceLineNo">093</span>    // shut down, so that state is now irrelevant. This means that the shutdown<a name="line.93"></a>
 <span class="sourceLineNo">094</span>    // state must be set while we wait on the active master in order<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    // to shutdown this master. See HBASE-8519.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    if(path.equals(watcher.znodePaths.clusterStateZNode) &amp;&amp; !master.isStopped()) {<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    if(path.equals(watcher.getZNodePaths().clusterStateZNode) &amp;&amp; !master.isStopped()) {<a name="line.96"></a>
 <span class="sourceLineNo">097</span>      clusterShutDown.set(true);<a name="line.97"></a>
 <span class="sourceLineNo">098</span>    }<a name="line.98"></a>
 <span class="sourceLineNo">099</span><a name="line.99"></a>
@@ -109,7 +109,7 @@
 <span class="sourceLineNo">101</span>  }<a name="line.101"></a>
 <span class="sourceLineNo">102</span><a name="line.102"></a>
 <span class="sourceLineNo">103</span>  void handle(final String path) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    if (path.equals(watcher.znodePaths.masterAddressZNode) &amp;&amp; !master.isStopped()) {<a name="line.104"></a>
+<span class="sourceLineNo">104</span>    if (path.equals(watcher.getZNodePaths().masterAddressZNode) &amp;&amp; !master.isStopped()) {<a name="line.104"></a>
 <span class="sourceLineNo">105</span>      handleMasterNodeChange();<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>
@@ -131,7 +131,7 @@
 <span class="sourceLineNo">123</span>    // Watch the node and check if it exists.<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    try {<a name="line.124"></a>
 <span class="sourceLineNo">125</span>      synchronized(clusterHasActiveMaster) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        if (ZKUtil.watchAndCheckExists(watcher, watcher.znodePaths.masterAddressZNode)) {<a name="line.126"></a>
+<span class="sourceLineNo">126</span>        if (ZKUtil.watchAndCheckExists(watcher, watcher.getZNodePaths().masterAddressZNode)) {<a name="line.126"></a>
 <span class="sourceLineNo">127</span>          // A master node exists, there is an active master<a name="line.127"></a>
 <span class="sourceLineNo">128</span>          LOG.trace("A master is now available");<a name="line.128"></a>
 <span class="sourceLineNo">129</span>          clusterHasActiveMaster.set(true);<a name="line.129"></a>
@@ -165,14 +165,14 @@
 <span class="sourceLineNo">157</span>  boolean blockUntilBecomingActiveMaster(<a name="line.157"></a>
 <span class="sourceLineNo">158</span>      int checkInterval, MonitoredTask startupStatus) {<a name="line.158"></a>
 <span class="sourceLineNo">159</span>    String backupZNode = ZNodePaths.joinZNode(<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      this.watcher.znodePaths.backupMasterAddressesZNode, this.sn.toString());<a name="line.160"></a>
+<span class="sourceLineNo">160</span>      this.watcher.getZNodePaths().backupMasterAddressesZNode, this.sn.toString());<a name="line.160"></a>
 <span class="sourceLineNo">161</span>    while (!(master.isAborted() || master.isStopped())) {<a name="line.161"></a>
 <span class="sourceLineNo">162</span>      startupStatus.setStatus("Trying to register in ZK as active master");<a name="line.162"></a>
 <span class="sourceLineNo">163</span>      // Try to become the active master, watch if there is another master.<a name="line.163"></a>
 <span class="sourceLineNo">164</span>      // Write out our ServerName as versioned bytes.<a name="line.164"></a>
 <span class="sourceLineNo">165</span>      try {<a name="line.165"></a>
 <span class="sourceLineNo">166</span>        if (MasterAddressTracker.setMasterAddress(this.watcher,<a name="line.166"></a>
-<span class="sourceLineNo">167</span>            this.watcher.znodePaths.masterAddressZNode, this.sn, infoPort)) {<a name="line.167"></a>
+<span class="sourceLineNo">167</span>            this.watcher.getZNodePaths().masterAddressZNode, this.sn, infoPort)) {<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
 <span class="sourceLineNo">169</span>          // If we were a backup master before, delete our ZNode from the backup<a name="line.169"></a>
 <span class="sourceLineNo">170</span>          // master directory since we are the active now)<a name="line.170"></a>
@@ -196,7 +196,7 @@
 <span class="sourceLineNo">188</span><a name="line.188"></a>
 <span class="sourceLineNo">189</span>        String msg;<a name="line.189"></a>
 <span class="sourceLineNo">190</span>        byte[] bytes =<a name="line.190"></a>
-<span class="sourceLineNo">191</span>          ZKUtil.getDataAndWatch(this.watcher, this.watcher.znodePaths.masterAddressZNode);<a name="line.191"></a>
+<span class="sourceLineNo">191</span>          ZKUtil.getDataAndWatch(this.watcher, this.watcher.getZNodePaths().masterAddressZNode);<a name="line.191"></a>
 <span class="sourceLineNo">192</span>        if (bytes == null) {<a name="line.192"></a>
 <span class="sourceLineNo">193</span>          msg = ("A master was detected, but went down before its address " +<a name="line.193"></a>
 <span class="sourceLineNo">194</span>            "could be read.  Attempting to become the next active master");<a name="line.194"></a>
@@ -213,7 +213,7 @@
 <span class="sourceLineNo">205</span>            msg = ("Current master has this master's address, " +<a name="line.205"></a>
 <span class="sourceLineNo">206</span>              currentMaster + "; master was restarted? Deleting node.");<a name="line.206"></a>
 <span class="sourceLineNo">207</span>            // Hurry along the expiration of the znode.<a name="line.207"></a>
-<span class="sourceLineNo">208</span>            ZKUtil.deleteNode(this.watcher, this.watcher.znodePaths.masterAddressZNode);<a name="line.208"></a>
+<span class="sourceLineNo">208</span>            ZKUtil.deleteNode(this.watcher, this.watcher.getZNodePaths().masterAddressZNode);<a name="line.208"></a>
 <span class="sourceLineNo">209</span><a name="line.209"></a>
 <span class="sourceLineNo">210</span>            // We may have failed to delete the znode at the previous step, but<a name="line.210"></a>
 <span class="sourceLineNo">211</span>            //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.211"></a>
@@ -253,7 +253,7 @@
 <span class="sourceLineNo">245</span>   */<a name="line.245"></a>
 <span class="sourceLineNo">246</span>  boolean hasActiveMaster() {<a name="line.246"></a>
 <span class="sourceLineNo">247</span>    try {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      if (ZKUtil.checkExists(watcher, watcher.znodePaths.masterAddressZNode) &gt;= 0) {<a name="line.248"></a>
+<span class="sourceLineNo">248</span>      if (ZKUtil.checkExists(watcher, watcher.getZNodePaths().masterAddressZNode) &gt;= 0) {<a name="line.248"></a>
 <span class="sourceLineNo">249</span>        return true;<a name="line.249"></a>
 <span class="sourceLineNo">250</span>      }<a name="line.250"></a>
 <span class="sourceLineNo">251</span>    }<a name="line.251"></a>
@@ -279,7 +279,7 @@
 <span class="sourceLineNo">271</span>        LOG.warn("Failed get of master address: " + e.toString());<a name="line.271"></a>
 <span class="sourceLineNo">272</span>      }<a name="line.272"></a>
 <span class="sourceLineNo">273</span>      if (activeMaster != null &amp;&amp;  activeMaster.equals(this.sn)) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        ZKUtil.deleteNode(watcher, watcher.znodePaths.masterAddressZNode);<a name="line.274"></a>
+<span class="sourceLineNo">274</span>        ZKUtil.deleteNode(watcher, watcher.getZNodePaths().masterAddressZNode);<a name="line.274"></a>
 <span class="sourceLineNo">275</span>        // We may have failed to delete the znode at the previous step, but<a name="line.275"></a>
 <span class="sourceLineNo">276</span>        //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.276"></a>
 <span class="sourceLineNo">277</span>        ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.277"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/master/DrainingServerTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/DrainingServerTracker.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/DrainingServerTracker.html
index 8ff270d..7abd095 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/DrainingServerTracker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/DrainingServerTracker.html
@@ -91,7 +91,7 @@
 <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>    List&lt;String&gt; servers =<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      ZKUtil.listChildrenAndWatchThem(watcher, watcher.znodePaths.drainingZNode);<a name="line.86"></a>
+<span class="sourceLineNo">086</span>      ZKUtil.listChildrenAndWatchThem(watcher, watcher.getZNodePaths().drainingZNode);<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    add(servers);<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>
@@ -118,7 +118,7 @@
 <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 void nodeDeleted(final String path) {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    if(path.startsWith(watcher.znodePaths.drainingZNode)) {<a name="line.113"></a>
+<span class="sourceLineNo">113</span>    if(path.startsWith(watcher.getZNodePaths().drainingZNode)) {<a name="line.113"></a>
 <span class="sourceLineNo">114</span>      final ServerName sn = ServerName.valueOf(ZKUtil.getNodeName(path));<a name="line.114"></a>
 <span class="sourceLineNo">115</span>      LOG.info("Draining RS node deleted, removing from list [" +<a name="line.115"></a>
 <span class="sourceLineNo">116</span>          sn + "]");<a name="line.116"></a>
@@ -128,10 +128,10 @@
 <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 void nodeChildrenChanged(final String path) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    if(path.equals(watcher.znodePaths.drainingZNode)) {<a name="line.123"></a>
+<span class="sourceLineNo">123</span>    if(path.equals(watcher.getZNodePaths().drainingZNode)) {<a name="line.123"></a>
 <span class="sourceLineNo">124</span>      try {<a name="line.124"></a>
 <span class="sourceLineNo">125</span>        final List&lt;String&gt; newNodes =<a name="line.125"></a>
-<span class="sourceLineNo">126</span>          ZKUtil.listChildrenAndWatchThem(watcher, watcher.znodePaths.drainingZNode);<a name="line.126"></a>
+<span class="sourceLineNo">126</span>          ZKUtil.listChildrenAndWatchThem(watcher, watcher.getZNodePaths().drainingZNode);<a name="line.126"></a>
 <span class="sourceLineNo">127</span>        add(newNodes);<a name="line.127"></a>
 <span class="sourceLineNo">128</span>      } catch (KeeperException e) {<a name="line.128"></a>
 <span class="sourceLineNo">129</span>        abortable.abort("Unexpected zk exception getting RS nodes", e);<a name="line.129"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
index adaa381..aa48364 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
@@ -2033,7 +2033,7 @@
 <span class="sourceLineNo">2025</span><a name="line.2025"></a>
 <span class="sourceLineNo">2026</span>  private void startActiveMasterManager(int infoPort) throws KeeperException {<a name="line.2026"></a>
 <span class="sourceLineNo">2027</span>    String backupZNode = ZNodePaths.joinZNode(<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>      zooKeeper.znodePaths.backupMasterAddressesZNode, serverName.toString());<a name="line.2028"></a>
+<span class="sourceLineNo">2028</span>      zooKeeper.getZNodePaths().backupMasterAddressesZNode, serverName.toString());<a name="line.2028"></a>
 <span class="sourceLineNo">2029</span>    /*<a name="line.2029"></a>
 <span class="sourceLineNo">2030</span>    * Add a ZNode for ourselves in the backup master directory since we<a name="line.2030"></a>
 <span class="sourceLineNo">2031</span>    * may not become the active master. If so, we want the actual active<a name="line.2031"></a>
@@ -2546,7 +2546,7 @@
 <span class="sourceLineNo">2538</span>    List&lt;String&gt; backupMasterStrings;<a name="line.2538"></a>
 <span class="sourceLineNo">2539</span>    try {<a name="line.2539"></a>
 <span class="sourceLineNo">2540</span>      backupMasterStrings = ZKUtil.listChildrenNoWatch(this.zooKeeper,<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>        this.zooKeeper.znodePaths.backupMasterAddressesZNode);<a name="line.2541"></a>
+<span class="sourceLineNo">2541</span>        this.zooKeeper.getZNodePaths().backupMasterAddressesZNode);<a name="line.2541"></a>
 <span class="sourceLineNo">2542</span>    } catch (KeeperException e) {<a name="line.2542"></a>
 <span class="sourceLineNo">2543</span>      LOG.warn(this.zooKeeper.prefix("Unable to list backup servers"), e);<a name="line.2543"></a>
 <span class="sourceLineNo">2544</span>      backupMasterStrings = null;<a name="line.2544"></a>
@@ -2560,7 +2560,7 @@
 <span class="sourceLineNo">2552</span>          byte [] bytes;<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>          try {<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>            bytes = ZKUtil.getData(this.zooKeeper, ZNodePaths.joinZNode(<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>                this.zooKeeper.znodePaths.backupMasterAddressesZNode, s));<a name="line.2555"></a>
+<span class="sourceLineNo">2555</span>                this.zooKeeper.getZNodePaths().backupMasterAddressesZNode, s));<a name="line.2555"></a>
 <span class="sourceLineNo">2556</span>          } catch (InterruptedException e) {<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>            throw new InterruptedIOException();<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>          }<a name="line.2558"></a>
@@ -3508,7 +3508,7 @@
 <span class="sourceLineNo">3500</span>      throws HBaseIOException {<a name="line.3500"></a>
 <span class="sourceLineNo">3501</span>    List&lt;ServerName&gt; serversAdded = new ArrayList&lt;&gt;(servers.size());<a name="line.3501"></a>
 <span class="sourceLineNo">3502</span>    // Place the decommission marker first.<a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>    String parentZnode = getZooKeeper().znodePaths.drainingZNode;<a name="line.3503"></a>
+<span class="sourceLineNo">3503</span>    String parentZnode = getZooKeeper().getZNodePaths().drainingZNode;<a name="line.3503"></a>
 <span class="sourceLineNo">3504</span>    for (ServerName server : servers) {<a name="line.3504"></a>
 <span class="sourceLineNo">3505</span>      try {<a name="line.3505"></a>
 <span class="sourceLineNo">3506</span>        String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3506"></a>
@@ -3557,7 +3557,7 @@
 <span class="sourceLineNo">3549</span>  public void recommissionRegionServer(final ServerName server,<a name="line.3549"></a>
 <span class="sourceLineNo">3550</span>      final List&lt;byte[]&gt; encodedRegionNames) throws HBaseIOException {<a name="line.3550"></a>
 <span class="sourceLineNo">3551</span>    // Remove the server from decommissioned (draining) server list.<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>    String parentZnode = getZooKeeper().znodePaths.drainingZNode;<a name="line.3552"></a>
+<span class="sourceLineNo">3552</span>    String parentZnode = getZooKeeper().getZNodePaths().drainingZNode;<a name="line.3552"></a>
 <span class="sourceLineNo">3553</span>    String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3553"></a>
 <span class="sourceLineNo">3554</span>    try {<a name="line.3554"></a>
 <span class="sourceLineNo">3555</span>      ZKUtil.deleteNodeFailSilent(getZooKeeper(), node);<a name="line.3555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
index adaa381..aa48364 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
@@ -2033,7 +2033,7 @@
 <span class="sourceLineNo">2025</span><a name="line.2025"></a>
 <span class="sourceLineNo">2026</span>  private void startActiveMasterManager(int infoPort) throws KeeperException {<a name="line.2026"></a>
 <span class="sourceLineNo">2027</span>    String backupZNode = ZNodePaths.joinZNode(<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>      zooKeeper.znodePaths.backupMasterAddressesZNode, serverName.toString());<a name="line.2028"></a>
+<span class="sourceLineNo">2028</span>      zooKeeper.getZNodePaths().backupMasterAddressesZNode, serverName.toString());<a name="line.2028"></a>
 <span class="sourceLineNo">2029</span>    /*<a name="line.2029"></a>
 <span class="sourceLineNo">2030</span>    * Add a ZNode for ourselves in the backup master directory since we<a name="line.2030"></a>
 <span class="sourceLineNo">2031</span>    * may not become the active master. If so, we want the actual active<a name="line.2031"></a>
@@ -2546,7 +2546,7 @@
 <span class="sourceLineNo">2538</span>    List&lt;String&gt; backupMasterStrings;<a name="line.2538"></a>
 <span class="sourceLineNo">2539</span>    try {<a name="line.2539"></a>
 <span class="sourceLineNo">2540</span>      backupMasterStrings = ZKUtil.listChildrenNoWatch(this.zooKeeper,<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>        this.zooKeeper.znodePaths.backupMasterAddressesZNode);<a name="line.2541"></a>
+<span class="sourceLineNo">2541</span>        this.zooKeeper.getZNodePaths().backupMasterAddressesZNode);<a name="line.2541"></a>
 <span class="sourceLineNo">2542</span>    } catch (KeeperException e) {<a name="line.2542"></a>
 <span class="sourceLineNo">2543</span>      LOG.warn(this.zooKeeper.prefix("Unable to list backup servers"), e);<a name="line.2543"></a>
 <span class="sourceLineNo">2544</span>      backupMasterStrings = null;<a name="line.2544"></a>
@@ -2560,7 +2560,7 @@
 <span class="sourceLineNo">2552</span>          byte [] bytes;<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>          try {<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>            bytes = ZKUtil.getData(this.zooKeeper, ZNodePaths.joinZNode(<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>                this.zooKeeper.znodePaths.backupMasterAddressesZNode, s));<a name="line.2555"></a>
+<span class="sourceLineNo">2555</span>                this.zooKeeper.getZNodePaths().backupMasterAddressesZNode, s));<a name="line.2555"></a>
 <span class="sourceLineNo">2556</span>          } catch (InterruptedException e) {<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>            throw new InterruptedIOException();<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>          }<a name="line.2558"></a>
@@ -3508,7 +3508,7 @@
 <span class="sourceLineNo">3500</span>      throws HBaseIOException {<a name="line.3500"></a>
 <span class="sourceLineNo">3501</span>    List&lt;ServerName&gt; serversAdded = new ArrayList&lt;&gt;(servers.size());<a name="line.3501"></a>
 <span class="sourceLineNo">3502</span>    // Place the decommission marker first.<a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>    String parentZnode = getZooKeeper().znodePaths.drainingZNode;<a name="line.3503"></a>
+<span class="sourceLineNo">3503</span>    String parentZnode = getZooKeeper().getZNodePaths().drainingZNode;<a name="line.3503"></a>
 <span class="sourceLineNo">3504</span>    for (ServerName server : servers) {<a name="line.3504"></a>
 <span class="sourceLineNo">3505</span>      try {<a name="line.3505"></a>
 <span class="sourceLineNo">3506</span>        String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3506"></a>
@@ -3557,7 +3557,7 @@
 <span class="sourceLineNo">3549</span>  public void recommissionRegionServer(final ServerName server,<a name="line.3549"></a>
 <span class="sourceLineNo">3550</span>      final List&lt;byte[]&gt; encodedRegionNames) throws HBaseIOException {<a name="line.3550"></a>
 <span class="sourceLineNo">3551</span>    // Remove the server from decommissioned (draining) server list.<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>    String parentZnode = getZooKeeper().znodePaths.drainingZNode;<a name="line.3552"></a>
+<span class="sourceLineNo">3552</span>    String parentZnode = getZooKeeper().getZNodePaths().drainingZNode;<a name="line.3552"></a>
 <span class="sourceLineNo">3553</span>    String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3553"></a>
 <span class="sourceLineNo">3554</span>    try {<a name="line.3554"></a>
 <span class="sourceLineNo">3555</span>      ZKUtil.deleteNodeFailSilent(getZooKeeper(), node);<a name="line.3555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
index adaa381..aa48364 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
@@ -2033,7 +2033,7 @@
 <span class="sourceLineNo">2025</span><a name="line.2025"></a>
 <span class="sourceLineNo">2026</span>  private void startActiveMasterManager(int infoPort) throws KeeperException {<a name="line.2026"></a>
 <span class="sourceLineNo">2027</span>    String backupZNode = ZNodePaths.joinZNode(<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>      zooKeeper.znodePaths.backupMasterAddressesZNode, serverName.toString());<a name="line.2028"></a>
+<span class="sourceLineNo">2028</span>      zooKeeper.getZNodePaths().backupMasterAddressesZNode, serverName.toString());<a name="line.2028"></a>
 <span class="sourceLineNo">2029</span>    /*<a name="line.2029"></a>
 <span class="sourceLineNo">2030</span>    * Add a ZNode for ourselves in the backup master directory since we<a name="line.2030"></a>
 <span class="sourceLineNo">2031</span>    * may not become the active master. If so, we want the actual active<a name="line.2031"></a>
@@ -2546,7 +2546,7 @@
 <span class="sourceLineNo">2538</span>    List&lt;String&gt; backupMasterStrings;<a name="line.2538"></a>
 <span class="sourceLineNo">2539</span>    try {<a name="line.2539"></a>
 <span class="sourceLineNo">2540</span>      backupMasterStrings = ZKUtil.listChildrenNoWatch(this.zooKeeper,<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>        this.zooKeeper.znodePaths.backupMasterAddressesZNode);<a name="line.2541"></a>
+<span class="sourceLineNo">2541</span>        this.zooKeeper.getZNodePaths().backupMasterAddressesZNode);<a name="line.2541"></a>
 <span class="sourceLineNo">2542</span>    } catch (KeeperException e) {<a name="line.2542"></a>
 <span class="sourceLineNo">2543</span>      LOG.warn(this.zooKeeper.prefix("Unable to list backup servers"), e);<a name="line.2543"></a>
 <span class="sourceLineNo">2544</span>      backupMasterStrings = null;<a name="line.2544"></a>
@@ -2560,7 +2560,7 @@
 <span class="sourceLineNo">2552</span>          byte [] bytes;<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>          try {<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>            bytes = ZKUtil.getData(this.zooKeeper, ZNodePaths.joinZNode(<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>                this.zooKeeper.znodePaths.backupMasterAddressesZNode, s));<a name="line.2555"></a>
+<span class="sourceLineNo">2555</span>                this.zooKeeper.getZNodePaths().backupMasterAddressesZNode, s));<a name="line.2555"></a>
 <span class="sourceLineNo">2556</span>          } catch (InterruptedException e) {<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>            throw new InterruptedIOException();<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>          }<a name="line.2558"></a>
@@ -3508,7 +3508,7 @@
 <span class="sourceLineNo">3500</span>      throws HBaseIOException {<a name="line.3500"></a>
 <span class="sourceLineNo">3501</span>    List&lt;ServerName&gt; serversAdded = new ArrayList&lt;&gt;(servers.size());<a name="line.3501"></a>
 <span class="sourceLineNo">3502</span>    // Place the decommission marker first.<a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>    String parentZnode = getZooKeeper().znodePaths.drainingZNode;<a name="line.3503"></a>
+<span class="sourceLineNo">3503</span>    String parentZnode = getZooKeeper().getZNodePaths().drainingZNode;<a name="line.3503"></a>
 <span class="sourceLineNo">3504</span>    for (ServerName server : servers) {<a name="line.3504"></a>
 <span class="sourceLineNo">3505</span>      try {<a name="line.3505"></a>
 <span class="sourceLineNo">3506</span>        String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3506"></a>
@@ -3557,7 +3557,7 @@
 <span class="sourceLineNo">3549</span>  public void recommissionRegionServer(final ServerName server,<a name="line.3549"></a>
 <span class="sourceLineNo">3550</span>      final List&lt;byte[]&gt; encodedRegionNames) throws HBaseIOException {<a name="line.3550"></a>
 <span class="sourceLineNo">3551</span>    // Remove the server from decommissioned (draining) server list.<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>    String parentZnode = getZooKeeper().znodePaths.drainingZNode;<a name="line.3552"></a>
+<span class="sourceLineNo">3552</span>    String parentZnode = getZooKeeper().getZNodePaths().drainingZNode;<a name="line.3552"></a>
 <span class="sourceLineNo">3553</span>    String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3553"></a>
 <span class="sourceLineNo">3554</span>    try {<a name="line.3554"></a>
 <span class="sourceLineNo">3555</span>      ZKUtil.deleteNodeFailSilent(getZooKeeper(), node);<a name="line.3555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
index adaa381..aa48364 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
@@ -2033,7 +2033,7 @@
 <span class="sourceLineNo">2025</span><a name="line.2025"></a>
 <span class="sourceLineNo">2026</span>  private void startActiveMasterManager(int infoPort) throws KeeperException {<a name="line.2026"></a>
 <span class="sourceLineNo">2027</span>    String backupZNode = ZNodePaths.joinZNode(<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>      zooKeeper.znodePaths.backupMasterAddressesZNode, serverName.toString());<a name="line.2028"></a>
+<span class="sourceLineNo">2028</span>      zooKeeper.getZNodePaths().backupMasterAddressesZNode, serverName.toString());<a name="line.2028"></a>
 <span class="sourceLineNo">2029</span>    /*<a name="line.2029"></a>
 <span class="sourceLineNo">2030</span>    * Add a ZNode for ourselves in the backup master directory since we<a name="line.2030"></a>
 <span class="sourceLineNo">2031</span>    * may not become the active master. If so, we want the actual active<a name="line.2031"></a>
@@ -2546,7 +2546,7 @@
 <span class="sourceLineNo">2538</span>    List&lt;String&gt; backupMasterStrings;<a name="line.2538"></a>
 <span class="sourceLineNo">2539</span>    try {<a name="line.2539"></a>
 <span class="sourceLineNo">2540</span>      backupMasterStrings = ZKUtil.listChildrenNoWatch(this.zooKeeper,<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>        this.zooKeeper.znodePaths.backupMasterAddressesZNode);<a name="line.2541"></a>
+<span class="sourceLineNo">2541</span>        this.zooKeeper.getZNodePaths().backupMasterAddressesZNode);<a name="line.2541"></a>
 <span class="sourceLineNo">2542</span>    } catch (KeeperException e) {<a name="line.2542"></a>
 <span class="sourceLineNo">2543</span>      LOG.warn(this.zooKeeper.prefix("Unable to list backup servers"), e);<a name="line.2543"></a>
 <span class="sourceLineNo">2544</span>      backupMasterStrings = null;<a name="line.2544"></a>
@@ -2560,7 +2560,7 @@
 <span class="sourceLineNo">2552</span>          byte [] bytes;<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>          try {<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>            bytes = ZKUtil.getData(this.zooKeeper, ZNodePaths.joinZNode(<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>                this.zooKeeper.znodePaths.backupMasterAddressesZNode, s));<a name="line.2555"></a>
+<span class="sourceLineNo">2555</span>                this.zooKeeper.getZNodePaths().backupMasterAddressesZNode, s));<a name="line.2555"></a>
 <span class="sourceLineNo">2556</span>          } catch (InterruptedException e) {<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>            throw new InterruptedIOException();<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>          }<a name="line.2558"></a>
@@ -3508,7 +3508,7 @@
 <span class="sourceLineNo">3500</span>      throws HBaseIOException {<a name="line.3500"></a>
 <span class="sourceLineNo">3501</span>    List&lt;ServerName&gt; serversAdded = new ArrayList&lt;&gt;(servers.size());<a name="line.3501"></a>
 <span class="sourceLineNo">3502</span>    // Place the decommission marker first.<a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>    String parentZnode = getZooKeeper().znodePaths.drainingZNode;<a name="line.3503"></a>
+<span class="sourceLineNo">3503</span>    String parentZnode = getZooKeeper().getZNodePaths().drainingZNode;<a name="line.3503"></a>
 <span class="sourceLineNo">3504</span>    for (ServerName server : servers) {<a name="line.3504"></a>
 <span class="sourceLineNo">3505</span>      try {<a name="line.3505"></a>
 <span class="sourceLineNo">3506</span>        String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3506"></a>
@@ -3557,7 +3557,7 @@
 <span class="sourceLineNo">3549</span>  public void recommissionRegionServer(final ServerName server,<a name="line.3549"></a>
 <span class="sourceLineNo">3550</span>      final List&lt;byte[]&gt; encodedRegionNames) throws HBaseIOException {<a name="line.3550"></a>
 <span class="sourceLineNo">3551</span>    // Remove the server from decommissioned (draining) server list.<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>    String parentZnode = getZooKeeper().znodePaths.drainingZNode;<a name="line.3552"></a>
+<span class="sourceLineNo">3552</span>    String parentZnode = getZooKeeper().getZNodePaths().drainingZNode;<a name="line.3552"></a>
 <span class="sourceLineNo">3553</span>    String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3553"></a>
 <span class="sourceLineNo">3554</span>    try {<a name="line.3554"></a>
 <span class="sourceLineNo">3555</span>      ZKUtil.deleteNodeFailSilent(getZooKeeper(), node);<a name="line.3555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterMetaBootstrap.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterMetaBootstrap.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterMetaBootstrap.html
index 0c9b4e9..5b68f6f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterMetaBootstrap.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterMetaBootstrap.html
@@ -133,14 +133,14 @@
 <span class="sourceLineNo">125</span>    try {<a name="line.125"></a>
 <span class="sourceLineNo">126</span>      List&lt;String&gt; metaReplicaZnodes = zooKeeper.getMetaReplicaNodes();<a name="line.126"></a>
 <span class="sourceLineNo">127</span>      for (String metaReplicaZnode : metaReplicaZnodes) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        int replicaId = zooKeeper.znodePaths.getMetaReplicaIdFromZnode(metaReplicaZnode);<a name="line.128"></a>
+<span class="sourceLineNo">128</span>        int replicaId = zooKeeper.getZNodePaths().getMetaReplicaIdFromZnode(metaReplicaZnode);<a name="line.128"></a>
 <span class="sourceLineNo">129</span>        if (replicaId &gt;= numMetaReplicasConfigured) {<a name="line.129"></a>
 <span class="sourceLineNo">130</span>          RegionState r = MetaTableLocator.getMetaRegionState(zooKeeper, replicaId);<a name="line.130"></a>
 <span class="sourceLineNo">131</span>          LOG.info("Closing excess replica of meta region " + r.getRegion());<a name="line.131"></a>
 <span class="sourceLineNo">132</span>          // send a close and wait for a max of 30 seconds<a name="line.132"></a>
 <span class="sourceLineNo">133</span>          ServerManager.closeRegionSilentlyAndWait(master.getClusterConnection(),<a name="line.133"></a>
 <span class="sourceLineNo">134</span>              r.getServerName(), r.getRegion(), 30000);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>          ZKUtil.deleteNode(zooKeeper, zooKeeper.znodePaths.getZNodeForReplica(replicaId));<a name="line.135"></a>
+<span class="sourceLineNo">135</span>          ZKUtil.deleteNode(zooKeeper, zooKeeper.getZNodePaths().getZNodeForReplica(replicaId));<a name="line.135"></a>
 <span class="sourceLineNo">136</span>        }<a name="line.136"></a>
 <span class="sourceLineNo">137</span>      }<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    } catch (Exception ex) {<a name="line.138"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html
index 590fa8e..d60bbd0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/RegionServerTracker.html
@@ -80,7 +80,7 @@
 <span class="sourceLineNo">072</span>  public void start() throws KeeperException, IOException {<a name="line.72"></a>
 <span class="sourceLineNo">073</span>    watcher.registerListener(this);<a name="line.73"></a>
 <span class="sourceLineNo">074</span>    List&lt;String&gt; servers =<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      ZKUtil.listChildrenAndWatchThem(watcher, watcher.znodePaths.rsZNode);<a name="line.75"></a>
+<span class="sourceLineNo">075</span>      ZKUtil.listChildrenAndWatchThem(watcher, watcher.getZNodePaths().rsZNode);<a name="line.75"></a>
 <span class="sourceLineNo">076</span>    refresh(servers);<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>
@@ -92,7 +92,7 @@
 <span class="sourceLineNo">084</span>        if (regionServers.get(sn) == null) {<a name="line.84"></a>
 <span class="sourceLineNo">085</span>          RegionServerInfo.Builder rsInfoBuilder = RegionServerInfo.newBuilder();<a name="line.85"></a>
 <span class="sourceLineNo">086</span>          try {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>            String nodePath = ZNodePaths.joinZNode(watcher.znodePaths.rsZNode, n);<a name="line.87"></a>
+<span class="sourceLineNo">087</span>            String nodePath = ZNodePaths.joinZNode(watcher.getZNodePaths().rsZNode, n);<a name="line.87"></a>
 <span class="sourceLineNo">088</span>            byte[] data = ZKUtil.getData(watcher, nodePath);<a name="line.88"></a>
 <span class="sourceLineNo">089</span>            if (data != null &amp;&amp; data.length &gt; 0 &amp;&amp; ProtobufUtil.isPBMagicPrefix(data)) {<a name="line.89"></a>
 <span class="sourceLineNo">090</span>              int magicLen = ProtobufUtil.lengthOfPBMagic();<a name="line.90"></a>
@@ -122,7 +122,7 @@
 <span class="sourceLineNo">114</span><a name="line.114"></a>
 <span class="sourceLineNo">115</span>  @Override<a name="line.115"></a>
 <span class="sourceLineNo">116</span>  public void nodeCreated(String path) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    if (path.startsWith(watcher.znodePaths.rsZNode)) {<a name="line.117"></a>
+<span class="sourceLineNo">117</span>    if (path.startsWith(watcher.getZNodePaths().rsZNode)) {<a name="line.117"></a>
 <span class="sourceLineNo">118</span>      String serverName = ZKUtil.getNodeName(path);<a name="line.118"></a>
 <span class="sourceLineNo">119</span>      LOG.info("RegionServer ephemeral node created, adding [" + serverName + "]");<a name="line.119"></a>
 <span class="sourceLineNo">120</span>      if (server.isInitialized()) {<a name="line.120"></a>
@@ -135,7 +135,7 @@
 <span class="sourceLineNo">127</span><a name="line.127"></a>
 <span class="sourceLineNo">128</span>  @Override<a name="line.128"></a>
 <span class="sourceLineNo">129</span>  public void nodeDeleted(String path) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    if (path.startsWith(watcher.znodePaths.rsZNode)) {<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    if (path.startsWith(watcher.getZNodePaths().rsZNode)) {<a name="line.130"></a>
 <span class="sourceLineNo">131</span>      String serverName = ZKUtil.getNodeName(path);<a name="line.131"></a>
 <span class="sourceLineNo">132</span>      LOG.info("RegionServer ephemeral node deleted, processing expiration [" +<a name="line.132"></a>
 <span class="sourceLineNo">133</span>        serverName + "]");<a name="line.133"></a>
@@ -152,11 +152,11 @@
 <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 nodeChildrenChanged(String path) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    if (path.equals(watcher.znodePaths.rsZNode)<a name="line.147"></a>
+<span class="sourceLineNo">147</span>    if (path.equals(watcher.getZNodePaths().rsZNode)<a name="line.147"></a>
 <span class="sourceLineNo">148</span>        &amp;&amp; !server.isAborted() &amp;&amp; !server.isStopped()) {<a name="line.148"></a>
 <span class="sourceLineNo">149</span>      try {<a name="line.149"></a>
 <span class="sourceLineNo">150</span>        List&lt;String&gt; servers =<a name="line.150"></a>
-<span class="sourceLineNo">151</span>          ZKUtil.listChildrenAndWatchThem(watcher, watcher.znodePaths.rsZNode);<a name="line.151"></a>
+<span class="sourceLineNo">151</span>          ZKUtil.listChildrenAndWatchThem(watcher, watcher.getZNodePaths().rsZNode);<a name="line.151"></a>
 <span class="sourceLineNo">152</span>        refresh(servers);<a name="line.152"></a>
 <span class="sourceLineNo">153</span>      } catch (IOException e) {<a name="line.153"></a>
 <span class="sourceLineNo">154</span>        server.abort("Unexpected zk exception getting RS nodes", e);<a name="line.154"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/master/ServerManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/ServerManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/ServerManager.html
index 8f8a8ff..a88ff57 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/ServerManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/ServerManager.html
@@ -559,7 +559,7 @@
 <span class="sourceLineNo">551</span><a name="line.551"></a>
 <span class="sourceLineNo">552</span>  private List&lt;String&gt; getRegionServersInZK(final ZKWatcher zkw)<a name="line.552"></a>
 <span class="sourceLineNo">553</span>  throws KeeperException {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    return ZKUtil.listChildrenNoWatch(zkw, zkw.znodePaths.rsZNode);<a name="line.554"></a>
+<span class="sourceLineNo">554</span>    return ZKUtil.listChildrenNoWatch(zkw, zkw.getZNodePaths().rsZNode);<a name="line.554"></a>
 <span class="sourceLineNo">555</span>  }<a name="line.555"></a>
 <span class="sourceLineNo">556</span><a name="line.556"></a>
 <span class="sourceLineNo">557</span>  /*<a name="line.557"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/master/SplitOrMergeTracker.SwitchStateTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/SplitOrMergeTracker.SwitchStateTracker.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/SplitOrMergeTracker.SwitchStateTracker.html
index 383a5f7..b4137c0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/SplitOrMergeTracker.SwitchStateTracker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/SplitOrMergeTracker.SwitchStateTracker.html
@@ -57,15 +57,15 @@
 <span class="sourceLineNo">049</span>  public SplitOrMergeTracker(ZKWatcher watcher, Configuration conf,<a name="line.49"></a>
 <span class="sourceLineNo">050</span>                             Abortable abortable) {<a name="line.50"></a>
 <span class="sourceLineNo">051</span>    try {<a name="line.51"></a>
-<span class="sourceLineNo">052</span>      if (ZKUtil.checkExists(watcher, watcher.znodePaths.switchZNode) &lt; 0) {<a name="line.52"></a>
-<span class="sourceLineNo">053</span>        ZKUtil.createAndFailSilent(watcher, watcher.znodePaths.switchZNode);<a name="line.53"></a>
+<span class="sourceLineNo">052</span>      if (ZKUtil.checkExists(watcher, watcher.getZNodePaths().switchZNode) &lt; 0) {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>        ZKUtil.createAndFailSilent(watcher, watcher.getZNodePaths().switchZNode);<a name="line.53"></a>
 <span class="sourceLineNo">054</span>      }<a name="line.54"></a>
 <span class="sourceLineNo">055</span>    } catch (KeeperException e) {<a name="line.55"></a>
 <span class="sourceLineNo">056</span>      throw new RuntimeException(e);<a name="line.56"></a>
 <span class="sourceLineNo">057</span>    }<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    splitZnode = ZNodePaths.joinZNode(watcher.znodePaths.switchZNode,<a name="line.58"></a>
+<span class="sourceLineNo">058</span>    splitZnode = ZNodePaths.joinZNode(watcher.getZNodePaths().switchZNode,<a name="line.58"></a>
 <span class="sourceLineNo">059</span>      conf.get("zookeeper.znode.switch.split", "split"));<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    mergeZnode = ZNodePaths.joinZNode(watcher.znodePaths.switchZNode,<a name="line.60"></a>
+<span class="sourceLineNo">060</span>    mergeZnode = ZNodePaths.joinZNode(watcher.getZNodePaths().switchZNode,<a name="line.60"></a>
 <span class="sourceLineNo">061</span>      conf.get("zookeeper.znode.switch.merge", "merge"));<a name="line.61"></a>
 <span class="sourceLineNo">062</span>    splitStateTracker = new SwitchStateTracker(watcher, splitZnode, abortable);<a name="line.62"></a>
 <span class="sourceLineNo">063</span>    mergeStateTracker = new SwitchStateTracker(watcher, mergeZnode, abortable);<a name="line.63"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/master/SplitOrMergeTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/SplitOrMergeTracker.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/SplitOrMergeTracker.html
index 383a5f7..b4137c0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/SplitOrMergeTracker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/SplitOrMergeTracker.html
@@ -57,15 +57,15 @@
 <span class="sourceLineNo">049</span>  public SplitOrMergeTracker(ZKWatcher watcher, Configuration conf,<a name="line.49"></a>
 <span class="sourceLineNo">050</span>                             Abortable abortable) {<a name="line.50"></a>
 <span class="sourceLineNo">051</span>    try {<a name="line.51"></a>
-<span class="sourceLineNo">052</span>      if (ZKUtil.checkExists(watcher, watcher.znodePaths.switchZNode) &lt; 0) {<a name="line.52"></a>
-<span class="sourceLineNo">053</span>        ZKUtil.createAndFailSilent(watcher, watcher.znodePaths.switchZNode);<a name="line.53"></a>
+<span class="sourceLineNo">052</span>      if (ZKUtil.checkExists(watcher, watcher.getZNodePaths().switchZNode) &lt; 0) {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>        ZKUtil.createAndFailSilent(watcher, watcher.getZNodePaths().switchZNode);<a name="line.53"></a>
 <span class="sourceLineNo">054</span>      }<a name="line.54"></a>
 <span class="sourceLineNo">055</span>    } catch (KeeperException e) {<a name="line.55"></a>
 <span class="sourceLineNo">056</span>      throw new RuntimeException(e);<a name="line.56"></a>
 <span class="sourceLineNo">057</span>    }<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    splitZnode = ZNodePaths.joinZNode(watcher.znodePaths.switchZNode,<a name="line.58"></a>
+<span class="sourceLineNo">058</span>    splitZnode = ZNodePaths.joinZNode(watcher.getZNodePaths().switchZNode,<a name="line.58"></a>
 <span class="sourceLineNo">059</span>      conf.get("zookeeper.znode.switch.split", "split"));<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    mergeZnode = ZNodePaths.joinZNode(watcher.znodePaths.switchZNode,<a name="line.60"></a>
+<span class="sourceLineNo">060</span>    mergeZnode = ZNodePaths.joinZNode(watcher.getZNodePaths().switchZNode,<a name="line.60"></a>
 <span class="sourceLineNo">061</span>      conf.get("zookeeper.znode.switch.merge", "merge"));<a name="line.61"></a>
 <span class="sourceLineNo">062</span>    splitStateTracker = new SwitchStateTracker(watcher, splitZnode, abortable);<a name="line.62"></a>
 <span class="sourceLineNo">063</span>    mergeStateTracker = new SwitchStateTracker(watcher, mergeZnode, abortable);<a name="line.63"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/ClientZKSyncer.ClientZkUpdater.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/ClientZKSyncer.ClientZkUpdater.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/ClientZKSyncer.ClientZkUpdater.html
index 87545d3..4ea6cad 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/ClientZKSyncer.ClientZkUpdater.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/ClientZKSyncer.ClientZkUpdater.html
@@ -76,7 +76,7 @@
 <span class="sourceLineNo">068</span>    LOG.debug("Starting " + getClass().getSimpleName());<a name="line.68"></a>
 <span class="sourceLineNo">069</span>    this.watcher.registerListener(this);<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    // create base znode on remote ZK<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    ZKUtil.createWithParents(clientZkWatcher, watcher.znodePaths.baseZNode);<a name="line.71"></a>
+<span class="sourceLineNo">071</span>    ZKUtil.createWithParents(clientZkWatcher, watcher.getZNodePaths().baseZNode);<a name="line.71"></a>
 <span class="sourceLineNo">072</span>    // set meta znodes for client ZK<a name="line.72"></a>
 <span class="sourceLineNo">073</span>    Collection&lt;String&gt; nodes = getNodesToWatch();<a name="line.73"></a>
 <span class="sourceLineNo">074</span>    LOG.debug("Znodes to watch: " + nodes);<a name="line.74"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/ClientZKSyncer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/ClientZKSyncer.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/ClientZKSyncer.html
index 87545d3..4ea6cad 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/ClientZKSyncer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/ClientZKSyncer.html
@@ -76,7 +76,7 @@
 <span class="sourceLineNo">068</span>    LOG.debug("Starting " + getClass().getSimpleName());<a name="line.68"></a>
 <span class="sourceLineNo">069</span>    this.watcher.registerListener(this);<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    // create base znode on remote ZK<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    ZKUtil.createWithParents(clientZkWatcher, watcher.znodePaths.baseZNode);<a name="line.71"></a>
+<span class="sourceLineNo">071</span>    ZKUtil.createWithParents(clientZkWatcher, watcher.getZNodePaths().baseZNode);<a name="line.71"></a>
 <span class="sourceLineNo">072</span>    // set meta znodes for client ZK<a name="line.72"></a>
 <span class="sourceLineNo">073</span>    Collection&lt;String&gt; nodes = getNodesToWatch();<a name="line.73"></a>
 <span class="sourceLineNo">074</span>    LOG.debug("Znodes to watch: " + nodes);<a name="line.74"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/MasterAddressSyncer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/MasterAddressSyncer.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/MasterAddressSyncer.html
index 8f3c7ae..edf5c0b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/MasterAddressSyncer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/MasterAddressSyncer.html
@@ -43,7 +43,7 @@
 <span class="sourceLineNo">035</span><a name="line.35"></a>
 <span class="sourceLineNo">036</span>  public MasterAddressSyncer(ZKWatcher watcher, ZKWatcher clientZkWatcher, Server server) {<a name="line.36"></a>
 <span class="sourceLineNo">037</span>    super(watcher, clientZkWatcher, server);<a name="line.37"></a>
-<span class="sourceLineNo">038</span>    masterAddressZNode = watcher.znodePaths.masterAddressZNode;<a name="line.38"></a>
+<span class="sourceLineNo">038</span>    masterAddressZNode = watcher.getZNodePaths().masterAddressZNode;<a name="line.38"></a>
 <span class="sourceLineNo">039</span>  }<a name="line.39"></a>
 <span class="sourceLineNo">040</span><a name="line.40"></a>
 <span class="sourceLineNo">041</span>  @Override<a name="line.41"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/MetaLocationSyncer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/MetaLocationSyncer.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/MetaLocationSyncer.html
index 74649d4..6140a7b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/MetaLocationSyncer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/zksyncer/MetaLocationSyncer.html
@@ -44,12 +44,12 @@
 <span class="sourceLineNo">036</span><a name="line.36"></a>
 <span class="sourceLineNo">037</span>  @Override<a name="line.37"></a>
 <span class="sourceLineNo">038</span>  boolean validate(String path) {<a name="line.38"></a>
-<span class="sourceLineNo">039</span>    return watcher.znodePaths.isAnyMetaReplicaZNode(path);<a name="line.39"></a>
+<span class="sourceLineNo">039</span>    return watcher.getZNodePaths().isAnyMetaReplicaZNode(path);<a name="line.39"></a>
 <span class="sourceLineNo">040</span>  }<a name="line.40"></a>
 <span class="sourceLineNo">041</span><a name="line.41"></a>
 <span class="sourceLineNo">042</span>  @Override<a name="line.42"></a>
 <span class="sourceLineNo">043</span>  Collection&lt;String&gt; getNodesToWatch() {<a name="line.43"></a>
-<span class="sourceLineNo">044</span>    return watcher.znodePaths.metaReplicaZNodes.values();<a name="line.44"></a>
+<span class="sourceLineNo">044</span>    return watcher.getZNodePaths().metaReplicaZNodes.values();<a name="line.44"></a>
 <span class="sourceLineNo">045</span>  }<a name="line.45"></a>
 <span class="sourceLineNo">046</span>}<a name="line.46"></a>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/procedure/ZKProcedureUtil.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure/ZKProcedureUtil.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure/ZKProcedureUtil.html
index cfd9773..14092a7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure/ZKProcedureUtil.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure/ZKProcedureUtil.html
@@ -87,7 +87,7 @@
 <span class="sourceLineNo">079</span>    // make sure we are listening for events<a name="line.79"></a>
 <span class="sourceLineNo">080</span>    watcher.registerListener(this);<a name="line.80"></a>
 <span class="sourceLineNo">081</span>    // setup paths for the zknodes used in procedures<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    this.baseZNode = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, procDescription);<a name="line.82"></a>
+<span class="sourceLineNo">082</span>    this.baseZNode = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, procDescription);<a name="line.82"></a>
 <span class="sourceLineNo">083</span>    acquiredZnode = ZNodePaths.joinZNode(baseZNode, ACQUIRED_BARRIER_ZNODE_DEFAULT);<a name="line.83"></a>
 <span class="sourceLineNo">084</span>    reachedZnode = ZNodePaths.joinZNode(baseZNode, REACHED_BARRIER_ZNODE_DEFAULT);<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    abortZnode = ZNodePaths.joinZNode(baseZNode, ABORT_ZNODE_DEFAULT);<a name="line.85"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
index b979909..70c4827 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
@@ -3515,7 +3515,7 @@
 <span class="sourceLineNo">3507</span>  }<a name="line.3507"></a>
 <span class="sourceLineNo">3508</span><a name="line.3508"></a>
 <span class="sourceLineNo">3509</span>  private String getMyEphemeralNodePath() {<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>    return ZNodePaths.joinZNode(this.zooKeeper.znodePaths.rsZNode, getServerName().toString());<a name="line.3510"></a>
+<span class="sourceLineNo">3510</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3510"></a>
 <span class="sourceLineNo">3511</span>  }<a name="line.3511"></a>
 <span class="sourceLineNo">3512</span><a name="line.3512"></a>
 <span class="sourceLineNo">3513</span>  private boolean isHealthCheckerConfigured() {<a name="line.3513"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
index b979909..70c4827 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
@@ -3515,7 +3515,7 @@
 <span class="sourceLineNo">3507</span>  }<a name="line.3507"></a>
 <span class="sourceLineNo">3508</span><a name="line.3508"></a>
 <span class="sourceLineNo">3509</span>  private String getMyEphemeralNodePath() {<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>    return ZNodePaths.joinZNode(this.zooKeeper.znodePaths.rsZNode, getServerName().toString());<a name="line.3510"></a>
+<span class="sourceLineNo">3510</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3510"></a>
 <span class="sourceLineNo">3511</span>  }<a name="line.3511"></a>
 <span class="sourceLineNo">3512</span><a name="line.3512"></a>
 <span class="sourceLineNo">3513</span>  private boolean isHealthCheckerConfigured() {<a name="line.3513"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
index b979909..70c4827 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
@@ -3515,7 +3515,7 @@
 <span class="sourceLineNo">3507</span>  }<a name="line.3507"></a>
 <span class="sourceLineNo">3508</span><a name="line.3508"></a>
 <span class="sourceLineNo">3509</span>  private String getMyEphemeralNodePath() {<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>    return ZNodePaths.joinZNode(this.zooKeeper.znodePaths.rsZNode, getServerName().toString());<a name="line.3510"></a>
+<span class="sourceLineNo">3510</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3510"></a>
 <span class="sourceLineNo">3511</span>  }<a name="line.3511"></a>
 <span class="sourceLineNo">3512</span><a name="line.3512"></a>
 <span class="sourceLineNo">3513</span>  private boolean isHealthCheckerConfigured() {<a name="line.3513"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
index b979909..70c4827 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
@@ -3515,7 +3515,7 @@
 <span class="sourceLineNo">3507</span>  }<a name="line.3507"></a>
 <span class="sourceLineNo">3508</span><a name="line.3508"></a>
 <span class="sourceLineNo">3509</span>  private String getMyEphemeralNodePath() {<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>    return ZNodePaths.joinZNode(this.zooKeeper.znodePaths.rsZNode, getServerName().toString());<a name="line.3510"></a>
+<span class="sourceLineNo">3510</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3510"></a>
 <span class="sourceLineNo">3511</span>  }<a name="line.3511"></a>
 <span class="sourceLineNo">3512</span><a name="line.3512"></a>
 <span class="sourceLineNo">3513</span>  private boolean isHealthCheckerConfigured() {<a name="line.3513"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
index b979909..70c4827 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
@@ -3515,7 +3515,7 @@
 <span class="sourceLineNo">3507</span>  }<a name="line.3507"></a>
 <span class="sourceLineNo">3508</span><a name="line.3508"></a>
 <span class="sourceLineNo">3509</span>  private String getMyEphemeralNodePath() {<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>    return ZNodePaths.joinZNode(this.zooKeeper.znodePaths.rsZNode, getServerName().toString());<a name="line.3510"></a>
+<span class="sourceLineNo">3510</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3510"></a>
 <span class="sourceLineNo">3511</span>  }<a name="line.3511"></a>
 <span class="sourceLineNo">3512</span><a name="line.3512"></a>
 <span class="sourceLineNo">3513</span>  private boolean isHealthCheckerConfigured() {<a name="line.3513"></a>


[44/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

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


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

Branch: refs/heads/asf-site
Commit: 3797f0e6ab966789e48b85cf1a600533e9f6f785
Parents: a913d06
Author: jenkins <bu...@apache.org>
Authored: Sat Jun 2 14:47:13 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Sat Jun 2 14:47:13 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |     4 +-
 apache_hbase_reference_guide.pdf                | 30026 +++++++++--------
 .../hadoop/hbase/snapshot/ExportSnapshot.html   |     6 +-
 .../hadoop/hbase/snapshot/ExportSnapshot.html   |   218 +-
 book.html                                       |    56 +-
 bulk-loads.html                                 |     4 +-
 checkstyle-aggregate.html                       | 28116 ++++++++-------
 checkstyle.rss                                  |    72 +-
 coc.html                                        |     4 +-
 dependencies.html                               |     4 +-
 dependency-convergence.html                     |     4 +-
 dependency-info.html                            |     4 +-
 dependency-management.html                      |     4 +-
 devapidocs/allclasses-frame.html                |     1 +
 devapidocs/allclasses-noframe.html              |     1 +
 devapidocs/constant-values.html                 |    25 +-
 devapidocs/index-all.html                       |    44 +-
 .../hadoop/hbase/backup/package-tree.html       |     4 +-
 .../hadoop/hbase/client/package-tree.html       |    24 +-
 ...ManagerCoordination.CreateAsyncCallback.html |     8 +-
 ...rCoordination.CreateRescanAsyncCallback.html |     8 +-
 ...ManagerCoordination.DeleteAsyncCallback.html |     8 +-
 ...anagerCoordination.GetDataAsyncCallback.html |     8 +-
 ...ManagerCoordination.TaskFinisher.Status.html |    10 +-
 ...plitLogManagerCoordination.TaskFinisher.html |     4 +-
 .../ZKSplitLogManagerCoordination.html          |    58 +-
 .../hadoop/hbase/executor/package-tree.html     |     2 +-
 .../hadoop/hbase/filter/package-tree.html       |     4 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     6 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |     2 +-
 .../hbase/master/balancer/package-tree.html     |     2 +-
 .../hadoop/hbase/master/package-tree.html       |     6 +-
 .../hbase/master/procedure/package-tree.html    |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    20 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     4 +-
 .../hadoop/hbase/quotas/package-tree.html       |     6 +-
 .../hadoop/hbase/regionserver/package-tree.html |    18 +-
 .../regionserver/querymatcher/package-tree.html |     2 +-
 ...cationEndpoint.PeerRegionServerListener.html |    10 +-
 .../replication/HBaseReplicationEndpoint.html   |     6 +-
 .../regionserver/ReplicationSource.html         |    10 +-
 .../regionserver/ReplicationSourceShipper.html  |    73 +-
 .../ReplicationSourceWALReader.html             |   121 +-
 .../SerialReplicationSourceWALReader.html       |     2 +-
 .../regionserver/class-use/WALEntryBatch.html   |    14 +-
 .../hbase/security/access/package-tree.html     |     2 +-
 .../hadoop/hbase/security/package-tree.html     |     4 +-
 .../visibility/ZKVisibilityLabelWatcher.html    |    16 +-
 .../hadoop/hbase/snapshot/ExportSnapshot.html   |     6 +-
 .../hadoop/hbase/thrift/package-tree.html       |     2 +-
 .../LoadIncrementalHFiles.LoadQueueItem.html    |     4 +-
 .../hadoop/hbase/tool/PreUpgradeValidator.html  |   487 +
 .../hadoop/hbase/tool/WriteSinkCoprocessor.html |     4 +-
 .../tool/class-use/PreUpgradeValidator.html     |   125 +
 .../apache/hadoop/hbase/tool/package-frame.html |     1 +
 .../hadoop/hbase/tool/package-summary.html      |     6 +
 .../apache/hadoop/hbase/tool/package-tree.html  |     5 +
 .../hadoop/hbase/util/AbstractHBaseTool.html    |     2 +-
 .../hbase/util/class-use/AbstractHBaseTool.html |    24 +
 .../apache/hadoop/hbase/util/package-tree.html  |     8 +-
 .../apache/hadoop/hbase/util/package-use.html   |     5 +
 .../hadoop/hbase/wal/class-use/WAL.Entry.html   |    14 +-
 .../hadoop/hbase/wal/class-use/WALEdit.html     |    16 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 .../zookeeper/MasterMaintenanceModeTracker.html |     8 +-
 .../hbase/zookeeper/MetaTableLocator.html       |    16 +-
 ...HACK_UNTIL_ZOOKEEPER_1897_ZooKeeperMain.html |     6 +-
 .../apache/hadoop/hbase/zookeeper/ZKUtil.html   |    30 +-
 .../hadoop/hbase/zookeeper/ZKWatcher.html       |    30 +-
 .../hbase/zookeeper/class-use/ZNodePaths.html   |     2 +-
 devapidocs/overview-tree.html                   |     1 +
 .../org/apache/hadoop/hbase/Version.html        |     6 +-
 .../apache/hadoop/hbase/ZKNamespaceManager.html |     2 +-
 .../org/apache/hadoop/hbase/ZNodeClearer.html   |     2 +-
 .../backup/example/ZKTableArchiveClient.html    |     2 +-
 ...ManagerCoordination.CreateAsyncCallback.html |  1246 +-
 ...rCoordination.CreateRescanAsyncCallback.html |  1246 +-
 ...ManagerCoordination.DeleteAsyncCallback.html |  1246 +-
 ...anagerCoordination.GetDataAsyncCallback.html |  1246 +-
 ...ManagerCoordination.TaskFinisher.Status.html |  1246 +-
 ...plitLogManagerCoordination.TaskFinisher.html |  1246 +-
 .../ZKSplitLogManagerCoordination.html          |  1246 +-
 ...WorkerCoordination.GetDataAsyncCallback.html |    20 +-
 ...ogWorkerCoordination.ZkSplitTaskDetails.html |    20 +-
 .../ZkSplitLogWorkerCoordination.html           |    20 +-
 .../hbase/master/ActiveMasterManager.html       |    18 +-
 .../hbase/master/DrainingServerTracker.html     |     8 +-
 .../master/HMaster.InitializationMonitor.html   |    10 +-
 .../master/HMaster.MasterStoppedException.html  |    10 +-
 .../hbase/master/HMaster.RedirectServlet.html   |    10 +-
 .../org/apache/hadoop/hbase/master/HMaster.html |    10 +-
 .../hbase/master/MasterMetaBootstrap.html       |     4 +-
 .../hbase/master/RegionServerTracker.html       |    12 +-
 .../hadoop/hbase/master/ServerManager.html      |     2 +-
 .../SplitOrMergeTracker.SwitchStateTracker.html |     8 +-
 .../hbase/master/SplitOrMergeTracker.html       |     8 +-
 .../ClientZKSyncer.ClientZkUpdater.html         |     2 +-
 .../hbase/master/zksyncer/ClientZKSyncer.html   |     2 +-
 .../master/zksyncer/MasterAddressSyncer.html    |     2 +-
 .../master/zksyncer/MetaLocationSyncer.html     |     4 +-
 .../hadoop/hbase/procedure/ZKProcedureUtil.html |     2 +-
 .../HRegionServer.CompactionChecker.html        |     2 +-
 .../HRegionServer.MovedRegionInfo.html          |     2 +-
 .../HRegionServer.MovedRegionsCleaner.html      |     2 +-
 .../HRegionServer.PeriodicMemStoreFlusher.html  |     2 +-
 .../hbase/regionserver/HRegionServer.html       |     2 +-
 ...cationEndpoint.PeerRegionServerListener.html |   155 +-
 .../replication/HBaseReplicationEndpoint.html   |   155 +-
 ...nTrackerZKImpl.OtherRegionServerWatcher.html |    23 +-
 .../replication/ReplicationTrackerZKImpl.html   |    23 +-
 .../replication/ZKReplicationStorageBase.html   |     2 +-
 .../master/ReplicationPeerConfigUpgrader.html   |     2 +-
 .../ReplicationSource.LogsComparator.html       |    53 +-
 .../regionserver/ReplicationSource.html         |    53 +-
 .../ReplicationSourceShipper.WorkerState.html   |   365 +-
 .../regionserver/ReplicationSourceShipper.html  |   365 +-
 .../ReplicationSourceWALReader.html             |   736 +-
 ...InfoManagerImpl.FailedOpenUpdaterThread.html |     6 +-
 ...oupInfoManagerImpl.RSGroupStartupWorker.html |     6 +-
 ...oManagerImpl.ServerEventsListenerThread.html |     6 +-
 .../hbase/rsgroup/RSGroupInfoManagerImpl.html   |     6 +-
 .../security/access/ZKPermissionWatcher.html    |     8 +-
 .../hbase/security/token/ZKSecretWatcher.html   |     2 +-
 .../visibility/ZKVisibilityLabelWatcher.html    |   191 +-
 .../hbase/snapshot/ExportSnapshot.Counter.html  |   218 +-
 .../snapshot/ExportSnapshot.ExportMapper.html   |   218 +-
 ...hotInputFormat.ExportSnapshotInputSplit.html |   218 +-
 ...tInputFormat.ExportSnapshotRecordReader.html |   218 +-
 ...xportSnapshot.ExportSnapshotInputFormat.html |   218 +-
 .../hbase/snapshot/ExportSnapshot.Options.html  |   218 +-
 .../hbase/snapshot/ExportSnapshot.Testing.html  |   218 +-
 .../hadoop/hbase/snapshot/ExportSnapshot.html   |   218 +-
 .../hadoop/hbase/tool/PreUpgradeValidator.html  |   201 +
 ...BaseFsck.CheckRegionConsistencyWorkItem.html |     4 +-
 .../HBaseFsck.ErrorReporter.ERROR_CODE.html     |     4 +-
 .../hbase/util/HBaseFsck.ErrorReporter.html     |     4 +-
 .../hbase/util/HBaseFsck.FileLockCallable.html  |     4 +-
 .../hbase/util/HBaseFsck.HBaseFsckTool.html     |     4 +-
 .../hadoop/hbase/util/HBaseFsck.HbckInfo.html   |     4 +-
 .../hadoop/hbase/util/HBaseFsck.HdfsEntry.html  |     4 +-
 .../hadoop/hbase/util/HBaseFsck.MetaEntry.html  |     4 +-
 .../hbase/util/HBaseFsck.OnlineEntry.html       |     4 +-
 .../util/HBaseFsck.PrintingErrorReporter.html   |     4 +-
 .../HBaseFsck.RegionBoundariesInformation.html  |     4 +-
 .../util/HBaseFsck.RegionRepairException.html   |     4 +-
 .../HBaseFsck.TableInfo.HDFSIntegrityFixer.html |     4 +-
 ...aseFsck.TableInfo.IntegrityFixSuggester.html |     4 +-
 .../hadoop/hbase/util/HBaseFsck.TableInfo.html  |     4 +-
 .../hbase/util/HBaseFsck.WorkItemHdfsDir.html   |     4 +-
 .../util/HBaseFsck.WorkItemHdfsRegionInfo.html  |     4 +-
 .../util/HBaseFsck.WorkItemOverlapMerge.html    |     4 +-
 .../hbase/util/HBaseFsck.WorkItemRegion.html    |     4 +-
 .../org/apache/hadoop/hbase/util/HBaseFsck.html |     4 +-
 .../hadoop/hbase/util/ZKDataMigrator.html       |    41 +-
 .../hbase/zookeeper/ClusterStatusTracker.html   |    14 +-
 .../hbase/zookeeper/LoadBalancerTracker.html    |    10 +-
 .../hbase/zookeeper/MasterAddressTracker.html   |    14 +-
 .../zookeeper/MasterMaintenanceModeTracker.html |    65 +-
 .../hbase/zookeeper/MetaTableLocator.html       |   367 +-
 .../hbase/zookeeper/RecoverableZooKeeper.html   |    22 +-
 .../zookeeper/RegionNormalizerTracker.html      |     8 +-
 .../hadoop/hbase/zookeeper/ZKAclReset.html      |     4 +-
 .../hadoop/hbase/zookeeper/ZKClusterId.html     |     8 +-
 ...HACK_UNTIL_ZOOKEEPER_1897_ZooKeeperMain.html |     8 +-
 .../hadoop/hbase/zookeeper/ZKMainServer.html    |     8 +-
 .../hadoop/hbase/zookeeper/ZKNodeTracker.html   |     6 +-
 .../hadoop/hbase/zookeeper/ZKSplitLog.html      |     4 +-
 .../zookeeper/ZKUtil.JaasConfiguration.html     |   845 +-
 .../hbase/zookeeper/ZKUtil.NodeAndData.html     |   845 +-
 .../ZKUtil.ZKUtilOp.CreateAndFailSilent.html    |   845 +-
 .../ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html   |   845 +-
 .../zookeeper/ZKUtil.ZKUtilOp.SetData.html      |   845 +-
 .../hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html |   845 +-
 .../apache/hadoop/hbase/zookeeper/ZKUtil.html   |   845 +-
 .../hadoop/hbase/zookeeper/ZKWatcher.html       |   276 +-
 downloads.html                                  |     4 +-
 export_control.html                             |     4 +-
 index.html                                      |     4 +-
 integration.html                                |     4 +-
 issue-tracking.html                             |     4 +-
 license.html                                    |     4 +-
 mail-lists.html                                 |     4 +-
 metrics.html                                    |     4 +-
 old_news.html                                   |     4 +-
 plugin-management.html                          |     4 +-
 plugins.html                                    |     4 +-
 poweredbyhbase.html                             |     4 +-
 project-info.html                               |     4 +-
 project-reports.html                            |     4 +-
 project-summary.html                            |     4 +-
 pseudo-distributed.html                         |     4 +-
 replication.html                                |     4 +-
 resources.html                                  |     4 +-
 source-repository.html                          |     4 +-
 sponsors.html                                   |     4 +-
 supportingprojects.html                         |     4 +-
 team-list.html                                  |     4 +-
 testdevapidocs/allclasses-frame.html            |     2 +-
 testdevapidocs/allclasses-noframe.html          |     2 +-
 testdevapidocs/constant-values.html             |    19 +
 testdevapidocs/index-all.html                   |    42 +-
 .../hbase/class-use/HBaseClassTestRule.html     |    10 +-
 .../hbase/class-use/HBaseTestingUtility.html    |     4 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     2 +-
 .../TestActiveMasterManager.DummyMaster.html    |    44 +-
 ...ctiveMasterManager.NodeDeletionListener.html |    14 +-
 ...ctiveMasterManager.WaitToBeMasterThread.html |    12 +-
 .../hbase/master/TestActiveMasterManager.html   |     2 +-
 .../hbase/master/TestHMasterRPCException.html   |     4 +-
 .../TestMetaShutdownHandler.MyRegionServer.html |     6 +-
 .../TestLogsCleaner.FaultyZooKeeperWatcher.html |     2 +-
 ...tionHFileCleaner.FaultyZooKeeperWatcher.html |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |     8 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     2 +-
 ...sterAddressTracker.NodeCreationListener.html |    14 +-
 .../regionserver/TestMasterAddressTracker.html  |     8 +-
 .../hbase/regionserver/TestSplitLogWorker.html  |     6 +-
 .../hadoop/hbase/regionserver/package-tree.html |     4 +-
 .../replication/TestReplicationStateZKImpl.html |     6 +-
 ...nTrackerZKImpl.DummyReplicationListener.html |     6 +-
 ...estReplicationTrackerZKImpl.DummyServer.html |    40 +-
 .../TestReplicationTrackerZKImpl.html           |     8 +-
 .../TestGlobalReplicationThrottler.html         |   535 +
 .../regionserver/TestGlobalThrottler.html       |   518 -
 .../TestMetricsReplicationSourceFactory.html    |     4 +-
 .../TestGlobalReplicationThrottler.html         |   125 +
 .../class-use/TestGlobalThrottler.html          |   125 -
 .../replication/regionserver/package-frame.html |     2 +-
 .../regionserver/package-summary.html           |     2 +-
 .../replication/regionserver/package-tree.html  |     2 +-
 .../apache/hadoop/hbase/test/package-tree.html  |     4 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 .../TestZKLeaderManager.MockAbortable.html      |    10 +-
 .../TestZKLeaderManager.MockLeader.html         |    28 +-
 .../hbase/zookeeper/TestZKLeaderManager.html    |    24 +-
 .../TestZKMainServer.ExitException.html         |     4 +-
 testdevapidocs/overview-tree.html               |     2 +-
 .../hbase/IntegrationTestMetaReplicas.html      |     2 +-
 .../hbase/client/TestMetaWithReplicas.html      |     4 +-
 .../TestActiveMasterManager.DummyMaster.html    |   387 +-
 ...ctiveMasterManager.NodeDeletionListener.html |   387 +-
 ...ctiveMasterManager.WaitToBeMasterThread.html |   387 +-
 .../hbase/master/TestActiveMasterManager.html   |   387 +-
 .../hbase/master/TestHMasterRPCException.html   |    91 +-
 .../hbase/master/TestMasterNoCluster.html       |     2 +-
 .../TestMetaShutdownHandler.MyRegionServer.html |    95 +-
 .../hbase/master/TestMetaShutdownHandler.html   |    95 +-
 .../master/TestMirroringTableStateManager.html  |    43 +-
 ...TestSplitLogManager.DummyMasterServices.html |    14 +-
 .../hbase/master/TestSplitLogManager.Expr.html  |    14 +-
 .../hbase/master/TestSplitLogManager.html       |    14 +-
 ...sterAddressTracker.NodeCreationListener.html |   186 +-
 .../regionserver/TestMasterAddressTracker.html  |   186 +-
 .../regionserver/TestRegionServerHostname.html  |     4 +-
 .../TestSplitLogWorker.DummyServer.html         |   223 +-
 .../hbase/regionserver/TestSplitLogWorker.html  |   223 +-
 .../replication/TestReplicationStateZKImpl.html |    51 +-
 ...nTrackerZKImpl.DummyReplicationListener.html |   361 +-
 ...estReplicationTrackerZKImpl.DummyServer.html |   361 +-
 .../TestReplicationTrackerZKImpl.html           |   361 +-
 .../TestGlobalReplicationThrottler.html         |   260 +
 .../regionserver/TestGlobalThrottler.html       |   265 -
 .../rsgroup/VerifyingRSGroupAdminClient.html    |     2 +-
 .../test/IntegrationTestZKAndFSPermissions.html |     4 +-
 .../TestZKLeaderManager.MockAbortable.html      |   453 +-
 .../TestZKLeaderManager.MockLeader.html         |   453 +-
 .../hbase/zookeeper/TestZKLeaderManager.html    |   453 +-
 .../TestZKMainServer.ExitException.html         |     2 +-
 .../TestZKMainServer.NoExitSecurityManager.html |     2 +-
 .../hbase/zookeeper/TestZKMainServer.html       |     2 +-
 .../hadoop/hbase/zookeeper/TestZKMulti.html     |    40 +-
 .../TestZKNodeTracker.StubAbortable.html        |     6 +-
 .../TestZKNodeTracker.TestTracker.html          |     6 +-
 .../TestZKNodeTracker.TestingZKListener.html    |     6 +-
 .../TestZKNodeTracker.WaitToGetDataThread.html  |     6 +-
 .../hbase/zookeeper/TestZKNodeTracker.html      |     6 +-
 .../hbase/zookeeper/TestZKUtilNoServer.html     |     4 +-
 277 files changed, 44286 insertions(+), 43035 deletions(-)
----------------------------------------------------------------------


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


[09/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html
deleted file mode 100644
index 9f5ea46..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html
+++ /dev/null
@@ -1,518 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TestGlobalThrottler (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="TestGlobalThrottler (Apache HBase 3.0.0-SNAPSHOT Test API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":10,"i1":9,"i2":9,"i3":10};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestGlobalThrottler.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev&nbsp;Class</li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceFactory.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" target="_top">Frames</a></li>
-<li><a href="TestGlobalThrottler.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.replication.regionserver</div>
-<h2 title="Class TestGlobalThrottler" class="title">Class TestGlobalThrottler</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.replication.regionserver.TestGlobalThrottler</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<hr>
-<br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.60">TestGlobalThrottler</a>
-extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static org.apache.hadoop.conf.Configuration</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#conf1">conf1</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static org.apache.hadoop.conf.Configuration</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#conf2">conf2</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static byte[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#famName">famName</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#LOG">LOG</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>org.junit.rules.TestName</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#name">name</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static byte[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#ROW">ROW</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static byte[][]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#ROWS">ROWS</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#testQuotaNonZero">testQuotaNonZero</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#testQuotaPass">testQuotaPass</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#utility1">utility1</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#utility2">utility2</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static byte[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#VALUE">VALUE</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#TestGlobalThrottler--">TestGlobalThrottler</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#getRowNumbers-java.util.List-">getRowNumbers</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;cells)</code>&nbsp;</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#setUpBeforeClass--">setUpBeforeClass</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#tearDownAfterClass--">tearDownAfterClass</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#testQuota--">testQuota</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="CLASS_RULE">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.63">CLASS_RULE</a></pre>
-</li>
-</ul>
-<a name="LOG">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.66">LOG</a></pre>
-</li>
-</ul>
-<a name="conf1">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>conf1</h4>
-<pre>private static&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.67">conf1</a></pre>
-</li>
-</ul>
-<a name="conf2">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>conf2</h4>
-<pre>private static&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.68">conf2</a></pre>
-</li>
-</ul>
-<a name="utility1">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>utility1</h4>
-<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.70">utility1</a></pre>
-</li>
-</ul>
-<a name="utility2">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>utility2</h4>
-<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.71">utility2</a></pre>
-</li>
-</ul>
-<a name="famName">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>famName</h4>
-<pre>private static final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.73">famName</a></pre>
-</li>
-</ul>
-<a name="VALUE">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>VALUE</h4>
-<pre>private static final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.74">VALUE</a></pre>
-</li>
-</ul>
-<a name="ROW">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ROW</h4>
-<pre>private static final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.75">ROW</a></pre>
-</li>
-</ul>
-<a name="ROWS">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ROWS</h4>
-<pre>private static final&nbsp;byte[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.76">ROWS</a></pre>
-</li>
-</ul>
-<a name="name">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>name</h4>
-<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.79">name</a></pre>
-</li>
-</ul>
-<a name="testQuotaPass">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testQuotaPass</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.121">testQuotaPass</a></pre>
-</li>
-</ul>
-<a name="testQuotaNonZero">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>testQuotaNonZero</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.122">testQuotaNonZero</a></pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="TestGlobalThrottler--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>TestGlobalThrottler</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.60">TestGlobalThrottler</a>()</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="setUpBeforeClass--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setUpBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.82">setUpBeforeClass</a>()
-                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="tearDownAfterClass--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.115">tearDownAfterClass</a>()
-                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="testQuota--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testQuota</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.124">testQuota</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="getRowNumbers-java.util.List-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>getRowNumbers</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#line.184">getRowNumbers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;cells)</pre>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestGlobalThrottler.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev&nbsp;Class</li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceFactory.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" target="_top">Frames</a></li>
-<li><a href="TestGlobalThrottler.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceFactory.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceFactory.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceFactory.html
index 05f30c0..f350fcf 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceFactory.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceFactory.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceFactoryImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -268,7 +268,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceFactoryImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestGlobalReplicationThrottler.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestGlobalReplicationThrottler.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestGlobalReplicationThrottler.html
new file mode 100644
index 0000000..77005d5
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestGlobalReplicationThrottler.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestGlobalReplicationThrottler (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestGlobalReplicationThrottler (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/TestGlobalReplicationThrottler.html" target="_top">Frames</a></li>
+<li><a href="TestGlobalReplicationThrottler.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestGlobalReplicationThrottler" class="title">Uses of Class<br>org.apache.hadoop.hbase.replication.regionserver.TestGlobalReplicationThrottler</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.replication.regionserver.TestGlobalReplicationThrottler</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/TestGlobalReplicationThrottler.html" target="_top">Frames</a></li>
+<li><a href="TestGlobalReplicationThrottler.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestGlobalThrottler.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestGlobalThrottler.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestGlobalThrottler.html
deleted file mode 100644
index 147217f..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestGlobalThrottler.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestGlobalThrottler (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestGlobalThrottler (Apache HBase 3.0.0-SNAPSHOT Test API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/TestGlobalThrottler.html" target="_top">Frames</a></li>
-<li><a href="TestGlobalThrottler.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestGlobalThrottler" class="title">Uses of Class<br>org.apache.hadoop.hbase.replication.regionserver.TestGlobalThrottler</h2>
-</div>
-<div class="classUseContainer">No usage of org.apache.hadoop.hbase.replication.regionserver.TestGlobalThrottler</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/TestGlobalThrottler.html" target="_top">Frames</a></li>
-<li><a href="TestGlobalThrottler.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-frame.html
index f185886..187f97f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-frame.html
@@ -13,7 +13,7 @@
 <div class="indexContainer">
 <h2 title="Classes">Classes</h2>
 <ul title="Classes">
-<li><a href="TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestGlobalThrottler</a></li>
+<li><a href="TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestGlobalReplicationThrottler</a></li>
 <li><a href="TestMetricsReplicationSourceFactory.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestMetricsReplicationSourceFactory</a></li>
 <li><a href="TestMetricsReplicationSourceFactoryImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestMetricsReplicationSourceFactoryImpl</a></li>
 <li><a href="TestMetricsReplicationSourceImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestMetricsReplicationSourceImpl</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html
index db35479..f04cbde 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html
@@ -83,7 +83,7 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalReplicationThrottler</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
index 0fcc9a8..a0f1d82 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
@@ -118,7 +118,7 @@
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.FailInitializeDummyReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestReplicationSourceManager.FailInitializeDummyReplicationSource</span></a></li>
 </ul>
 </li>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestGlobalThrottler</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestGlobalReplicationThrottler</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceFactory.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestMetricsReplicationSourceFactory</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceFactoryImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestMetricsReplicationSourceFactoryImpl</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestMetricsReplicationSourceImpl</span></a></li>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html b/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html
index d104a58..80340b2 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.58">TestZKLeaderManager.MockAbortable</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.57">TestZKLeaderManager.MockAbortable</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.Abortable</pre>
 </li>
@@ -213,7 +213,7 @@ implements org.apache.hadoop.hbase.Abortable</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>aborted</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html#line.59">aborted</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html#line.58">aborted</a></pre>
 </li>
 </ul>
 </li>
@@ -230,7 +230,7 @@ implements org.apache.hadoop.hbase.Abortable</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MockAbortable</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html#line.58">MockAbortable</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html#line.57">MockAbortable</a>()</pre>
 </li>
 </ul>
 </li>
@@ -247,7 +247,7 @@ implements org.apache.hadoop.hbase.Abortable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html#line.62">abort</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;why,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html#line.61">abort</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;why,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -261,7 +261,7 @@ implements org.apache.hadoop.hbase.Abortable</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isAborted</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html#line.69">isAborted</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html#line.68">isAborted</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>isAborted</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Abortable</code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html b/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html
index cfa1b41..f827d7b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.74">TestZKLeaderManager.MockLeader</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.73">TestZKLeaderManager.MockLeader</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a>
 implements org.apache.hadoop.hbase.Stoppable</pre>
 </li>
@@ -281,7 +281,7 @@ implements org.apache.hadoop.hbase.Stoppable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>stopped</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.75">stopped</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.74">stopped</a></pre>
 </li>
 </ul>
 <a name="watcher">
@@ -290,7 +290,7 @@ implements org.apache.hadoop.hbase.Stoppable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>watcher</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.zookeeper.ZKWatcher <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.76">watcher</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.zookeeper.ZKWatcher <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.75">watcher</a></pre>
 </li>
 </ul>
 <a name="zkLeader">
@@ -299,7 +299,7 @@ implements org.apache.hadoop.hbase.Stoppable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>zkLeader</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.zookeeper.ZKLeaderManager <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.77">zkLeader</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.zookeeper.ZKLeaderManager <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.76">zkLeader</a></pre>
 </li>
 </ul>
 <a name="master">
@@ -308,7 +308,7 @@ implements org.apache.hadoop.hbase.Stoppable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>master</h4>
-<pre>private&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/zookeeper/TestZKLeaderManager.MockLeader.html#line.78">master</a></pre>
+<pre>private&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/zookeeper/TestZKLeaderManager.MockLeader.html#line.77">master</a></pre>
 </li>
 </ul>
 <a name="index">
@@ -317,7 +317,7 @@ implements org.apache.hadoop.hbase.Stoppable</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>index</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.79">index</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.78">index</a></pre>
 </li>
 </ul>
 </li>
@@ -334,7 +334,7 @@ implements org.apache.hadoop.hbase.Stoppable</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MockLeader</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.81">MockLeader</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;watcher,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.80">MockLeader</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;watcher,
                   int&nbsp;index)</pre>
 </li>
 </ul>
@@ -352,7 +352,7 @@ implements org.apache.hadoop.hbase.Stoppable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>isMaster</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.90">isMaster</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.89">isMaster</a>()</pre>
 </li>
 </ul>
 <a name="getIndex--">
@@ -361,7 +361,7 @@ implements org.apache.hadoop.hbase.Stoppable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getIndex</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.94">getIndex</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.93">getIndex</a>()</pre>
 </li>
 </ul>
 <a name="getWatcher--">
@@ -370,7 +370,7 @@ implements org.apache.hadoop.hbase.Stoppable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getWatcher</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.98">getWatcher</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.97">getWatcher</a>()</pre>
 </li>
 </ul>
 <a name="run--">
@@ -379,7 +379,7 @@ implements org.apache.hadoop.hbase.Stoppable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.103">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.102">run</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
@@ -394,7 +394,7 @@ implements org.apache.hadoop.hbase.Stoppable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>abdicate</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.117">abdicate</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.116">abdicate</a>()</pre>
 </li>
 </ul>
 <a name="stop-java.lang.String-">
@@ -403,7 +403,7 @@ implements org.apache.hadoop.hbase.Stoppable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.123">stop</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;why)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.122">stop</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;why)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>stop</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Stoppable</code></dd>
@@ -416,7 +416,7 @@ implements org.apache.hadoop.hbase.Stoppable</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.131">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html#line.130">isStopped</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>isStopped</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Stoppable</code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html b/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html
index 7e449b9..6fd40ff 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.47">TestZKLeaderManager</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.46">TestZKLeaderManager</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>
@@ -254,7 +254,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/zookeeper/TestZKLeaderManager.html#line.50">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.49">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -263,7 +263,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/zookeeper/TestZKLeaderManager.html#line.53">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.52">LOG</a></pre>
 </li>
 </ul>
 <a name="LEADER_ZNODE">
@@ -272,7 +272,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LEADER_ZNODE</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/zookeeper/TestZKLeaderManager.html#line.55">LEADER_ZNODE</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/zookeeper/TestZKLeaderManager.html#line.54">LEADER_ZNODE</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -281,7 +281,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_UTIL</h4>
-<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseZKTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.136">TEST_UTIL</a></pre>
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseZKTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.135">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="CANDIDATES">
@@ -290,7 +290,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CANDIDATES</h4>
-<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html" title="class in org.apache.hadoop.hbase.zookeeper">TestZKLeaderManager.MockLeader</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.137">CANDIDATES</a></pre>
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html" title="class in org.apache.hadoop.hbase.zookeeper">TestZKLeaderManager.MockLeader</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.136">CANDIDATES</a></pre>
 </li>
 </ul>
 </li>
@@ -307,7 +307,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestZKLeaderManager</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.47">TestZKLeaderManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.46">TestZKLeaderManager</a>()</pre>
 </li>
 </ul>
 </li>
@@ -324,7 +324,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.140">setupBeforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.139">setupBeforeClass</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -338,7 +338,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.157">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.156">tearDownAfterClass</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -352,7 +352,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testLeaderSelection</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.162">testLeaderSelection</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.161">testLeaderSelection</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>
@@ -366,7 +366,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentLeader</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html" title="class in org.apache.hadoop.hbase.zookeeper">TestZKLeaderManager.MockLeader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.218">getCurrentLeader</a>()
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html" title="class in org.apache.hadoop.hbase.zookeeper">TestZKLeaderManager.MockLeader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.217">getCurrentLeader</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>
@@ -380,7 +380,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>newZK</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.240">newZK</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private static&nbsp;org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#line.239">newZK</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                                                                  org.apache.hadoop.hbase.Abortable&nbsp;abort)
                                                           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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.ExitException.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.ExitException.html b/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.ExitException.html
index 838c7a5..3ed3940 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.ExitException.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.ExitException.html
@@ -160,7 +160,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/SecurityExc
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/zookeeper/TestZKMainServer.ExitException.html#serialVersionUID">serialVersionUID</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>int</code></td>
+<td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/zookeeper/TestZKMainServer.ExitException.html#status">status</a></span></code>&nbsp;</td>
 </tr>
 </table>
@@ -236,7 +236,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/SecurityExc
 <ul class="blockListLast">
 <li class="blockList">
 <h4>status</h4>
-<pre>public final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.ExitException.html#line.46">status</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/TestZKMainServer.ExitException.html#line.46">status</a></pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index 01ea261..f1bb642 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -2689,7 +2689,7 @@
 <li type="circle">org.apache.hadoop.hbase.http.<a href="org/apache/hadoop/hbase/http/TestGlobalFilter.RecordingFilter.html" title="class in org.apache.hadoop.hbase.http"><span class="typeNameLink">TestGlobalFilter.RecordingFilter</span></a> (implements javax.servlet.Filter)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestGlobalMemStoreSize.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestGlobalMemStoreSize</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestGlobalQuotaSettingsImpl.html" title="class in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">TestGlobalQuotaSettingsImpl</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestGlobalThrottler</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestGlobalReplicationThrottler</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapred.<a href="org/apache/hadoop/hbase/mapred/TestGroupingTableMap.html" title="class in org.apache.hadoop.hbase.mapred"><span class="typeNameLink">TestGroupingTableMap</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TestGroupingTableMapper.html" title="class in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TestGroupingTableMapper</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/TestGzipFilter.html" title="class in org.apache.hadoop.hbase.rest"><span class="typeNameLink">TestGzipFilter</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/IntegrationTestMetaReplicas.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/IntegrationTestMetaReplicas.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/IntegrationTestMetaReplicas.html
index a81db54..930ca82 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/IntegrationTestMetaReplicas.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/IntegrationTestMetaReplicas.html
@@ -89,7 +89,7 @@
 <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 static void waitUntilZnodeAvailable(int replicaId) throws Exception {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    String znode = util.getZooKeeperWatcher().znodePaths.getZNodeForReplica(replicaId);<a name="line.84"></a>
+<span class="sourceLineNo">084</span>    String znode = util.getZooKeeperWatcher().getZNodePaths().getZNodeForReplica(replicaId);<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    int i = 0;<a name="line.85"></a>
 <span class="sourceLineNo">086</span>    while (i &lt; 1000) {<a name="line.86"></a>
 <span class="sourceLineNo">087</span>      if (ZKUtil.checkExists(util.getZooKeeperWatcher(), znode) == -1) {<a name="line.87"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMetaWithReplicas.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMetaWithReplicas.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMetaWithReplicas.html
index a0628ea..d1cd116 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMetaWithReplicas.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMetaWithReplicas.html
@@ -187,7 +187,7 @@
 <span class="sourceLineNo">179</span>    for (int i = 1; i &lt; 3; i++) {<a name="line.179"></a>
 <span class="sourceLineNo">180</span>      String secZnode = ZNodePaths.joinZNode(baseZNode,<a name="line.180"></a>
 <span class="sourceLineNo">181</span>          conf.get("zookeeper.znode.metaserver", "meta-region-server") + "-" + i);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      String str = zkw.znodePaths.getZNodeForReplica(i);<a name="line.182"></a>
+<span class="sourceLineNo">182</span>      String str = zkw.getZNodePaths().getZNodeForReplica(i);<a name="line.182"></a>
 <span class="sourceLineNo">183</span>      assertTrue(str.equals(secZnode));<a name="line.183"></a>
 <span class="sourceLineNo">184</span>      // check that the data in the znode is parseable (this would also mean the znode exists)<a name="line.184"></a>
 <span class="sourceLineNo">185</span>      data = ZKUtil.getData(zkw, secZnode);<a name="line.185"></a>
@@ -421,7 +421,7 @@
 <span class="sourceLineNo">413</span>    HBaseFsckRepair.closeRegionSilentlyAndWait(c,<a name="line.413"></a>
 <span class="sourceLineNo">414</span>        rl.getRegionLocation(2).getServerName(), rl.getRegionLocation(2).getRegionInfo());<a name="line.414"></a>
 <span class="sourceLineNo">415</span>    ZKWatcher zkw = TEST_UTIL.getZooKeeperWatcher();<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    ZKUtil.deleteNode(zkw, zkw.znodePaths.getZNodeForReplica(2));<a name="line.416"></a>
+<span class="sourceLineNo">416</span>    ZKUtil.deleteNode(zkw, zkw.getZNodePaths().getZNodeForReplica(2));<a name="line.416"></a>
 <span class="sourceLineNo">417</span>    // check that problem exists<a name="line.417"></a>
 <span class="sourceLineNo">418</span>    HBaseFsck hbck = doFsck(TEST_UTIL.getConfiguration(), false);<a name="line.418"></a>
 <span class="sourceLineNo">419</span>    assertErrors(hbck, new ERROR_CODE[]{ERROR_CODE.UNKNOWN,ERROR_CODE.NO_META_REGION});<a name="line.419"></a>


[27/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
index a71f43d..87b9eec 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
@@ -163,83 +163,84 @@
 <span class="sourceLineNo">155</span>   */<a name="line.155"></a>
 <span class="sourceLineNo">156</span>  protected static List&lt;ServerName&gt; fetchSlavesAddresses(ZKWatcher zkw)<a name="line.156"></a>
 <span class="sourceLineNo">157</span>      throws KeeperException {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    List&lt;String&gt; children = ZKUtil.listChildrenAndWatchForNewChildren(zkw, zkw.znodePaths.rsZNode);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    if (children == null) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      return Collections.emptyList();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    List&lt;ServerName&gt; addresses = new ArrayList&lt;&gt;(children.size());<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    for (String child : children) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      addresses.add(ServerName.parseServerName(child));<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    return addresses;<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>  /**<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Get a list of all the addresses of all the region servers<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * for this peer cluster<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * @return list of addresses<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  // Synchronize peer cluster connection attempts to avoid races and rate<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  // limit connections when multiple replication sources try to connect to<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  // the peer cluster. If the peer cluster is down we can get out of control<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  // over time.<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  public synchronized List&lt;ServerName&gt; getRegionServers() {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    try {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      setRegionServers(fetchSlavesAddresses(this.getZkw()));<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    } catch (KeeperException ke) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      if (LOG.isDebugEnabled()) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        LOG.debug("Fetch slaves addresses failed", ke);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      }<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      reconnect(ke);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    return regionServers;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * Set the list of region servers for that peer<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @param regionServers list of addresses for the region servers<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public synchronized void setRegionServers(List&lt;ServerName&gt; regionServers) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    this.regionServers = regionServers;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    lastRegionServerUpdate = System.currentTimeMillis();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  }<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>   * Get the timestamp at which the last change occurred to the list of region servers to replicate<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * to.<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * @return The System.currentTimeMillis at the last time the list of peer region servers changed.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  public long getLastRegionServerUpdate() {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    return lastRegionServerUpdate;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>  /**<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * Tracks changes to the list of region servers in a peer's cluster.<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  public static class PeerRegionServerListener extends ZKListener {<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>    private final HBaseReplicationEndpoint replicationEndpoint;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private final String regionServerListNode;<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>    public PeerRegionServerListener(HBaseReplicationEndpoint replicationPeer) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      super(replicationPeer.getZkw());<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      this.replicationEndpoint = replicationPeer;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      this.regionServerListNode = replicationEndpoint.getZkw().znodePaths.rsZNode;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span>    @Override<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    public synchronized void nodeChildrenChanged(String path) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      if (path.equals(regionServerListNode)) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        try {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>          LOG.info("Detected change to peer region servers, fetching updated list");<a name="line.226"></a>
-<span class="sourceLineNo">227</span>          replicationEndpoint.setRegionServers(fetchSlavesAddresses(replicationEndpoint.getZkw()));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        } catch (KeeperException e) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          LOG.error("Error reading slave addresses", e);<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>  }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>}<a name="line.234"></a>
+<span class="sourceLineNo">158</span>    List&lt;String&gt; children = ZKUtil.listChildrenAndWatchForNewChildren(zkw,<a name="line.158"></a>
+<span class="sourceLineNo">159</span>            zkw.getZNodePaths().rsZNode);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    if (children == null) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      return Collections.emptyList();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    }<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    List&lt;ServerName&gt; addresses = new ArrayList&lt;&gt;(children.size());<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    for (String child : children) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      addresses.add(ServerName.parseServerName(child));<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    return addresses;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  /**<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * Get a list of all the addresses of all the region servers<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * for this peer cluster<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   * @return list of addresses<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   */<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  // Synchronize peer cluster connection attempts to avoid races and rate<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  // limit connections when multiple replication sources try to connect to<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  // the peer cluster. If the peer cluster is down we can get out of control<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  // over time.<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public synchronized List&lt;ServerName&gt; getRegionServers() {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    try {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      setRegionServers(fetchSlavesAddresses(this.getZkw()));<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    } catch (KeeperException ke) {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      if (LOG.isDebugEnabled()) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        LOG.debug("Fetch slaves addresses failed", ke);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      reconnect(ke);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    return regionServers;<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>   * Set the list of region servers for that peer<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   * @param regionServers list of addresses for the region servers<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  public synchronized void setRegionServers(List&lt;ServerName&gt; regionServers) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    this.regionServers = regionServers;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    lastRegionServerUpdate = System.currentTimeMillis();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  }<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>  /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * Get the timestamp at which the last change occurred to the list of region servers to replicate<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * to.<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * @return The System.currentTimeMillis at the last time the list of peer region servers changed.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  public long getLastRegionServerUpdate() {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    return lastRegionServerUpdate;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  }<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>  /**<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * Tracks changes to the list of region servers in a peer's cluster.<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   */<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  public static class PeerRegionServerListener extends ZKListener {<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>    private final HBaseReplicationEndpoint replicationEndpoint;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    private final String regionServerListNode;<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    public PeerRegionServerListener(HBaseReplicationEndpoint replicationPeer) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      super(replicationPeer.getZkw());<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      this.replicationEndpoint = replicationPeer;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      this.regionServerListNode = replicationEndpoint.getZkw().getZNodePaths().rsZNode;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>    @Override<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    public synchronized void nodeChildrenChanged(String path) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      if (path.equals(regionServerListNode)) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        try {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>          LOG.info("Detected change to peer region servers, fetching updated list");<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          replicationEndpoint.setRegionServers(fetchSlavesAddresses(replicationEndpoint.getZkw()));<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        } catch (KeeperException e) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>          LOG.error("Error reading slave addresses", e);<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>    }<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
index a71f43d..87b9eec 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
@@ -163,83 +163,84 @@
 <span class="sourceLineNo">155</span>   */<a name="line.155"></a>
 <span class="sourceLineNo">156</span>  protected static List&lt;ServerName&gt; fetchSlavesAddresses(ZKWatcher zkw)<a name="line.156"></a>
 <span class="sourceLineNo">157</span>      throws KeeperException {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    List&lt;String&gt; children = ZKUtil.listChildrenAndWatchForNewChildren(zkw, zkw.znodePaths.rsZNode);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    if (children == null) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      return Collections.emptyList();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    List&lt;ServerName&gt; addresses = new ArrayList&lt;&gt;(children.size());<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    for (String child : children) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      addresses.add(ServerName.parseServerName(child));<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    return addresses;<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>  /**<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Get a list of all the addresses of all the region servers<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * for this peer cluster<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * @return list of addresses<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  // Synchronize peer cluster connection attempts to avoid races and rate<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  // limit connections when multiple replication sources try to connect to<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  // the peer cluster. If the peer cluster is down we can get out of control<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  // over time.<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  public synchronized List&lt;ServerName&gt; getRegionServers() {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    try {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      setRegionServers(fetchSlavesAddresses(this.getZkw()));<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    } catch (KeeperException ke) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      if (LOG.isDebugEnabled()) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        LOG.debug("Fetch slaves addresses failed", ke);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      }<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      reconnect(ke);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    return regionServers;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * Set the list of region servers for that peer<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @param regionServers list of addresses for the region servers<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public synchronized void setRegionServers(List&lt;ServerName&gt; regionServers) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    this.regionServers = regionServers;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    lastRegionServerUpdate = System.currentTimeMillis();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  }<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>   * Get the timestamp at which the last change occurred to the list of region servers to replicate<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * to.<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * @return The System.currentTimeMillis at the last time the list of peer region servers changed.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  public long getLastRegionServerUpdate() {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    return lastRegionServerUpdate;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>  /**<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * Tracks changes to the list of region servers in a peer's cluster.<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  public static class PeerRegionServerListener extends ZKListener {<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>    private final HBaseReplicationEndpoint replicationEndpoint;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private final String regionServerListNode;<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>    public PeerRegionServerListener(HBaseReplicationEndpoint replicationPeer) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      super(replicationPeer.getZkw());<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      this.replicationEndpoint = replicationPeer;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      this.regionServerListNode = replicationEndpoint.getZkw().znodePaths.rsZNode;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span>    @Override<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    public synchronized void nodeChildrenChanged(String path) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      if (path.equals(regionServerListNode)) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        try {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>          LOG.info("Detected change to peer region servers, fetching updated list");<a name="line.226"></a>
-<span class="sourceLineNo">227</span>          replicationEndpoint.setRegionServers(fetchSlavesAddresses(replicationEndpoint.getZkw()));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        } catch (KeeperException e) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          LOG.error("Error reading slave addresses", e);<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>  }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>}<a name="line.234"></a>
+<span class="sourceLineNo">158</span>    List&lt;String&gt; children = ZKUtil.listChildrenAndWatchForNewChildren(zkw,<a name="line.158"></a>
+<span class="sourceLineNo">159</span>            zkw.getZNodePaths().rsZNode);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    if (children == null) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      return Collections.emptyList();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    }<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    List&lt;ServerName&gt; addresses = new ArrayList&lt;&gt;(children.size());<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    for (String child : children) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      addresses.add(ServerName.parseServerName(child));<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    return addresses;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  /**<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * Get a list of all the addresses of all the region servers<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * for this peer cluster<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   * @return list of addresses<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   */<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  // Synchronize peer cluster connection attempts to avoid races and rate<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  // limit connections when multiple replication sources try to connect to<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  // the peer cluster. If the peer cluster is down we can get out of control<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  // over time.<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public synchronized List&lt;ServerName&gt; getRegionServers() {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    try {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      setRegionServers(fetchSlavesAddresses(this.getZkw()));<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    } catch (KeeperException ke) {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      if (LOG.isDebugEnabled()) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        LOG.debug("Fetch slaves addresses failed", ke);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      reconnect(ke);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    return regionServers;<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>   * Set the list of region servers for that peer<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   * @param regionServers list of addresses for the region servers<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  public synchronized void setRegionServers(List&lt;ServerName&gt; regionServers) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    this.regionServers = regionServers;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    lastRegionServerUpdate = System.currentTimeMillis();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  }<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>  /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * Get the timestamp at which the last change occurred to the list of region servers to replicate<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * to.<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * @return The System.currentTimeMillis at the last time the list of peer region servers changed.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  public long getLastRegionServerUpdate() {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    return lastRegionServerUpdate;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  }<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>  /**<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * Tracks changes to the list of region servers in a peer's cluster.<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   */<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  public static class PeerRegionServerListener extends ZKListener {<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>    private final HBaseReplicationEndpoint replicationEndpoint;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    private final String regionServerListNode;<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    public PeerRegionServerListener(HBaseReplicationEndpoint replicationPeer) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      super(replicationPeer.getZkw());<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      this.replicationEndpoint = replicationPeer;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      this.regionServerListNode = replicationEndpoint.getZkw().getZNodePaths().rsZNode;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>    @Override<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    public synchronized void nodeChildrenChanged(String path) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      if (path.equals(regionServerListNode)) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        try {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>          LOG.info("Detected change to peer region servers, fetching updated list");<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          replicationEndpoint.setRegionServers(fetchSlavesAddresses(replicationEndpoint.getZkw()));<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        } catch (KeeperException e) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>          LOG.error("Error reading slave addresses", e);<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>    }<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.OtherRegionServerWatcher.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.OtherRegionServerWatcher.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.OtherRegionServerWatcher.html
index 42a6627..c212d30 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.OtherRegionServerWatcher.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.OtherRegionServerWatcher.html
@@ -146,7 +146,7 @@
 <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>    private boolean refreshListIfRightPath(String path) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      if (!path.startsWith(this.watcher.znodePaths.rsZNode)) {<a name="line.141"></a>
+<span class="sourceLineNo">141</span>      if (!path.startsWith(this.watcher.getZNodePaths().rsZNode)) {<a name="line.141"></a>
 <span class="sourceLineNo">142</span>        return false;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>      }<a name="line.143"></a>
 <span class="sourceLineNo">144</span>      return refreshOtherRegionServersList(true);<a name="line.144"></a>
@@ -190,16 +190,17 @@
 <span class="sourceLineNo">182</span>    List&lt;String&gt; result = null;<a name="line.182"></a>
 <span class="sourceLineNo">183</span>    try {<a name="line.183"></a>
 <span class="sourceLineNo">184</span>      if (watch) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        result = ZKUtil.listChildrenAndWatchThem(this.zookeeper, this.zookeeper.znodePaths.rsZNode);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      } else {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        result = ZKUtil.listChildrenNoWatch(this.zookeeper, this.zookeeper.znodePaths.rsZNode);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    } catch (KeeperException e) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      this.abortable.abort("Get list of registered region servers", e);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    return result;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>}<a name="line.194"></a>
+<span class="sourceLineNo">185</span>        result = ZKUtil.listChildrenAndWatchThem(this.zookeeper,<a name="line.185"></a>
+<span class="sourceLineNo">186</span>                this.zookeeper.getZNodePaths().rsZNode);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      } else {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        result = ZKUtil.listChildrenNoWatch(this.zookeeper, this.zookeeper.getZNodePaths().rsZNode);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    } catch (KeeperException e) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      this.abortable.abort("Get list of registered region servers", e);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    return result;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  }<a name="line.194"></a>
+<span class="sourceLineNo">195</span>}<a name="line.195"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.html
index 42a6627..c212d30 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.html
@@ -146,7 +146,7 @@
 <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>    private boolean refreshListIfRightPath(String path) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      if (!path.startsWith(this.watcher.znodePaths.rsZNode)) {<a name="line.141"></a>
+<span class="sourceLineNo">141</span>      if (!path.startsWith(this.watcher.getZNodePaths().rsZNode)) {<a name="line.141"></a>
 <span class="sourceLineNo">142</span>        return false;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>      }<a name="line.143"></a>
 <span class="sourceLineNo">144</span>      return refreshOtherRegionServersList(true);<a name="line.144"></a>
@@ -190,16 +190,17 @@
 <span class="sourceLineNo">182</span>    List&lt;String&gt; result = null;<a name="line.182"></a>
 <span class="sourceLineNo">183</span>    try {<a name="line.183"></a>
 <span class="sourceLineNo">184</span>      if (watch) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        result = ZKUtil.listChildrenAndWatchThem(this.zookeeper, this.zookeeper.znodePaths.rsZNode);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      } else {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        result = ZKUtil.listChildrenNoWatch(this.zookeeper, this.zookeeper.znodePaths.rsZNode);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    } catch (KeeperException e) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      this.abortable.abort("Get list of registered region servers", e);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    return result;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>}<a name="line.194"></a>
+<span class="sourceLineNo">185</span>        result = ZKUtil.listChildrenAndWatchThem(this.zookeeper,<a name="line.185"></a>
+<span class="sourceLineNo">186</span>                this.zookeeper.getZNodePaths().rsZNode);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      } else {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        result = ZKUtil.listChildrenNoWatch(this.zookeeper, this.zookeeper.getZNodePaths().rsZNode);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    } catch (KeeperException e) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      this.abortable.abort("Get list of registered region servers", e);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    return result;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  }<a name="line.194"></a>
+<span class="sourceLineNo">195</span>}<a name="line.195"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/replication/ZKReplicationStorageBase.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ZKReplicationStorageBase.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ZKReplicationStorageBase.html
index 3751e1f..a1a0f03 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ZKReplicationStorageBase.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ZKReplicationStorageBase.html
@@ -58,7 +58,7 @@
 <span class="sourceLineNo">050</span>    this.zookeeper = zookeeper;<a name="line.50"></a>
 <span class="sourceLineNo">051</span>    this.conf = conf;<a name="line.51"></a>
 <span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>    this.replicationZNode = ZNodePaths.joinZNode(this.zookeeper.znodePaths.baseZNode,<a name="line.53"></a>
+<span class="sourceLineNo">053</span>    this.replicationZNode = ZNodePaths.joinZNode(this.zookeeper.getZNodePaths().baseZNode,<a name="line.53"></a>
 <span class="sourceLineNo">054</span>      conf.get(REPLICATION_ZNODE, REPLICATION_ZNODE_DEFAULT));<a name="line.54"></a>
 <span class="sourceLineNo">055</span>  }<a name="line.55"></a>
 <span class="sourceLineNo">056</span><a name="line.56"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/replication/master/ReplicationPeerConfigUpgrader.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/master/ReplicationPeerConfigUpgrader.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/master/ReplicationPeerConfigUpgrader.html
index 9a912c5..1f9969e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/master/ReplicationPeerConfigUpgrader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/master/ReplicationPeerConfigUpgrader.html
@@ -105,7 +105,7 @@
 <span class="sourceLineNo">097</span><a name="line.97"></a>
 <span class="sourceLineNo">098</span>  @VisibleForTesting<a name="line.98"></a>
 <span class="sourceLineNo">099</span>  protected String getTableCFsNode(String peerId) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    String replicationZNode = ZNodePaths.joinZNode(zookeeper.znodePaths.baseZNode,<a name="line.100"></a>
+<span class="sourceLineNo">100</span>    String replicationZNode = ZNodePaths.joinZNode(zookeeper.getZNodePaths().baseZNode,<a name="line.100"></a>
 <span class="sourceLineNo">101</span>      conf.get(REPLICATION_ZNODE, REPLICATION_ZNODE_DEFAULT));<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    String peersZNode =<a name="line.102"></a>
 <span class="sourceLineNo">103</span>        ZNodePaths.joinZNode(replicationZNode, conf.get(PEERS_ZNODE, PEERS_ZNODE_DEFAULT));<a name="line.103"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
index 119472c..2dc2148 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
@@ -606,32 +606,33 @@
 <span class="sourceLineNo">598</span>  }<a name="line.598"></a>
 <span class="sourceLineNo">599</span><a name="line.599"></a>
 <span class="sourceLineNo">600</span>  @Override<a name="line.600"></a>
-<span class="sourceLineNo">601</span>  public void postShipEdits(List&lt;Entry&gt; entries, int batchSize) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    if (throttler.isEnabled()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      throttler.addPushSize(batchSize);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    totalReplicatedEdits.addAndGet(entries.size());<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    totalBufferUsed.addAndGet(-batchSize);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span>  @Override<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  public WALFileLengthProvider getWALFileLengthProvider() {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    return walFileLengthProvider;<a name="line.611"></a>
-<span class="sourceLineNo">612</span>  }<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span>  @Override<a name="line.614"></a>
-<span class="sourceLineNo">615</span>  public ServerName getServerWALsBelongTo() {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    return server.getServerName();<a name="line.616"></a>
-<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>  Server getServer() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return server;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  ReplicationQueueStorage getQueueStorage() {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    return queueStorage;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>  }<a name="line.625"></a>
-<span class="sourceLineNo">626</span>}<a name="line.626"></a>
+<span class="sourceLineNo">601</span>  //offsets totalBufferUsed by deducting shipped batchSize.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>  public void postShipEdits(List&lt;Entry&gt; entries, int batchSize) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>    if (throttler.isEnabled()) {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      throttler.addPushSize(batchSize);<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    }<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    totalReplicatedEdits.addAndGet(entries.size());<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    totalBufferUsed.addAndGet(-batchSize);<a name="line.607"></a>
+<span class="sourceLineNo">608</span>  }<a name="line.608"></a>
+<span class="sourceLineNo">609</span><a name="line.609"></a>
+<span class="sourceLineNo">610</span>  @Override<a name="line.610"></a>
+<span class="sourceLineNo">611</span>  public WALFileLengthProvider getWALFileLengthProvider() {<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    return walFileLengthProvider;<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
+<span class="sourceLineNo">614</span><a name="line.614"></a>
+<span class="sourceLineNo">615</span>  @Override<a name="line.615"></a>
+<span class="sourceLineNo">616</span>  public ServerName getServerWALsBelongTo() {<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    return server.getServerName();<a name="line.617"></a>
+<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
+<span class="sourceLineNo">619</span><a name="line.619"></a>
+<span class="sourceLineNo">620</span>  Server getServer() {<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    return server;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>  }<a name="line.622"></a>
+<span class="sourceLineNo">623</span><a name="line.623"></a>
+<span class="sourceLineNo">624</span>  ReplicationQueueStorage getQueueStorage() {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    return queueStorage;<a name="line.625"></a>
+<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
+<span class="sourceLineNo">627</span>}<a name="line.627"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
index 119472c..2dc2148 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
@@ -606,32 +606,33 @@
 <span class="sourceLineNo">598</span>  }<a name="line.598"></a>
 <span class="sourceLineNo">599</span><a name="line.599"></a>
 <span class="sourceLineNo">600</span>  @Override<a name="line.600"></a>
-<span class="sourceLineNo">601</span>  public void postShipEdits(List&lt;Entry&gt; entries, int batchSize) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    if (throttler.isEnabled()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      throttler.addPushSize(batchSize);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    totalReplicatedEdits.addAndGet(entries.size());<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    totalBufferUsed.addAndGet(-batchSize);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span>  @Override<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  public WALFileLengthProvider getWALFileLengthProvider() {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    return walFileLengthProvider;<a name="line.611"></a>
-<span class="sourceLineNo">612</span>  }<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span>  @Override<a name="line.614"></a>
-<span class="sourceLineNo">615</span>  public ServerName getServerWALsBelongTo() {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    return server.getServerName();<a name="line.616"></a>
-<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>  Server getServer() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return server;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  ReplicationQueueStorage getQueueStorage() {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    return queueStorage;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>  }<a name="line.625"></a>
-<span class="sourceLineNo">626</span>}<a name="line.626"></a>
+<span class="sourceLineNo">601</span>  //offsets totalBufferUsed by deducting shipped batchSize.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>  public void postShipEdits(List&lt;Entry&gt; entries, int batchSize) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>    if (throttler.isEnabled()) {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      throttler.addPushSize(batchSize);<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    }<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    totalReplicatedEdits.addAndGet(entries.size());<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    totalBufferUsed.addAndGet(-batchSize);<a name="line.607"></a>
+<span class="sourceLineNo">608</span>  }<a name="line.608"></a>
+<span class="sourceLineNo">609</span><a name="line.609"></a>
+<span class="sourceLineNo">610</span>  @Override<a name="line.610"></a>
+<span class="sourceLineNo">611</span>  public WALFileLengthProvider getWALFileLengthProvider() {<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    return walFileLengthProvider;<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
+<span class="sourceLineNo">614</span><a name="line.614"></a>
+<span class="sourceLineNo">615</span>  @Override<a name="line.615"></a>
+<span class="sourceLineNo">616</span>  public ServerName getServerWALsBelongTo() {<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    return server.getServerName();<a name="line.617"></a>
+<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
+<span class="sourceLineNo">619</span><a name="line.619"></a>
+<span class="sourceLineNo">620</span>  Server getServer() {<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    return server;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>  }<a name="line.622"></a>
+<span class="sourceLineNo">623</span><a name="line.623"></a>
+<span class="sourceLineNo">624</span>  ReplicationQueueStorage getQueueStorage() {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    return queueStorage;<a name="line.625"></a>
+<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
+<span class="sourceLineNo">627</span>}<a name="line.627"></a>
 
 
 


[38/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html
index bc68439..ead6a6a 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -262,67 +262,73 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#cleanUpHFileRefs-org.apache.hadoop.hbase.wal.WALEdit-">cleanUpHFileRefs</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#getBatchEntrySizeExcludeBulkLoad-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-">getBatchEntrySizeExcludeBulkLoad</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;entryBatch)</code>
+<div class="block">get batchEntry size excludes bulk load file sizes.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>(package private) org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#getCurrentPath--">getCurrentPath</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>(package private) long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#getCurrentPosition--">getCurrentPosition</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>(package private) long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#getStartPosition--">getStartPosition</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#isActive--">isActive</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#isFinished--">isFinished</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#noMoreData--">noMoreData</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#postFinish--">postFinish</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#run--">run</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#setWALReader-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceWALReader-">setWALReader</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a>&nbsp;entryReader)</code>&nbsp;</td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#setWorkerState-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceShipper.WorkerState-">setWorkerState</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a>&nbsp;state)</code>&nbsp;</td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#shipEdits-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-">shipEdits</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;entryBatch)</code>
 <div class="block">Do the shipping logic</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#sleepForRetries-java.lang.String-int-">sleepForRetries</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
                int&nbsp;sleepMultiplier)</code>
 <div class="block">Do the sleeping logic</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
+<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/replication/regionserver/ReplicationSourceShipper.html#startup-java.lang.Thread.UncaughtExceptionHandler-">startup</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.UncaughtExceptionHandler.html?is-external=true" title="class or interface in java.lang">Thread.UncaughtExceptionHandler</a>&nbsp;handler)</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#stopWorker--">stopWorker</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#updateLogPosition-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-">updateLogPosition</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch)</code>&nbsp;</td>
 </tr>
@@ -515,13 +521,24 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.123">postFinish</a>()</pre>
 </li>
 </ul>
+<a name="getBatchEntrySizeExcludeBulkLoad-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getBatchEntrySizeExcludeBulkLoad</h4>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.130">getBatchEntrySizeExcludeBulkLoad</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;entryBatch)</pre>
+<div class="block">get batchEntry size excludes bulk load file sizes.
+ Uses ReplicationSourceWALReader's static method.</div>
+</li>
+</ul>
 <a name="shipEdits-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>shipEdits</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.129">shipEdits</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;entryBatch)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.141">shipEdits</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;entryBatch)</pre>
 <div class="block">Do the shipping logic</div>
 </li>
 </ul>
@@ -531,7 +548,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanUpHFileRefs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.199">cleanUpHFileRefs</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.216">cleanUpHFileRefs</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)
                        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>
@@ -545,7 +562,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>updateLogPosition</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.223">updateLogPosition</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.240">updateLogPosition</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch)</pre>
 </li>
 </ul>
 <a name="startup-java.lang.Thread.UncaughtExceptionHandler-">
@@ -554,7 +571,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>startup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.248">startup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.UncaughtExceptionHandler.html?is-external=true" title="class or interface in java.lang">Thread.UncaughtExceptionHandler</a>&nbsp;handler)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.265">startup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.UncaughtExceptionHandler.html?is-external=true" title="class or interface in java.lang">Thread.UncaughtExceptionHandler</a>&nbsp;handler)</pre>
 </li>
 </ul>
 <a name="getCurrentPath--">
@@ -563,7 +580,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentPath</h4>
-<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.254">getCurrentPath</a>()</pre>
+<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.271">getCurrentPath</a>()</pre>
 </li>
 </ul>
 <a name="getCurrentPosition--">
@@ -572,7 +589,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentPosition</h4>
-<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.258">getCurrentPosition</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.275">getCurrentPosition</a>()</pre>
 </li>
 </ul>
 <a name="setWALReader-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceWALReader-">
@@ -581,7 +598,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setWALReader</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.262">setWALReader</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a>&nbsp;entryReader)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.279">setWALReader</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a>&nbsp;entryReader)</pre>
 </li>
 </ul>
 <a name="getStartPosition--">
@@ -590,7 +607,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartPosition</h4>
-<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.266">getStartPosition</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.283">getStartPosition</a>()</pre>
 </li>
 </ul>
 <a name="isActive--">
@@ -599,7 +616,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isActive</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.270">isActive</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.287">isActive</a>()</pre>
 </li>
 </ul>
 <a name="setWorkerState-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceShipper.WorkerState-">
@@ -608,7 +625,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setWorkerState</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.274">setWorkerState</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a>&nbsp;state)</pre>
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.291">setWorkerState</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a>&nbsp;state)</pre>
 </li>
 </ul>
 <a name="stopWorker--">
@@ -617,7 +634,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>stopWorker</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.278">stopWorker</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.295">stopWorker</a>()</pre>
 </li>
 </ul>
 <a name="isFinished--">
@@ -626,7 +643,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isFinished</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.282">isFinished</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.299">isFinished</a>()</pre>
 </li>
 </ul>
 <a name="sleepForRetries-java.lang.String-int-">
@@ -635,7 +652,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>sleepForRetries</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.292">sleepForRetries</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.309">sleepForRetries</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
                                int&nbsp;sleepMultiplier)</pre>
 <div class="block">Do the sleeping logic</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html
index 6020731..ccc1429 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":9,"i16":10,"i17":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":9,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":9,"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";
@@ -124,7 +124,7 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>@InterfaceAudience.Private
  @InterfaceStability.Evolving
-class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.53">ReplicationSourceWALReader</a>
+class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.54">ReplicationSourceWALReader</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></pre>
 <div class="block">Reads and filters WAL entries, groups the filtered entries into batches, and puts the batches
  onto a queue</div>
@@ -281,36 +281,34 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
                <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
-<td class="colFirst"><code>private int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#calculateTotalSizeOfStoreFiles-org.apache.hadoop.hbase.wal.WALEdit-">calculateTotalSizeOfStoreFiles</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</code>
-<div class="block">Calculate the total size of all the store files</div>
-</td>
-</tr>
-<tr id="i3" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#checkQuota--">checkQuota</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#countDistinctRowKeysAndHFiles-org.apache.hadoop.hbase.wal.WALEdit-">countDistinctRowKeysAndHFiles</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</code>
 <div class="block">Count the number of different row keys in the given edit because of mini-batching.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#createBatch-org.apache.hadoop.hbase.replication.regionserver.WALEntryStream-">createBatch</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>&nbsp;entryStream)</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#filterEntry-org.apache.hadoop.hbase.wal.WAL.Entry-">filterEntry</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#getCurrentPath--">getCurrentPath</a></span>()</code>&nbsp;</td>
 </tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>static long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#getEntrySizeExcludeBulkLoad-org.apache.hadoop.hbase.wal.WAL.Entry-">getEntrySizeExcludeBulkLoad</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</code>&nbsp;</td>
+</tr>
 <tr id="i8" class="altColor">
 <td class="colFirst"><code>private long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#getEntrySize-org.apache.hadoop.hbase.wal.WAL.Entry-">getEntrySize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#getEntrySizeIncludeBulkLoad-org.apache.hadoop.hbase.wal.WAL.Entry-">getEntrySizeIncludeBulkLoad</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</code>&nbsp;</td>
 </tr>
 <tr id="i9" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
@@ -337,18 +335,24 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#setReaderRunning-boolean-">setReaderRunning</a></span>(boolean&nbsp;readerRunning)</code>&nbsp;</td>
 </tr>
 <tr id="i15" class="rowColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#sizeOfStoreFilesIncludeBulkLoad-org.apache.hadoop.hbase.wal.WALEdit-">sizeOfStoreFilesIncludeBulkLoad</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</code>
+<div class="block">Calculate the total size of all the store files</div>
+</td>
+</tr>
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>protected static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#switched-org.apache.hadoop.hbase.replication.regionserver.WALEntryStream-org.apache.hadoop.fs.Path-">switched</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>&nbsp;entryStream,
         org.apache.hadoop.fs.Path&nbsp;path)</code>&nbsp;</td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#take--">take</a></span>()</code>
 <div class="block">Retrieves the next batch of WAL entries from the queue, waiting up to the specified time for a
  batch to become available</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#updateBatchStats-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-org.apache.hadoop.hbase.wal.WAL.Entry-long-">updateBatchStats</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch,
                 <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry,
@@ -389,7 +393,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.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/replication/regionserver/ReplicationSourceWALReader.html#line.54">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.55">LOG</a></pre>
 </li>
 </ul>
 <a name="logQueue">
@@ -398,7 +402,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>logQueue</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/PriorityBlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">PriorityBlockingQueue</a>&lt;org.apache.hadoop.fs.Path&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.56">logQueue</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/PriorityBlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">PriorityBlockingQueue</a>&lt;org.apache.hadoop.fs.Path&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.57">logQueue</a></pre>
 </li>
 </ul>
 <a name="fs">
@@ -407,7 +411,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>fs</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.57">fs</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.58">fs</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -416,7 +420,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.58">conf</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.59">conf</a></pre>
 </li>
 </ul>
 <a name="filter">
@@ -425,7 +429,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>filter</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/WALEntryFilter.html" title="interface in org.apache.hadoop.hbase.replication">WALEntryFilter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.59">filter</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/WALEntryFilter.html" title="interface in org.apache.hadoop.hbase.replication">WALEntryFilter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.60">filter</a></pre>
 </li>
 </ul>
 <a name="source">
@@ -434,7 +438,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>source</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSource</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.60">source</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSource</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.61">source</a></pre>
 </li>
 </ul>
 <a name="entryBatchQueue">
@@ -443,7 +447,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>entryBatchQueue</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.62">entryBatchQueue</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.63">entryBatchQueue</a></pre>
 </li>
 </ul>
 <a name="replicationBatchSizeCapacity">
@@ -452,7 +456,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationBatchSizeCapacity</h4>
-<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.64">replicationBatchSizeCapacity</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.65">replicationBatchSizeCapacity</a></pre>
 </li>
 </ul>
 <a name="replicationBatchCountCapacity">
@@ -461,7 +465,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationBatchCountCapacity</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.66">replicationBatchCountCapacity</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.67">replicationBatchCountCapacity</a></pre>
 </li>
 </ul>
 <a name="currentPosition">
@@ -470,7 +474,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>currentPosition</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.68">currentPosition</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.69">currentPosition</a></pre>
 </li>
 </ul>
 <a name="sleepForRetries">
@@ -479,7 +483,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>sleepForRetries</h4>
-<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.69">sleepForRetries</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.70">sleepForRetries</a></pre>
 </li>
 </ul>
 <a name="maxRetriesMultiplier">
@@ -488,7 +492,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>maxRetriesMultiplier</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.70">maxRetriesMultiplier</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.71">maxRetriesMultiplier</a></pre>
 </li>
 </ul>
 <a name="eofAutoRecovery">
@@ -497,7 +501,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>eofAutoRecovery</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.71">eofAutoRecovery</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.72">eofAutoRecovery</a></pre>
 </li>
 </ul>
 <a name="isReaderRunning">
@@ -506,7 +510,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isReaderRunning</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.74">isReaderRunning</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.75">isReaderRunning</a></pre>
 </li>
 </ul>
 <a name="totalBufferUsed">
@@ -515,7 +519,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>totalBufferUsed</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.76">totalBufferUsed</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.77">totalBufferUsed</a></pre>
 </li>
 </ul>
 <a name="totalBufferQuota">
@@ -524,7 +528,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>totalBufferQuota</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.77">totalBufferQuota</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.78">totalBufferQuota</a></pre>
 </li>
 </ul>
 </li>
@@ -541,7 +545,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ReplicationSourceWALReader</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.89">ReplicationSourceWALReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.90">ReplicationSourceWALReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                   org.apache.hadoop.conf.Configuration&nbsp;conf,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/PriorityBlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">PriorityBlockingQueue</a>&lt;org.apache.hadoop.fs.Path&gt;&nbsp;logQueue,
                                   long&nbsp;startPosition,
@@ -574,7 +578,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.121">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.122">run</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
@@ -589,7 +593,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addEntryToBatch</h4>
-<pre>protected final&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.166">addEntryToBatch</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch,
+<pre>protected final&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.167">addEntryToBatch</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch,
                                         <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
 </li>
 </ul>
@@ -599,7 +603,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>switched</h4>
-<pre>protected static final&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.180">switched</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>&nbsp;entryStream,
+<pre>protected static final&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.183">switched</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>&nbsp;entryStream,
                                         org.apache.hadoop.fs.Path&nbsp;path)</pre>
 </li>
 </ul>
@@ -609,7 +613,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readWALEntries</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.185">readWALEntries</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>&nbsp;entryStream)
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.188">readWALEntries</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>&nbsp;entryStream)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -625,7 +629,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>handleEmptyWALEntryBatch</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.227">handleEmptyWALEntryBatch</a>(org.apache.hadoop.fs.Path&nbsp;currentPath)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.230">handleEmptyWALEntryBatch</a>(org.apache.hadoop.fs.Path&nbsp;currentPath)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -639,7 +643,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>handleEofException</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.242">handleEofException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;e)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.245">handleEofException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;e)</pre>
 </li>
 </ul>
 <a name="getCurrentPath--">
@@ -648,7 +652,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentPath</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.257">getCurrentPath</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.260">getCurrentPath</a>()</pre>
 </li>
 </ul>
 <a name="checkQuota--">
@@ -657,7 +661,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkQuota</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.268">checkQuota</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.271">checkQuota</a>()</pre>
 </li>
 </ul>
 <a name="createBatch-org.apache.hadoop.hbase.replication.regionserver.WALEntryStream-">
@@ -666,7 +670,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createBatch</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.277">createBatch</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>&nbsp;entryStream)</pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.280">createBatch</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>&nbsp;entryStream)</pre>
 </li>
 </ul>
 <a name="filterEntry-org.apache.hadoop.hbase.wal.WAL.Entry-">
@@ -675,7 +679,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>filterEntry</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.281">filterEntry</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.284">filterEntry</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
 </li>
 </ul>
 <a name="take--">
@@ -684,7 +688,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>take</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.295">take</a>()
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.298">take</a>()
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Retrieves the next batch of WAL entries from the queue, waiting up to the specified time for a
  batch to become available</div>
@@ -696,13 +700,22 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 </dl>
 </li>
 </ul>
-<a name="getEntrySize-org.apache.hadoop.hbase.wal.WAL.Entry-">
+<a name="getEntrySizeIncludeBulkLoad-org.apache.hadoop.hbase.wal.WAL.Entry-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getEntrySizeIncludeBulkLoad</h4>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.302">getEntrySizeIncludeBulkLoad</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
+</li>
+</ul>
+<a name="getEntrySizeExcludeBulkLoad-org.apache.hadoop.hbase.wal.WAL.Entry-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getEntrySize</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.299">getEntrySize</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
+<h4>getEntrySizeExcludeBulkLoad</h4>
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.309">getEntrySizeExcludeBulkLoad</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
 </li>
 </ul>
 <a name="updateBatchStats-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-org.apache.hadoop.hbase.wal.WAL.Entry-long-">
@@ -711,7 +724,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>updateBatchStats</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.304">updateBatchStats</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.316">updateBatchStats</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch,
                               <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry,
                               long&nbsp;entrySize)</pre>
 </li>
@@ -722,7 +735,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>countDistinctRowKeysAndHFiles</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.318">countDistinctRowKeysAndHFiles</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.330">countDistinctRowKeysAndHFiles</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</pre>
 <div class="block">Count the number of different row keys in the given edit because of mini-batching. We assume
  that there's at least one Cell in the WALEdit.</div>
 <dl>
@@ -733,13 +746,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 </dl>
 </li>
 </ul>
-<a name="calculateTotalSizeOfStoreFiles-org.apache.hadoop.hbase.wal.WALEdit-">
+<a name="sizeOfStoreFilesIncludeBulkLoad-org.apache.hadoop.hbase.wal.WALEdit-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>calculateTotalSizeOfStoreFiles</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.356">calculateTotalSizeOfStoreFiles</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</pre>
+<h4>sizeOfStoreFilesIncludeBulkLoad</h4>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.368">sizeOfStoreFilesIncludeBulkLoad</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</pre>
 <div class="block">Calculate the total size of all the store files</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -755,7 +768,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>acquireBufferQuota</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.386">acquireBufferQuota</a>(long&nbsp;size)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.398">acquireBufferQuota</a>(long&nbsp;size)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>size</code> - delta size for grown buffer</dd>
@@ -770,7 +783,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isReaderRunning</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.393">isReaderRunning</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.405">isReaderRunning</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>whether the reader thread is running</dd>
@@ -783,7 +796,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setReaderRunning</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.400">setReaderRunning</a>(boolean&nbsp;readerRunning)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.412">setReaderRunning</a>(boolean&nbsp;readerRunning)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>readerRunning</code> - the readerRunning to set</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/replication/regionserver/SerialReplicationSourceWALReader.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/SerialReplicationSourceWALReader.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/SerialReplicationSourceWALReader.html
index 92145a9..a528274 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/SerialReplicationSourceWALReader.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/SerialReplicationSourceWALReader.html
@@ -227,7 +227,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionser
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#addEntryToBatch-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-org.apache.hadoop.hbase.wal.WAL.Entry-">addEntryToBatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#createBatch-org.apache.hadoop.hbase.replication.regionserver.WALEntryStream-">createBatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#filterEntry-org.apache.hadoop.hbase.wal.WAL.Entry-">filterEntry</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#getCurrentPath--">getCurrentPath</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#isReaderRunning--">isReaderRunning</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 server/ReplicationSourceWALReader.html#run--">run</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#setReaderRunning-boolean-">setReaderRunning</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#switched-org.apache.hadoop.hbase.replication.regionserver.WALEntryStream-org.apache.hadoop.fs.Path-">switched</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#take--">take</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#addEntryToBatch-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-org.apache.hadoop.hbase.wal.WAL.Entry-">addEntryToBatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#createBatch-org.apache.hadoop.hbase.replication.regionserver.WALEntryStream-">createBatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#filterEntry-org.apache.hadoop.hbase.wal.WAL.Entry-">filterEntry</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#getCurrentPath--">getCurrentPath</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#getEntrySizeExcludeBulkLoad-org.apache.hadoop.hbase.wal.WAL.Entry-">getEntrySizeExcludeBulkLoad</a>, <a href=
 "../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#isReaderRunning--">isReaderRunning</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#run--">run</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#setReaderRunning-boolean-">setReaderRunning</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#switched-org.apache.hadoop.hbase.replication.regionserver.WALEntryStream-org.apache.hadoop.fs.Path-">switched</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#take--">take</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Thread">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/WALEntryBatch.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/WALEntryBatch.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/WALEntryBatch.html
index 94e0f5e..f58adf1 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/WALEntryBatch.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/WALEntryBatch.html
@@ -166,6 +166,12 @@
                <a href="../../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><span class="typeNameLabel">ReplicationSourceShipper.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#getBatchEntrySizeExcludeBulkLoad-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-">getBatchEntrySizeExcludeBulkLoad</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;entryBatch)</code>
+<div class="block">get batchEntry size excludes bulk load file sizes.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationSourceManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#logPositionAndCleanOldLogs-java.lang.String-boolean-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-">logPositionAndCleanOldLogs</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId,
                           boolean&nbsp;queueRecovered,
@@ -173,24 +179,24 @@
 <div class="block">This method will log the current position to storage.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">SerialReplicationSourceWALReader.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/SerialReplicationSourceWALReader.html#removeEntryFromStream-org.apache.hadoop.hbase.replication.regionserver.WALEntryStream-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-">removeEntryFromStream</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>&nbsp;entryStream,
                      <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationSourceShipper.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#shipEdits-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-">shipEdits</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;entryBatch)</code>
 <div class="block">Do the shipping logic</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationSourceWALReader.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#updateBatchStats-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-org.apache.hadoop.hbase.wal.WAL.Entry-long-">updateBatchStats</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch,
                 <a href="../../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry,
                 long&nbsp;entrySize)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationSourceShipper.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#updateLogPosition-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-">updateLogPosition</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch)</code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index f6d74ff..d9fa142 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -137,9 +137,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index 67b7e3a..29d7634 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -191,9 +191,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html b/devapidocs/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html
index 762f3a8..6910b75 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html
@@ -403,7 +403,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html#line.61">start</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html#line.62">start</a>()
            throws org.apache.zookeeper.KeeperException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -417,7 +417,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshVisibilityLabelsCache</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html#line.75">refreshVisibilityLabelsCache</a>(byte[]&nbsp;data)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html#line.76">refreshVisibilityLabelsCache</a>(byte[]&nbsp;data)</pre>
 </li>
 </ul>
 <a name="refreshUserAuthsCache-byte:A-">
@@ -426,7 +426,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshUserAuthsCache</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html#line.83">refreshUserAuthsCache</a>(byte[]&nbsp;data)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html#line.84">refreshUserAuthsCache</a>(byte[]&nbsp;data)</pre>
 </li>
 </ul>
 <a name="nodeCreated-java.lang.String-">
@@ -435,7 +435,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.
 <ul class="blockList">
 <li class="blockList">
 <h4>nodeCreated</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html#line.92">nodeCreated</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;path)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html#line.93">nodeCreated</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;path)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeCreated-java.lang.String-">ZKListener</a></code></span></div>
 <div class="block">Called when a new node has been created.</div>
 <dl>
@@ -452,7 +452,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.
 <ul class="blockList">
 <li class="blockList">
 <h4>nodeDeleted</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html#line.105">nodeDeleted</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;path)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html#line.106">nodeDeleted</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;path)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeDeleted-java.lang.String-">ZKListener</a></code></span></div>
 <div class="block">Called when a node has been deleted</div>
 <dl>
@@ -469,7 +469,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.
 <ul class="blockList">
 <li class="blockList">
 <h4>nodeDataChanged</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html#line.110">nodeDataChanged</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;path)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html#line.111">nodeDataChanged</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;path)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeDataChanged-java.lang.String-">ZKListener</a></code></span></div>
 <div class="block">Called when an existing node has changed data.</div>
 <dl>
@@ -486,7 +486,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.
 <ul class="blockList">
 <li class="blockList">
 <h4>nodeChildrenChanged</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html#line.129">nodeChildrenChanged</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;path)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html#line.130">nodeChildrenChanged</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;path)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeChildrenChanged-java.lang.String-">ZKListener</a></code></span></div>
 <div class="block">Called when an existing node has a child node added or removed.</div>
 <dl>
@@ -503,7 +503,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>writeToZookeeper</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html#line.139">writeToZookeeper</a>(byte[]&nbsp;data,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html#line.140">writeToZookeeper</a>(byte[]&nbsp;data,
                              boolean&nbsp;labelsOrUserAuths)</pre>
 <div class="block">Write a labels mirror or user auths mirror into zookeeper</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html b/devapidocs/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html
index 1f0eaae..e9070ee 100644
--- a/devapidocs/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html
+++ b/devapidocs/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html
@@ -1060,7 +1060,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>printUsage</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html#line.1108">printUsage</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html#line.1112">printUsage</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#printUsage--">printUsage</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html" title="class in org.apache.hadoop.hbase.util">AbstractHBaseTool</a></code></dd>
@@ -1073,7 +1073,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>addOptions</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html#line.1121">addOptions</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html#line.1125">addOptions</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addOptions--">AbstractHBaseTool</a></code></span></div>
 <div class="block">Override this to add command-line options using <a href="../../../../../org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addOptWithArg-java.lang.String-java.lang.String-"><code>AbstractHBaseTool.addOptWithArg(java.lang.String, java.lang.String)</code></a>
  and similar methods.</div>
@@ -1089,7 +1089,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html#line.1136">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.html#line.1140">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</pre>
 </li>
 </ul>
 </li>


[05/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.DummyServer.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.DummyServer.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.DummyServer.html
index 1126d0c..6c82f11 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.DummyServer.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.DummyServer.html
@@ -212,16 +212,16 @@
 <span class="sourceLineNo">204</span>    zkw = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.204"></a>
 <span class="sourceLineNo">205</span>        "split-log-worker-tests", null);<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    ds = new DummyServer(zkw, conf);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    ZKUtil.deleteChildrenRecursively(zkw, zkw.znodePaths.baseZNode);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    ZKUtil.createAndFailSilent(zkw, zkw.znodePaths.baseZNode);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    assertThat(ZKUtil.checkExists(zkw, zkw.znodePaths.baseZNode), not (is(-1)));<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    LOG.debug(zkw.znodePaths.baseZNode + " created");<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    ZKUtil.createAndFailSilent(zkw, zkw.znodePaths.splitLogZNode);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    assertThat(ZKUtil.checkExists(zkw, zkw.znodePaths.splitLogZNode), not (is(-1)));<a name="line.212"></a>
+<span class="sourceLineNo">207</span>    ZKUtil.deleteChildrenRecursively(zkw, zkw.getZNodePaths().baseZNode);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    ZKUtil.createAndFailSilent(zkw, zkw.getZNodePaths().baseZNode);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    assertThat(ZKUtil.checkExists(zkw, zkw.getZNodePaths().baseZNode), not(is(-1)));<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    LOG.debug(zkw.getZNodePaths().baseZNode + " created");<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    ZKUtil.createAndFailSilent(zkw, zkw.getZNodePaths().splitLogZNode);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    assertThat(ZKUtil.checkExists(zkw, zkw.getZNodePaths().splitLogZNode), not(is(-1)));<a name="line.212"></a>
 <span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    LOG.debug(zkw.znodePaths.splitLogZNode + " created");<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    ZKUtil.createAndFailSilent(zkw, zkw.znodePaths.rsZNode);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    assertThat(ZKUtil.checkExists(zkw, zkw.znodePaths.rsZNode), not (is(-1)));<a name="line.216"></a>
+<span class="sourceLineNo">214</span>    LOG.debug(zkw.getZNodePaths().splitLogZNode + " created");<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    ZKUtil.createAndFailSilent(zkw, zkw.getZNodePaths().rsZNode);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    assertThat(ZKUtil.checkExists(zkw, zkw.getZNodePaths().rsZNode), not(is(-1)));<a name="line.216"></a>
 <span class="sourceLineNo">217</span><a name="line.217"></a>
 <span class="sourceLineNo">218</span>    SplitLogCounters.resetCounters();<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    executorService = new ExecutorService("TestSplitLogWorker");<a name="line.219"></a>
@@ -438,7 +438,7 @@
 <span class="sourceLineNo">430</span>    waitForCounter(SplitLogCounters.tot_wkr_preempt_task, 1, 2, WAIT_TIME);<a name="line.430"></a>
 <span class="sourceLineNo">431</span>    waitForCounter(SplitLogCounters.tot_wkr_task_acquired_rescan, 0, 1, WAIT_TIME);<a name="line.431"></a>
 <span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>    List&lt;String&gt; nodes = ZKUtil.listChildrenNoWatch(zkw, zkw.znodePaths.splitLogZNode);<a name="line.433"></a>
+<span class="sourceLineNo">433</span>    List&lt;String&gt; nodes = ZKUtil.listChildrenNoWatch(zkw, zkw.getZNodePaths().splitLogZNode);<a name="line.433"></a>
 <span class="sourceLineNo">434</span>    LOG.debug(Objects.toString(nodes));<a name="line.434"></a>
 <span class="sourceLineNo">435</span>    int num = 0;<a name="line.435"></a>
 <span class="sourceLineNo">436</span>    for (String node : nodes) {<a name="line.436"></a>
@@ -446,107 +446,108 @@
 <span class="sourceLineNo">438</span>      if (node.startsWith("RESCAN")) {<a name="line.438"></a>
 <span class="sourceLineNo">439</span>        String name = ZKSplitLog.getEncodedNodeName(zkw, node);<a name="line.439"></a>
 <span class="sourceLineNo">440</span>        String fn = ZKSplitLog.getFileName(name);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        byte [] data = ZKUtil.getData(zkw, ZNodePaths.joinZNode(zkw.znodePaths.splitLogZNode, fn));<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        slt = SplitLogTask.parseFrom(data);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        assertTrue(slt.toString(), slt.isDone(SRV));<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    assertEquals(2, num);<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>  @Test<a name="line.449"></a>
-<span class="sourceLineNo">450</span>  public void testAcquireMultiTasks() throws Exception {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    LOG.info("testAcquireMultiTasks");<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    SplitLogCounters.resetCounters();<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    final String TATAS = "tatas";<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    final ServerName RS = ServerName.valueOf("rs,1,1");<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    final int maxTasks = 3;<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    Configuration testConf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    testConf.setInt("hbase.regionserver.wal.max.splitters", maxTasks);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    RegionServerServices mockedRS = getRegionServer(RS);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    for (int i = 0; i &lt; maxTasks; i++) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      zkw.getRecoverableZooKeeper().create(ZKSplitLog.getEncodedNodeName(zkw, TATAS + i),<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        new SplitLogTask.Unassigned(ServerName.valueOf("mgr,1,1")).toByteArray(),<a name="line.461"></a>
-<span class="sourceLineNo">462</span>          Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>    SplitLogWorker slw = new SplitLogWorker(ds, testConf, mockedRS, neverEndingTask);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    slw.start();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    try {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      waitForCounter(SplitLogCounters.tot_wkr_task_acquired, 0, maxTasks, WAIT_TIME);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      for (int i = 0; i &lt; maxTasks; i++) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>        byte[] bytes = ZKUtil.getData(zkw, ZKSplitLog.getEncodedNodeName(zkw, TATAS + i));<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        SplitLogTask slt = SplitLogTask.parseFrom(bytes);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        assertTrue(slt.isOwned(RS));<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    } finally {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      stopSplitLogWorker(slw);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
-<span class="sourceLineNo">479</span>  /**<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   * The test checks SplitLogWorker should not spawn more splitters than expected num of tasks per<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * RS<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @throws Exception<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   */<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  @Test<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  public void testAcquireMultiTasksByAvgTasksPerRS() throws Exception {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    LOG.info("testAcquireMultiTasks");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    SplitLogCounters.resetCounters();<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    final String TATAS = "tatas";<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    final ServerName RS = ServerName.valueOf("rs,1,1");<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    final ServerName RS2 = ServerName.valueOf("rs,1,2");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    final int maxTasks = 3;<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    Configuration testConf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    testConf.setInt("hbase.regionserver.wal.max.splitters", maxTasks);<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    RegionServerServices mockedRS = getRegionServer(RS);<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>    // create two RS nodes<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    String rsPath = ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, RS.getServerName());<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    zkw.getRecoverableZooKeeper().create(rsPath, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    rsPath = ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, RS2.getServerName());<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    zkw.getRecoverableZooKeeper().create(rsPath, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>    for (int i = 0; i &lt; maxTasks; i++) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      zkw.getRecoverableZooKeeper().create(ZKSplitLog.getEncodedNodeName(zkw, TATAS + i),<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        new SplitLogTask.Unassigned(ServerName.valueOf("mgr,1,1")).toByteArray(),<a name="line.504"></a>
-<span class="sourceLineNo">505</span>          Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>    SplitLogWorker slw = new SplitLogWorker(ds, testConf, mockedRS, neverEndingTask);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    slw.start();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    try {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      int acquiredTasks = 0;<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      waitForCounter(SplitLogCounters.tot_wkr_task_acquired, 0, 2, WAIT_TIME);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      for (int i = 0; i &lt; maxTasks; i++) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        byte[] bytes = ZKUtil.getData(zkw, ZKSplitLog.getEncodedNodeName(zkw, TATAS + i));<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        SplitLogTask slt = SplitLogTask.parseFrom(bytes);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        if (slt.isOwned(RS)) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>          acquiredTasks++;<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      assertEquals(2, acquiredTasks);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    } finally {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      stopSplitLogWorker(slw);<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  }<a name="line.524"></a>
-<span class="sourceLineNo">525</span><a name="line.525"></a>
-<span class="sourceLineNo">526</span>  /**<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   * Create a mocked region server service instance<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   */<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  private RegionServerServices getRegionServer(ServerName name) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>    RegionServerServices mockedServer = mock(RegionServerServices.class);<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    when(mockedServer.getConfiguration()).thenReturn(TEST_UTIL.getConfiguration());<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    when(mockedServer.getServerName()).thenReturn(name);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    when(mockedServer.getZooKeeper()).thenReturn(zkw);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    when(mockedServer.isStopped()).thenReturn(false);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    when(mockedServer.getExecutorService()).thenReturn(executorService);<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>    return mockedServer;<a name="line.538"></a>
-<span class="sourceLineNo">539</span>  }<a name="line.539"></a>
-<span class="sourceLineNo">540</span><a name="line.540"></a>
-<span class="sourceLineNo">541</span>}<a name="line.541"></a>
+<span class="sourceLineNo">441</span>        byte [] data = ZKUtil.getData(zkw,<a name="line.441"></a>
+<span class="sourceLineNo">442</span>                ZNodePaths.joinZNode(zkw.getZNodePaths().splitLogZNode, fn));<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        slt = SplitLogTask.parseFrom(data);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        assertTrue(slt.toString(), slt.isDone(SRV));<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      }<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    }<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    assertEquals(2, num);<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>  @Test<a name="line.450"></a>
+<span class="sourceLineNo">451</span>  public void testAcquireMultiTasks() throws Exception {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    LOG.info("testAcquireMultiTasks");<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    SplitLogCounters.resetCounters();<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    final String TATAS = "tatas";<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    final ServerName RS = ServerName.valueOf("rs,1,1");<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    final int maxTasks = 3;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    Configuration testConf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    testConf.setInt("hbase.regionserver.wal.max.splitters", maxTasks);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    RegionServerServices mockedRS = getRegionServer(RS);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    for (int i = 0; i &lt; maxTasks; i++) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      zkw.getRecoverableZooKeeper().create(ZKSplitLog.getEncodedNodeName(zkw, TATAS + i),<a name="line.461"></a>
+<span class="sourceLineNo">462</span>        new SplitLogTask.Unassigned(ServerName.valueOf("mgr,1,1")).toByteArray(),<a name="line.462"></a>
+<span class="sourceLineNo">463</span>          Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>    SplitLogWorker slw = new SplitLogWorker(ds, testConf, mockedRS, neverEndingTask);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>    slw.start();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    try {<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      waitForCounter(SplitLogCounters.tot_wkr_task_acquired, 0, maxTasks, WAIT_TIME);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      for (int i = 0; i &lt; maxTasks; i++) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>        byte[] bytes = ZKUtil.getData(zkw, ZKSplitLog.getEncodedNodeName(zkw, TATAS + i));<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        SplitLogTask slt = SplitLogTask.parseFrom(bytes);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>        assertTrue(slt.isOwned(RS));<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      }<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    } finally {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      stopSplitLogWorker(slw);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>  }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span>  /**<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * The test checks SplitLogWorker should not spawn more splitters than expected num of tasks per<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   * RS<a name="line.482"></a>
+<span class="sourceLineNo">483</span>   * @throws Exception<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  @Test<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  public void testAcquireMultiTasksByAvgTasksPerRS() throws Exception {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    LOG.info("testAcquireMultiTasks");<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    SplitLogCounters.resetCounters();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    final String TATAS = "tatas";<a name="line.489"></a>
+<span class="sourceLineNo">490</span>    final ServerName RS = ServerName.valueOf("rs,1,1");<a name="line.490"></a>
+<span class="sourceLineNo">491</span>    final ServerName RS2 = ServerName.valueOf("rs,1,2");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    final int maxTasks = 3;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    Configuration testConf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    testConf.setInt("hbase.regionserver.wal.max.splitters", maxTasks);<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    RegionServerServices mockedRS = getRegionServer(RS);<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>    // create two RS nodes<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    String rsPath = ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, RS.getServerName());<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    zkw.getRecoverableZooKeeper().create(rsPath, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>    rsPath = ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, RS2.getServerName());<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    zkw.getRecoverableZooKeeper().create(rsPath, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);<a name="line.501"></a>
+<span class="sourceLineNo">502</span><a name="line.502"></a>
+<span class="sourceLineNo">503</span>    for (int i = 0; i &lt; maxTasks; i++) {<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      zkw.getRecoverableZooKeeper().create(ZKSplitLog.getEncodedNodeName(zkw, TATAS + i),<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        new SplitLogTask.Unassigned(ServerName.valueOf("mgr,1,1")).toByteArray(),<a name="line.505"></a>
+<span class="sourceLineNo">506</span>          Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    }<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>    SplitLogWorker slw = new SplitLogWorker(ds, testConf, mockedRS, neverEndingTask);<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    slw.start();<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    try {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      int acquiredTasks = 0;<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      waitForCounter(SplitLogCounters.tot_wkr_task_acquired, 0, 2, WAIT_TIME);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      for (int i = 0; i &lt; maxTasks; i++) {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>        byte[] bytes = ZKUtil.getData(zkw, ZKSplitLog.getEncodedNodeName(zkw, TATAS + i));<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        SplitLogTask slt = SplitLogTask.parseFrom(bytes);<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        if (slt.isOwned(RS)) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>          acquiredTasks++;<a name="line.518"></a>
+<span class="sourceLineNo">519</span>        }<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      }<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      assertEquals(2, acquiredTasks);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    } finally {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      stopSplitLogWorker(slw);<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  }<a name="line.525"></a>
+<span class="sourceLineNo">526</span><a name="line.526"></a>
+<span class="sourceLineNo">527</span>  /**<a name="line.527"></a>
+<span class="sourceLineNo">528</span>   * Create a mocked region server service instance<a name="line.528"></a>
+<span class="sourceLineNo">529</span>   */<a name="line.529"></a>
+<span class="sourceLineNo">530</span>  private RegionServerServices getRegionServer(ServerName name) {<a name="line.530"></a>
+<span class="sourceLineNo">531</span><a name="line.531"></a>
+<span class="sourceLineNo">532</span>    RegionServerServices mockedServer = mock(RegionServerServices.class);<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    when(mockedServer.getConfiguration()).thenReturn(TEST_UTIL.getConfiguration());<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    when(mockedServer.getServerName()).thenReturn(name);<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    when(mockedServer.getZooKeeper()).thenReturn(zkw);<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    when(mockedServer.isStopped()).thenReturn(false);<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    when(mockedServer.getExecutorService()).thenReturn(executorService);<a name="line.537"></a>
+<span class="sourceLineNo">538</span><a name="line.538"></a>
+<span class="sourceLineNo">539</span>    return mockedServer;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>  }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>}<a name="line.542"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html
index 1126d0c..6c82f11 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html
@@ -212,16 +212,16 @@
 <span class="sourceLineNo">204</span>    zkw = new ZKWatcher(TEST_UTIL.getConfiguration(),<a name="line.204"></a>
 <span class="sourceLineNo">205</span>        "split-log-worker-tests", null);<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    ds = new DummyServer(zkw, conf);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    ZKUtil.deleteChildrenRecursively(zkw, zkw.znodePaths.baseZNode);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    ZKUtil.createAndFailSilent(zkw, zkw.znodePaths.baseZNode);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    assertThat(ZKUtil.checkExists(zkw, zkw.znodePaths.baseZNode), not (is(-1)));<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    LOG.debug(zkw.znodePaths.baseZNode + " created");<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    ZKUtil.createAndFailSilent(zkw, zkw.znodePaths.splitLogZNode);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    assertThat(ZKUtil.checkExists(zkw, zkw.znodePaths.splitLogZNode), not (is(-1)));<a name="line.212"></a>
+<span class="sourceLineNo">207</span>    ZKUtil.deleteChildrenRecursively(zkw, zkw.getZNodePaths().baseZNode);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    ZKUtil.createAndFailSilent(zkw, zkw.getZNodePaths().baseZNode);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    assertThat(ZKUtil.checkExists(zkw, zkw.getZNodePaths().baseZNode), not(is(-1)));<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    LOG.debug(zkw.getZNodePaths().baseZNode + " created");<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    ZKUtil.createAndFailSilent(zkw, zkw.getZNodePaths().splitLogZNode);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    assertThat(ZKUtil.checkExists(zkw, zkw.getZNodePaths().splitLogZNode), not(is(-1)));<a name="line.212"></a>
 <span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    LOG.debug(zkw.znodePaths.splitLogZNode + " created");<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    ZKUtil.createAndFailSilent(zkw, zkw.znodePaths.rsZNode);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    assertThat(ZKUtil.checkExists(zkw, zkw.znodePaths.rsZNode), not (is(-1)));<a name="line.216"></a>
+<span class="sourceLineNo">214</span>    LOG.debug(zkw.getZNodePaths().splitLogZNode + " created");<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    ZKUtil.createAndFailSilent(zkw, zkw.getZNodePaths().rsZNode);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    assertThat(ZKUtil.checkExists(zkw, zkw.getZNodePaths().rsZNode), not(is(-1)));<a name="line.216"></a>
 <span class="sourceLineNo">217</span><a name="line.217"></a>
 <span class="sourceLineNo">218</span>    SplitLogCounters.resetCounters();<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    executorService = new ExecutorService("TestSplitLogWorker");<a name="line.219"></a>
@@ -438,7 +438,7 @@
 <span class="sourceLineNo">430</span>    waitForCounter(SplitLogCounters.tot_wkr_preempt_task, 1, 2, WAIT_TIME);<a name="line.430"></a>
 <span class="sourceLineNo">431</span>    waitForCounter(SplitLogCounters.tot_wkr_task_acquired_rescan, 0, 1, WAIT_TIME);<a name="line.431"></a>
 <span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>    List&lt;String&gt; nodes = ZKUtil.listChildrenNoWatch(zkw, zkw.znodePaths.splitLogZNode);<a name="line.433"></a>
+<span class="sourceLineNo">433</span>    List&lt;String&gt; nodes = ZKUtil.listChildrenNoWatch(zkw, zkw.getZNodePaths().splitLogZNode);<a name="line.433"></a>
 <span class="sourceLineNo">434</span>    LOG.debug(Objects.toString(nodes));<a name="line.434"></a>
 <span class="sourceLineNo">435</span>    int num = 0;<a name="line.435"></a>
 <span class="sourceLineNo">436</span>    for (String node : nodes) {<a name="line.436"></a>
@@ -446,107 +446,108 @@
 <span class="sourceLineNo">438</span>      if (node.startsWith("RESCAN")) {<a name="line.438"></a>
 <span class="sourceLineNo">439</span>        String name = ZKSplitLog.getEncodedNodeName(zkw, node);<a name="line.439"></a>
 <span class="sourceLineNo">440</span>        String fn = ZKSplitLog.getFileName(name);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        byte [] data = ZKUtil.getData(zkw, ZNodePaths.joinZNode(zkw.znodePaths.splitLogZNode, fn));<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        slt = SplitLogTask.parseFrom(data);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        assertTrue(slt.toString(), slt.isDone(SRV));<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    assertEquals(2, num);<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>  @Test<a name="line.449"></a>
-<span class="sourceLineNo">450</span>  public void testAcquireMultiTasks() throws Exception {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    LOG.info("testAcquireMultiTasks");<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    SplitLogCounters.resetCounters();<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    final String TATAS = "tatas";<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    final ServerName RS = ServerName.valueOf("rs,1,1");<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    final int maxTasks = 3;<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    Configuration testConf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    testConf.setInt("hbase.regionserver.wal.max.splitters", maxTasks);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    RegionServerServices mockedRS = getRegionServer(RS);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    for (int i = 0; i &lt; maxTasks; i++) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      zkw.getRecoverableZooKeeper().create(ZKSplitLog.getEncodedNodeName(zkw, TATAS + i),<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        new SplitLogTask.Unassigned(ServerName.valueOf("mgr,1,1")).toByteArray(),<a name="line.461"></a>
-<span class="sourceLineNo">462</span>          Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>    SplitLogWorker slw = new SplitLogWorker(ds, testConf, mockedRS, neverEndingTask);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    slw.start();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    try {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      waitForCounter(SplitLogCounters.tot_wkr_task_acquired, 0, maxTasks, WAIT_TIME);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      for (int i = 0; i &lt; maxTasks; i++) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>        byte[] bytes = ZKUtil.getData(zkw, ZKSplitLog.getEncodedNodeName(zkw, TATAS + i));<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        SplitLogTask slt = SplitLogTask.parseFrom(bytes);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        assertTrue(slt.isOwned(RS));<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    } finally {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      stopSplitLogWorker(slw);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
-<span class="sourceLineNo">479</span>  /**<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   * The test checks SplitLogWorker should not spawn more splitters than expected num of tasks per<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * RS<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @throws Exception<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   */<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  @Test<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  public void testAcquireMultiTasksByAvgTasksPerRS() throws Exception {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    LOG.info("testAcquireMultiTasks");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    SplitLogCounters.resetCounters();<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    final String TATAS = "tatas";<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    final ServerName RS = ServerName.valueOf("rs,1,1");<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    final ServerName RS2 = ServerName.valueOf("rs,1,2");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    final int maxTasks = 3;<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    Configuration testConf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    testConf.setInt("hbase.regionserver.wal.max.splitters", maxTasks);<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    RegionServerServices mockedRS = getRegionServer(RS);<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>    // create two RS nodes<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    String rsPath = ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, RS.getServerName());<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    zkw.getRecoverableZooKeeper().create(rsPath, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    rsPath = ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, RS2.getServerName());<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    zkw.getRecoverableZooKeeper().create(rsPath, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>    for (int i = 0; i &lt; maxTasks; i++) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      zkw.getRecoverableZooKeeper().create(ZKSplitLog.getEncodedNodeName(zkw, TATAS + i),<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        new SplitLogTask.Unassigned(ServerName.valueOf("mgr,1,1")).toByteArray(),<a name="line.504"></a>
-<span class="sourceLineNo">505</span>          Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>    SplitLogWorker slw = new SplitLogWorker(ds, testConf, mockedRS, neverEndingTask);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    slw.start();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    try {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      int acquiredTasks = 0;<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      waitForCounter(SplitLogCounters.tot_wkr_task_acquired, 0, 2, WAIT_TIME);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      for (int i = 0; i &lt; maxTasks; i++) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        byte[] bytes = ZKUtil.getData(zkw, ZKSplitLog.getEncodedNodeName(zkw, TATAS + i));<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        SplitLogTask slt = SplitLogTask.parseFrom(bytes);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        if (slt.isOwned(RS)) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>          acquiredTasks++;<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      assertEquals(2, acquiredTasks);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    } finally {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      stopSplitLogWorker(slw);<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  }<a name="line.524"></a>
-<span class="sourceLineNo">525</span><a name="line.525"></a>
-<span class="sourceLineNo">526</span>  /**<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   * Create a mocked region server service instance<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   */<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  private RegionServerServices getRegionServer(ServerName name) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>    RegionServerServices mockedServer = mock(RegionServerServices.class);<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    when(mockedServer.getConfiguration()).thenReturn(TEST_UTIL.getConfiguration());<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    when(mockedServer.getServerName()).thenReturn(name);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    when(mockedServer.getZooKeeper()).thenReturn(zkw);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    when(mockedServer.isStopped()).thenReturn(false);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    when(mockedServer.getExecutorService()).thenReturn(executorService);<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>    return mockedServer;<a name="line.538"></a>
-<span class="sourceLineNo">539</span>  }<a name="line.539"></a>
-<span class="sourceLineNo">540</span><a name="line.540"></a>
-<span class="sourceLineNo">541</span>}<a name="line.541"></a>
+<span class="sourceLineNo">441</span>        byte [] data = ZKUtil.getData(zkw,<a name="line.441"></a>
+<span class="sourceLineNo">442</span>                ZNodePaths.joinZNode(zkw.getZNodePaths().splitLogZNode, fn));<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        slt = SplitLogTask.parseFrom(data);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        assertTrue(slt.toString(), slt.isDone(SRV));<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      }<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    }<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    assertEquals(2, num);<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>  @Test<a name="line.450"></a>
+<span class="sourceLineNo">451</span>  public void testAcquireMultiTasks() throws Exception {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    LOG.info("testAcquireMultiTasks");<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    SplitLogCounters.resetCounters();<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    final String TATAS = "tatas";<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    final ServerName RS = ServerName.valueOf("rs,1,1");<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    final int maxTasks = 3;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    Configuration testConf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    testConf.setInt("hbase.regionserver.wal.max.splitters", maxTasks);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    RegionServerServices mockedRS = getRegionServer(RS);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    for (int i = 0; i &lt; maxTasks; i++) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      zkw.getRecoverableZooKeeper().create(ZKSplitLog.getEncodedNodeName(zkw, TATAS + i),<a name="line.461"></a>
+<span class="sourceLineNo">462</span>        new SplitLogTask.Unassigned(ServerName.valueOf("mgr,1,1")).toByteArray(),<a name="line.462"></a>
+<span class="sourceLineNo">463</span>          Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>    SplitLogWorker slw = new SplitLogWorker(ds, testConf, mockedRS, neverEndingTask);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>    slw.start();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    try {<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      waitForCounter(SplitLogCounters.tot_wkr_task_acquired, 0, maxTasks, WAIT_TIME);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      for (int i = 0; i &lt; maxTasks; i++) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>        byte[] bytes = ZKUtil.getData(zkw, ZKSplitLog.getEncodedNodeName(zkw, TATAS + i));<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        SplitLogTask slt = SplitLogTask.parseFrom(bytes);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>        assertTrue(slt.isOwned(RS));<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      }<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    } finally {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      stopSplitLogWorker(slw);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>  }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span>  /**<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * The test checks SplitLogWorker should not spawn more splitters than expected num of tasks per<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   * RS<a name="line.482"></a>
+<span class="sourceLineNo">483</span>   * @throws Exception<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  @Test<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  public void testAcquireMultiTasksByAvgTasksPerRS() throws Exception {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    LOG.info("testAcquireMultiTasks");<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    SplitLogCounters.resetCounters();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    final String TATAS = "tatas";<a name="line.489"></a>
+<span class="sourceLineNo">490</span>    final ServerName RS = ServerName.valueOf("rs,1,1");<a name="line.490"></a>
+<span class="sourceLineNo">491</span>    final ServerName RS2 = ServerName.valueOf("rs,1,2");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    final int maxTasks = 3;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    Configuration testConf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    testConf.setInt("hbase.regionserver.wal.max.splitters", maxTasks);<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    RegionServerServices mockedRS = getRegionServer(RS);<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>    // create two RS nodes<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    String rsPath = ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, RS.getServerName());<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    zkw.getRecoverableZooKeeper().create(rsPath, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>    rsPath = ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, RS2.getServerName());<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    zkw.getRecoverableZooKeeper().create(rsPath, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);<a name="line.501"></a>
+<span class="sourceLineNo">502</span><a name="line.502"></a>
+<span class="sourceLineNo">503</span>    for (int i = 0; i &lt; maxTasks; i++) {<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      zkw.getRecoverableZooKeeper().create(ZKSplitLog.getEncodedNodeName(zkw, TATAS + i),<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        new SplitLogTask.Unassigned(ServerName.valueOf("mgr,1,1")).toByteArray(),<a name="line.505"></a>
+<span class="sourceLineNo">506</span>          Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    }<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>    SplitLogWorker slw = new SplitLogWorker(ds, testConf, mockedRS, neverEndingTask);<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    slw.start();<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    try {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      int acquiredTasks = 0;<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      waitForCounter(SplitLogCounters.tot_wkr_task_acquired, 0, 2, WAIT_TIME);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      for (int i = 0; i &lt; maxTasks; i++) {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>        byte[] bytes = ZKUtil.getData(zkw, ZKSplitLog.getEncodedNodeName(zkw, TATAS + i));<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        SplitLogTask slt = SplitLogTask.parseFrom(bytes);<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        if (slt.isOwned(RS)) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>          acquiredTasks++;<a name="line.518"></a>
+<span class="sourceLineNo">519</span>        }<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      }<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      assertEquals(2, acquiredTasks);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    } finally {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      stopSplitLogWorker(slw);<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  }<a name="line.525"></a>
+<span class="sourceLineNo">526</span><a name="line.526"></a>
+<span class="sourceLineNo">527</span>  /**<a name="line.527"></a>
+<span class="sourceLineNo">528</span>   * Create a mocked region server service instance<a name="line.528"></a>
+<span class="sourceLineNo">529</span>   */<a name="line.529"></a>
+<span class="sourceLineNo">530</span>  private RegionServerServices getRegionServer(ServerName name) {<a name="line.530"></a>
+<span class="sourceLineNo">531</span><a name="line.531"></a>
+<span class="sourceLineNo">532</span>    RegionServerServices mockedServer = mock(RegionServerServices.class);<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    when(mockedServer.getConfiguration()).thenReturn(TEST_UTIL.getConfiguration());<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    when(mockedServer.getServerName()).thenReturn(name);<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    when(mockedServer.getZooKeeper()).thenReturn(zkw);<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    when(mockedServer.isStopped()).thenReturn(false);<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    when(mockedServer.getExecutorService()).thenReturn(executorService);<a name="line.537"></a>
+<span class="sourceLineNo">538</span><a name="line.538"></a>
+<span class="sourceLineNo">539</span>    return mockedServer;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>  }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>}<a name="line.542"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html
index 25d70af..b9f380f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html
@@ -66,7 +66,7 @@
 <span class="sourceLineNo">058</span>    conf.setBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY, true);<a name="line.58"></a>
 <span class="sourceLineNo">059</span>    zkw = utility.getZooKeeperWatcher();<a name="line.59"></a>
 <span class="sourceLineNo">060</span>    String replicationZNodeName = conf.get("zookeeper.znode.replication", "replication");<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    replicationZNode = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, replicationZNodeName);<a name="line.61"></a>
+<span class="sourceLineNo">061</span>    replicationZNode = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, replicationZNodeName);<a name="line.61"></a>
 <span class="sourceLineNo">062</span>    KEY_ONE = initPeerClusterState("/hbase1");<a name="line.62"></a>
 <span class="sourceLineNo">063</span>    KEY_TWO = initPeerClusterState("/hbase2");<a name="line.63"></a>
 <span class="sourceLineNo">064</span>  }<a name="line.64"></a>
@@ -77,30 +77,31 @@
 <span class="sourceLineNo">069</span>    Configuration testConf = new Configuration(conf);<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    testConf.set(HConstants.ZOOKEEPER_ZNODE_PARENT, baseZKNode);<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    ZKWatcher zkw1 = new ZKWatcher(testConf, "test1", null);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    String fakeRs = ZNodePaths.joinZNode(zkw1.znodePaths.rsZNode, "hostname1.example.org:1234");<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    ZKUtil.createWithParents(zkw1, fakeRs);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    ZKClusterId.setClusterId(zkw1, new ClusterId());<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    return ZKConfig.getZooKeeperClusterKey(testConf);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  }<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span>  @Before<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public void setUp() {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    zkTimeoutCount = 0;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    rqs = ReplicationStorageFactory.getReplicationQueueStorage(zkw, conf);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    rp = ReplicationFactory.getReplicationPeers(zkw, conf);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    OUR_KEY = ZKConfig.getZooKeeperClusterKey(conf);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  @After<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  public void tearDown() throws KeeperException, IOException {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    ZKUtil.deleteNodeRecursively(zkw, replicationZNode);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  @AfterClass<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  public static void tearDownAfterClass() throws Exception {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    utility.shutdownMiniZKCluster();<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
-<span class="sourceLineNo">095</span>}<a name="line.95"></a>
+<span class="sourceLineNo">072</span>    String fakeRs = ZNodePaths.joinZNode(zkw1.getZNodePaths().rsZNode,<a name="line.72"></a>
+<span class="sourceLineNo">073</span>            "hostname1.example.org:1234");<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    ZKUtil.createWithParents(zkw1, fakeRs);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    ZKClusterId.setClusterId(zkw1, new ClusterId());<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    return ZKConfig.getZooKeeperClusterKey(testConf);<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>  @Before<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public void setUp() {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    zkTimeoutCount = 0;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    rqs = ReplicationStorageFactory.getReplicationQueueStorage(zkw, conf);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    rp = ReplicationFactory.getReplicationPeers(zkw, conf);<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    OUR_KEY = ZKConfig.getZooKeeperClusterKey(conf);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>  @After<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  public void tearDown() throws KeeperException, IOException {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    ZKUtil.deleteNodeRecursively(zkw, replicationZNode);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @AfterClass<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public static void tearDownAfterClass() throws Exception {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    utility.shutdownMiniZKCluster();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span>}<a name="line.96"></a>
 
 
 


[02/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html
index 278a845..946d651 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockAbortable.html
@@ -26,233 +26,232 @@
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.zookeeper;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.junit.Assert.assertFalse;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.junit.Assert.assertNotNull;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.junit.Assert.assertTrue;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.junit.Assert.fail;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.conf.Configuration;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.Abortable;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HBaseZKTestingUtility;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.ZKTests;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.junit.AfterClass;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.junit.BeforeClass;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.junit.ClassRule;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.junit.Test;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.junit.experimental.categories.Category;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.slf4j.Logger;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.slf4j.LoggerFactory;<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>@Category({ ZKTests.class, MediumTests.class })<a name="line.46"></a>
-<span class="sourceLineNo">047</span>public class TestZKLeaderManager {<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  @ClassRule<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.50"></a>
-<span class="sourceLineNo">051</span>      HBaseClassTestRule.forClass(TestZKLeaderManager.class);<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private static final Logger LOG = LoggerFactory.getLogger(TestZKLeaderManager.class);<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private static final String LEADER_ZNODE =<a name="line.55"></a>
-<span class="sourceLineNo">056</span>      "/test/" + TestZKLeaderManager.class.getSimpleName();<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private static class MockAbortable implements Abortable {<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    private boolean aborted;<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>    @Override<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    public void abort(String why, Throwable e) {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>      aborted = true;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      LOG.error(HBaseMarkers.FATAL, "Aborting during test: "+why, e);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      fail("Aborted during test: " + why);<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    }<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @Override<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    public boolean isAborted() {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      return aborted;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    }<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static class MockLeader extends Thread implements Stoppable {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    private volatile boolean stopped;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    private ZKWatcher watcher;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    private ZKLeaderManager zkLeader;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    private AtomicBoolean master = new AtomicBoolean(false);<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    private int index;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>    public MockLeader(ZKWatcher watcher, int index) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      setDaemon(true);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      setName("TestZKLeaderManager-leader-" + index);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      this.index = index;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      this.watcher = watcher;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      this.zkLeader = new ZKLeaderManager(watcher, LEADER_ZNODE,<a name="line.86"></a>
-<span class="sourceLineNo">087</span>          Bytes.toBytes(index), this);<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>    public boolean isMaster() {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      return master.get();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>    public int getIndex() {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      return index;<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>    public ZKWatcher getWatcher() {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      return watcher;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>    @Override<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    public void run() {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      while (!stopped) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        zkLeader.start();<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        zkLeader.waitToBecomeLeader();<a name="line.106"></a>
-<span class="sourceLineNo">107</span>        master.set(true);<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>        while (master.get() &amp;&amp; !stopped) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>          try {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>            Thread.sleep(10);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>          } catch (InterruptedException ignored) {}<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>    }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>    public void abdicate() {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      zkLeader.stepDownAsLeader();<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      master.set(false);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>    @Override<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public void stop(String why) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      stopped = true;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      abdicate();<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      Threads.sleep(100);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      watcher.close();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>    @Override<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    public boolean isStopped() {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return stopped;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  private static HBaseZKTestingUtility TEST_UTIL;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  private static MockLeader[] CANDIDATES;<a name="line.137"></a>
-<span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>  @BeforeClass<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  public static void setupBeforeClass() throws Exception {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    TEST_UTIL = new HBaseZKTestingUtility();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    TEST_UTIL.startMiniZKCluster();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // use an abortable to fail the test in the case of any KeeperExceptions<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    MockAbortable abortable = new MockAbortable();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    int count = 5;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    CANDIDATES = new MockLeader[count];<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    for (int i = 0; i &lt; count; i++) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      ZKWatcher watcher = newZK(conf, "server"+i, abortable);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      CANDIDATES[i] = new MockLeader(watcher, i);<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      CANDIDATES[i].start();<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>  @AfterClass<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  public static void tearDownAfterClass() throws Exception {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    TEST_UTIL.shutdownMiniZKCluster();<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>  @Test<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void testLeaderSelection() throws Exception {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    MockLeader currentLeader = getCurrentLeader();<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    // one leader should have been found<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    assertNotNull("Leader should exist", currentLeader);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    LOG.debug("Current leader index is "+currentLeader.getIndex());<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    byte[] znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    int storedIndex = Bytes.toInt(znodeData);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    assertEquals("Leader znode should match leader index",<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        currentLeader.getIndex(), storedIndex);<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    // force a leader transition<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    currentLeader.abdicate();<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // check for new leader<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    currentLeader = getCurrentLeader();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // one leader should have been found<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    assertNotNull("New leader should exist after abdication", currentLeader);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    LOG.debug("New leader index is "+currentLeader.getIndex());<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>    znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    storedIndex = Bytes.toInt(znodeData);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    assertEquals("Leader znode should match leader index",<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        currentLeader.getIndex(), storedIndex);<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    // force another transition by stopping the current<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    currentLeader.stop("Stopping for test");<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // check for new leader<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    currentLeader = getCurrentLeader();<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // one leader should have been found<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    assertNotNull("New leader should exist after stop", currentLeader);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    LOG.debug("New leader index is "+currentLeader.getIndex());<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    storedIndex = Bytes.toInt(znodeData);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    assertEquals("Leader znode should match leader index",<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        currentLeader.getIndex(), storedIndex);<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    // with a second stop we can guarantee that a previous leader has resumed leading<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    currentLeader.stop("Stopping for test");<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // check for new<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    currentLeader = getCurrentLeader();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    assertNotNull("New leader should exist", currentLeader);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  private MockLeader getCurrentLeader() throws Exception {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    MockLeader currentLeader = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    outer:<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // Wait up to 10 secs for initial leader<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    for (int i = 0; i &lt; 1000; i++) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      for (int j = 0; j &lt; CANDIDATES.length; j++) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        if (CANDIDATES[j].isMaster()) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>          // should only be one leader<a name="line.225"></a>
-<span class="sourceLineNo">226</span>          if (currentLeader != null) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            fail("Both candidate "+currentLeader.getIndex()+" and "+j+" claim to be leader!");<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          currentLeader = CANDIDATES[j];<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>      if (currentLeader != null) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        break outer;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      }<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      Threads.sleep(100);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    return currentLeader;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  private static ZKWatcher newZK(Configuration conf, String name,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>                                 Abortable abort) throws Exception {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    Configuration copy = HBaseConfiguration.create(conf);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    ZKWatcher zk = new ZKWatcher(copy, name, abort);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return zk;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>}<a name="line.247"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertNotNull;<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>import static org.junit.Assert.fail;<a name="line.23"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.Abortable;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HBaseZKTestingUtility;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.ZKTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.AfterClass;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.BeforeClass;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.ClassRule;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.Test;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.junit.experimental.categories.Category;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.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>@Category({ ZKTests.class, MediumTests.class })<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class TestZKLeaderManager {<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>  @ClassRule<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.49"></a>
+<span class="sourceLineNo">050</span>      HBaseClassTestRule.forClass(TestZKLeaderManager.class);<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private static final Logger LOG = LoggerFactory.getLogger(TestZKLeaderManager.class);<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private static final String LEADER_ZNODE =<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      "/test/" + TestZKLeaderManager.class.getSimpleName();<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private static class MockAbortable implements Abortable {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    private boolean aborted;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>    @Override<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    public void abort(String why, Throwable e) {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      aborted = true;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      LOG.error(HBaseMarkers.FATAL, "Aborting during test: "+why, e);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      fail("Aborted during test: " + why);<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>    @Override<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    public boolean isAborted() {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      return aborted;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    }<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  }<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private static class MockLeader extends Thread implements Stoppable {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    private volatile boolean stopped;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    private ZKWatcher watcher;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    private ZKLeaderManager zkLeader;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    private AtomicBoolean master = new AtomicBoolean(false);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    private int index;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>    public MockLeader(ZKWatcher watcher, int index) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      setDaemon(true);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      setName("TestZKLeaderManager-leader-" + index);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      this.index = index;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      this.watcher = watcher;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      this.zkLeader = new ZKLeaderManager(watcher, LEADER_ZNODE,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>          Bytes.toBytes(index), this);<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>    public boolean isMaster() {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      return master.get();<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    }<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>    public int getIndex() {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      return index;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>    public ZKWatcher getWatcher() {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      return watcher;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>    @Override<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public void run() {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      while (!stopped) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        zkLeader.start();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        zkLeader.waitToBecomeLeader();<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        master.set(true);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>        while (master.get() &amp;&amp; !stopped) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>          try {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>            Thread.sleep(10);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>          } catch (InterruptedException ignored) {}<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>    }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>    public void abdicate() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      zkLeader.stepDownAsLeader();<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      master.set(false);<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 void stop(String why) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      stopped = true;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      abdicate();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      Threads.sleep(100);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      watcher.close();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>    @Override<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    public boolean isStopped() {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      return stopped;<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><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private static HBaseZKTestingUtility TEST_UTIL;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  private static MockLeader[] CANDIDATES;<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  @BeforeClass<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public static void setupBeforeClass() throws Exception {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    TEST_UTIL = new HBaseZKTestingUtility();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    TEST_UTIL.startMiniZKCluster();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>    // use an abortable to fail the test in the case of any KeeperExceptions<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    MockAbortable abortable = new MockAbortable();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    int count = 5;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    CANDIDATES = new MockLeader[count];<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    for (int i = 0; i &lt; count; i++) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      ZKWatcher watcher = newZK(conf, "server"+i, abortable);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      CANDIDATES[i] = new MockLeader(watcher, i);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      CANDIDATES[i].start();<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  @AfterClass<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  public static void tearDownAfterClass() throws Exception {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    TEST_UTIL.shutdownMiniZKCluster();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  @Test<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  public void testLeaderSelection() throws Exception {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    MockLeader currentLeader = getCurrentLeader();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    // one leader should have been found<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    assertNotNull("Leader should exist", currentLeader);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    LOG.debug("Current leader index is "+currentLeader.getIndex());<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>    byte[] znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    int storedIndex = Bytes.toInt(znodeData);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    assertEquals("Leader znode should match leader index",<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        currentLeader.getIndex(), storedIndex);<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    // force a leader transition<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    currentLeader.abdicate();<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    // check for new leader<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    currentLeader = getCurrentLeader();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    // one leader should have been found<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    assertNotNull("New leader should exist after abdication", currentLeader);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    LOG.debug("New leader index is "+currentLeader.getIndex());<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>    znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    storedIndex = Bytes.toInt(znodeData);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    assertEquals("Leader znode should match leader index",<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        currentLeader.getIndex(), storedIndex);<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span>    // force another transition by stopping the current<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    currentLeader.stop("Stopping for test");<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>    // check for new leader<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    currentLeader = getCurrentLeader();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    // one leader should have been found<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    assertNotNull("New leader should exist after stop", currentLeader);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    LOG.debug("New leader index is "+currentLeader.getIndex());<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    storedIndex = Bytes.toInt(znodeData);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    assertEquals("Leader znode should match leader index",<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        currentLeader.getIndex(), storedIndex);<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>    // with a second stop we can guarantee that a previous leader has resumed leading<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    currentLeader.stop("Stopping for test");<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>    // check for new<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    currentLeader = getCurrentLeader();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    assertNotNull("New leader should exist", currentLeader);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>  private MockLeader getCurrentLeader() throws Exception {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    MockLeader currentLeader = null;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    outer:<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    // Wait up to 10 secs for initial leader<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    for (int i = 0; i &lt; 1000; i++) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      for (int j = 0; j &lt; CANDIDATES.length; j++) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>        if (CANDIDATES[j].isMaster()) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          // should only be one leader<a name="line.224"></a>
+<span class="sourceLineNo">225</span>          if (currentLeader != null) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>            fail("Both candidate "+currentLeader.getIndex()+" and "+j+" claim to be leader!");<a name="line.226"></a>
+<span class="sourceLineNo">227</span>          }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          currentLeader = CANDIDATES[j];<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>      if (currentLeader != null) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        break outer;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      Threads.sleep(100);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return currentLeader;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  private static ZKWatcher newZK(Configuration conf, String name,<a name="line.239"></a>
+<span class="sourceLineNo">240</span>                                 Abortable abort) throws Exception {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    Configuration copy = HBaseConfiguration.create(conf);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    ZKWatcher zk = new ZKWatcher(copy, name, abort);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    return zk;<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>}<a name="line.246"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html
index 278a845..946d651 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.MockLeader.html
@@ -26,233 +26,232 @@
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.zookeeper;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.junit.Assert.assertFalse;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.junit.Assert.assertNotNull;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.junit.Assert.assertTrue;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.junit.Assert.fail;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.conf.Configuration;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.Abortable;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HBaseZKTestingUtility;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.ZKTests;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.junit.AfterClass;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.junit.BeforeClass;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.junit.ClassRule;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.junit.Test;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.junit.experimental.categories.Category;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.slf4j.Logger;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.slf4j.LoggerFactory;<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>@Category({ ZKTests.class, MediumTests.class })<a name="line.46"></a>
-<span class="sourceLineNo">047</span>public class TestZKLeaderManager {<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  @ClassRule<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.50"></a>
-<span class="sourceLineNo">051</span>      HBaseClassTestRule.forClass(TestZKLeaderManager.class);<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private static final Logger LOG = LoggerFactory.getLogger(TestZKLeaderManager.class);<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private static final String LEADER_ZNODE =<a name="line.55"></a>
-<span class="sourceLineNo">056</span>      "/test/" + TestZKLeaderManager.class.getSimpleName();<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private static class MockAbortable implements Abortable {<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    private boolean aborted;<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>    @Override<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    public void abort(String why, Throwable e) {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>      aborted = true;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      LOG.error(HBaseMarkers.FATAL, "Aborting during test: "+why, e);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      fail("Aborted during test: " + why);<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    }<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @Override<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    public boolean isAborted() {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      return aborted;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    }<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static class MockLeader extends Thread implements Stoppable {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    private volatile boolean stopped;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    private ZKWatcher watcher;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    private ZKLeaderManager zkLeader;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    private AtomicBoolean master = new AtomicBoolean(false);<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    private int index;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>    public MockLeader(ZKWatcher watcher, int index) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      setDaemon(true);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      setName("TestZKLeaderManager-leader-" + index);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      this.index = index;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      this.watcher = watcher;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      this.zkLeader = new ZKLeaderManager(watcher, LEADER_ZNODE,<a name="line.86"></a>
-<span class="sourceLineNo">087</span>          Bytes.toBytes(index), this);<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>    public boolean isMaster() {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      return master.get();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>    public int getIndex() {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      return index;<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>    public ZKWatcher getWatcher() {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      return watcher;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>    @Override<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    public void run() {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      while (!stopped) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        zkLeader.start();<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        zkLeader.waitToBecomeLeader();<a name="line.106"></a>
-<span class="sourceLineNo">107</span>        master.set(true);<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>        while (master.get() &amp;&amp; !stopped) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>          try {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>            Thread.sleep(10);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>          } catch (InterruptedException ignored) {}<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>    }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>    public void abdicate() {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      zkLeader.stepDownAsLeader();<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      master.set(false);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>    @Override<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public void stop(String why) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      stopped = true;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      abdicate();<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      Threads.sleep(100);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      watcher.close();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>    @Override<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    public boolean isStopped() {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return stopped;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  private static HBaseZKTestingUtility TEST_UTIL;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  private static MockLeader[] CANDIDATES;<a name="line.137"></a>
-<span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>  @BeforeClass<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  public static void setupBeforeClass() throws Exception {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    TEST_UTIL = new HBaseZKTestingUtility();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    TEST_UTIL.startMiniZKCluster();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // use an abortable to fail the test in the case of any KeeperExceptions<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    MockAbortable abortable = new MockAbortable();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    int count = 5;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    CANDIDATES = new MockLeader[count];<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    for (int i = 0; i &lt; count; i++) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      ZKWatcher watcher = newZK(conf, "server"+i, abortable);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      CANDIDATES[i] = new MockLeader(watcher, i);<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      CANDIDATES[i].start();<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>  @AfterClass<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  public static void tearDownAfterClass() throws Exception {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    TEST_UTIL.shutdownMiniZKCluster();<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>  @Test<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void testLeaderSelection() throws Exception {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    MockLeader currentLeader = getCurrentLeader();<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    // one leader should have been found<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    assertNotNull("Leader should exist", currentLeader);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    LOG.debug("Current leader index is "+currentLeader.getIndex());<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    byte[] znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    int storedIndex = Bytes.toInt(znodeData);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    assertEquals("Leader znode should match leader index",<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        currentLeader.getIndex(), storedIndex);<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    // force a leader transition<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    currentLeader.abdicate();<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // check for new leader<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    currentLeader = getCurrentLeader();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // one leader should have been found<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    assertNotNull("New leader should exist after abdication", currentLeader);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    LOG.debug("New leader index is "+currentLeader.getIndex());<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>    znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    storedIndex = Bytes.toInt(znodeData);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    assertEquals("Leader znode should match leader index",<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        currentLeader.getIndex(), storedIndex);<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    // force another transition by stopping the current<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    currentLeader.stop("Stopping for test");<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // check for new leader<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    currentLeader = getCurrentLeader();<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // one leader should have been found<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    assertNotNull("New leader should exist after stop", currentLeader);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    LOG.debug("New leader index is "+currentLeader.getIndex());<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    storedIndex = Bytes.toInt(znodeData);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    assertEquals("Leader znode should match leader index",<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        currentLeader.getIndex(), storedIndex);<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    // with a second stop we can guarantee that a previous leader has resumed leading<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    currentLeader.stop("Stopping for test");<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // check for new<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    currentLeader = getCurrentLeader();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    assertNotNull("New leader should exist", currentLeader);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  private MockLeader getCurrentLeader() throws Exception {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    MockLeader currentLeader = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    outer:<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // Wait up to 10 secs for initial leader<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    for (int i = 0; i &lt; 1000; i++) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      for (int j = 0; j &lt; CANDIDATES.length; j++) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        if (CANDIDATES[j].isMaster()) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>          // should only be one leader<a name="line.225"></a>
-<span class="sourceLineNo">226</span>          if (currentLeader != null) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            fail("Both candidate "+currentLeader.getIndex()+" and "+j+" claim to be leader!");<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          currentLeader = CANDIDATES[j];<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>      if (currentLeader != null) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        break outer;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      }<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      Threads.sleep(100);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    return currentLeader;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  private static ZKWatcher newZK(Configuration conf, String name,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>                                 Abortable abort) throws Exception {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    Configuration copy = HBaseConfiguration.create(conf);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    ZKWatcher zk = new ZKWatcher(copy, name, abort);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return zk;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>}<a name="line.247"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertNotNull;<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>import static org.junit.Assert.fail;<a name="line.23"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.Abortable;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HBaseZKTestingUtility;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.ZKTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.AfterClass;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.BeforeClass;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.ClassRule;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.Test;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.junit.experimental.categories.Category;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.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>@Category({ ZKTests.class, MediumTests.class })<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class TestZKLeaderManager {<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>  @ClassRule<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.49"></a>
+<span class="sourceLineNo">050</span>      HBaseClassTestRule.forClass(TestZKLeaderManager.class);<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private static final Logger LOG = LoggerFactory.getLogger(TestZKLeaderManager.class);<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private static final String LEADER_ZNODE =<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      "/test/" + TestZKLeaderManager.class.getSimpleName();<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private static class MockAbortable implements Abortable {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    private boolean aborted;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>    @Override<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    public void abort(String why, Throwable e) {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      aborted = true;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      LOG.error(HBaseMarkers.FATAL, "Aborting during test: "+why, e);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      fail("Aborted during test: " + why);<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>    @Override<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    public boolean isAborted() {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      return aborted;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    }<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  }<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private static class MockLeader extends Thread implements Stoppable {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    private volatile boolean stopped;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    private ZKWatcher watcher;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    private ZKLeaderManager zkLeader;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    private AtomicBoolean master = new AtomicBoolean(false);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    private int index;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>    public MockLeader(ZKWatcher watcher, int index) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      setDaemon(true);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      setName("TestZKLeaderManager-leader-" + index);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      this.index = index;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      this.watcher = watcher;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      this.zkLeader = new ZKLeaderManager(watcher, LEADER_ZNODE,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>          Bytes.toBytes(index), this);<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>    public boolean isMaster() {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      return master.get();<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    }<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>    public int getIndex() {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      return index;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>    public ZKWatcher getWatcher() {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      return watcher;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>    @Override<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public void run() {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      while (!stopped) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        zkLeader.start();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        zkLeader.waitToBecomeLeader();<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        master.set(true);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>        while (master.get() &amp;&amp; !stopped) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>          try {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>            Thread.sleep(10);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>          } catch (InterruptedException ignored) {}<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>    }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>    public void abdicate() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      zkLeader.stepDownAsLeader();<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      master.set(false);<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 void stop(String why) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      stopped = true;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      abdicate();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      Threads.sleep(100);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      watcher.close();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>    @Override<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    public boolean isStopped() {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      return stopped;<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><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private static HBaseZKTestingUtility TEST_UTIL;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  private static MockLeader[] CANDIDATES;<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  @BeforeClass<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public static void setupBeforeClass() throws Exception {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    TEST_UTIL = new HBaseZKTestingUtility();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    TEST_UTIL.startMiniZKCluster();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>    // use an abortable to fail the test in the case of any KeeperExceptions<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    MockAbortable abortable = new MockAbortable();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    int count = 5;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    CANDIDATES = new MockLeader[count];<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    for (int i = 0; i &lt; count; i++) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      ZKWatcher watcher = newZK(conf, "server"+i, abortable);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      CANDIDATES[i] = new MockLeader(watcher, i);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      CANDIDATES[i].start();<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  @AfterClass<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  public static void tearDownAfterClass() throws Exception {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    TEST_UTIL.shutdownMiniZKCluster();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  @Test<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  public void testLeaderSelection() throws Exception {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    MockLeader currentLeader = getCurrentLeader();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    // one leader should have been found<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    assertNotNull("Leader should exist", currentLeader);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    LOG.debug("Current leader index is "+currentLeader.getIndex());<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>    byte[] znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    int storedIndex = Bytes.toInt(znodeData);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    assertEquals("Leader znode should match leader index",<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        currentLeader.getIndex(), storedIndex);<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    // force a leader transition<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    currentLeader.abdicate();<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    // check for new leader<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    currentLeader = getCurrentLeader();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    // one leader should have been found<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    assertNotNull("New leader should exist after abdication", currentLeader);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    LOG.debug("New leader index is "+currentLeader.getIndex());<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>    znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    storedIndex = Bytes.toInt(znodeData);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    assertEquals("Leader znode should match leader index",<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        currentLeader.getIndex(), storedIndex);<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span>    // force another transition by stopping the current<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    currentLeader.stop("Stopping for test");<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>    // check for new leader<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    currentLeader = getCurrentLeader();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    // one leader should have been found<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    assertNotNull("New leader should exist after stop", currentLeader);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    LOG.debug("New leader index is "+currentLeader.getIndex());<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    znodeData = ZKUtil.getData(currentLeader.getWatcher(), LEADER_ZNODE);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    assertNotNull("Leader znode should contain leader index", znodeData);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    assertTrue("Leader znode should not be empty", znodeData.length &gt; 0);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    storedIndex = Bytes.toInt(znodeData);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    LOG.debug("Stored leader index in ZK is "+storedIndex);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    assertEquals("Leader znode should match leader index",<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        currentLeader.getIndex(), storedIndex);<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>    // with a second stop we can guarantee that a previous leader has resumed leading<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    currentLeader.stop("Stopping for test");<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>    // check for new<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    currentLeader = getCurrentLeader();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    assertNotNull("New leader should exist", currentLeader);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>  private MockLeader getCurrentLeader() throws Exception {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    MockLeader currentLeader = null;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    outer:<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    // Wait up to 10 secs for initial leader<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    for (int i = 0; i &lt; 1000; i++) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      for (int j = 0; j &lt; CANDIDATES.length; j++) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>        if (CANDIDATES[j].isMaster()) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          // should only be one leader<a name="line.224"></a>
+<span class="sourceLineNo">225</span>          if (currentLeader != null) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>            fail("Both candidate "+currentLeader.getIndex()+" and "+j+" claim to be leader!");<a name="line.226"></a>
+<span class="sourceLineNo">227</span>          }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          currentLeader = CANDIDATES[j];<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>      if (currentLeader != null) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        break outer;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      Threads.sleep(100);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return currentLeader;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  private static ZKWatcher newZK(Configuration conf, String name,<a name="line.239"></a>
+<span class="sourceLineNo">240</span>                                 Abortable abort) throws Exception {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    Configuration copy = HBaseConfiguration.create(conf);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    ZKWatcher zk = new ZKWatcher(copy, name, abort);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    return zk;<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>}<a name="line.246"></a>
 
 
 


[34/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html
index 80259dd..ec465b9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html
@@ -130,629 +130,631 @@
 <span class="sourceLineNo">122</span>  public int remainingTasksInCoordination() {<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    int count = 0;<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    try {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      List&lt;String&gt; tasks = ZKUtil.listChildrenNoWatch(watcher, watcher.znodePaths.splitLogZNode);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      if (tasks != null) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        int listSize = tasks.size();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        for (int i = 0; i &lt; listSize; i++) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>          if (!ZKSplitLog.isRescanNode(tasks.get(i))) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>            count++;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>          }<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    } catch (KeeperException ke) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      LOG.warn("Failed to check remaining tasks", ke);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      count = -1;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    return count;<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>   * It is possible for a task to stay in UNASSIGNED state indefinitely - say SplitLogManager wants<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * to resubmit a task. It forces the task to UNASSIGNED state but it dies before it could create<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * the RESCAN task node to signal the SplitLogWorkers to pick up the task. To prevent this<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * scenario the SplitLogManager resubmits all orphan and UNASSIGNED tasks at startup.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @param path<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private void handleUnassignedTask(String path) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      return;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    Task task = findOrCreateOrphanTask(path);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    if (task.isOrphan() &amp;&amp; (task.incarnation.get() == 0)) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      LOG.info("Resubmitting unassigned orphan task " + path);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      // ignore failure to resubmit. The timeout-monitor will handle it later<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      // albeit in a more crude fashion<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      resubmitTask(path, task, FORCE);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void deleteTask(String path) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    deleteNode(path, zkretries);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public boolean resubmitTask(String path, Task task, ResubmitDirective directive) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    // its ok if this thread misses the update to task.deleted. It will fail later<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    if (task.status != IN_PROGRESS) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      return false;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    int version;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    if (directive != FORCE) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      // We're going to resubmit:<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      // 1) immediately if the worker server is now marked as dead<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      // 2) after a configurable timeout if the server is not marked as dead but has still not<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      // finished the task. This allows to continue if the worker cannot actually handle it,<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      // for any reason.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      final long time = EnvironmentEdgeManager.currentTime() - task.last_update;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      final boolean alive =<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          details.getMaster().getServerManager() != null ? details.getMaster().getServerManager()<a name="line.181"></a>
-<span class="sourceLineNo">182</span>              .isServerOnline(task.cur_worker_name) : true;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      if (alive &amp;&amp; time &lt; timeout) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        LOG.trace("Skipping the resubmit of " + task.toString() + "  because the server "<a name="line.184"></a>
-<span class="sourceLineNo">185</span>            + task.cur_worker_name + " is not marked as dead, we waited for " + time<a name="line.185"></a>
-<span class="sourceLineNo">186</span>            + " while the timeout is " + timeout);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return false;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      if (task.unforcedResubmits.get() &gt;= resubmitThreshold) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        if (!task.resubmitThresholdReached) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          task.resubmitThresholdReached = true;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          SplitLogCounters.tot_mgr_resubmit_threshold_reached.increment();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>          LOG.info("Skipping resubmissions of task " + path + " because threshold "<a name="line.194"></a>
-<span class="sourceLineNo">195</span>              + resubmitThreshold + " reached");<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        return false;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // race with heartbeat() that might be changing last_version<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      version = task.last_version;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    } else {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      SplitLogCounters.tot_mgr_resubmit_force.increment();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      version = -1;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    LOG.info("Resubmitting task " + path);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    task.incarnation.incrementAndGet();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    boolean result = resubmit(path, version);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    if (!result) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return false;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    // don't count forced resubmits<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    if (directive != FORCE) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      task.unforcedResubmits.incrementAndGet();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    task.setUnassigned();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    rescan(Long.MAX_VALUE);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    SplitLogCounters.tot_mgr_resubmit.increment();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    return true;<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">125</span>      List&lt;String&gt; tasks = ZKUtil.listChildrenNoWatch(watcher,<a name="line.125"></a>
+<span class="sourceLineNo">126</span>              watcher.getZNodePaths().splitLogZNode);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      if (tasks != null) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        int listSize = tasks.size();<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        for (int i = 0; i &lt; listSize; i++) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>          if (!ZKSplitLog.isRescanNode(tasks.get(i))) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>            count++;<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>      }<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    } catch (KeeperException ke) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      LOG.warn("Failed to check remaining tasks", ke);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      count = -1;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    return count;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * It is possible for a task to stay in UNASSIGNED state indefinitely - say SplitLogManager wants<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * to resubmit a task. It forces the task to UNASSIGNED state but it dies before it could create<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * the RESCAN task node to signal the SplitLogWorkers to pick up the task. To prevent this<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * scenario the SplitLogManager resubmits all orphan and UNASSIGNED tasks at startup.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * @param path<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private void handleUnassignedTask(String path) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    Task task = findOrCreateOrphanTask(path);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    if (task.isOrphan() &amp;&amp; (task.incarnation.get() == 0)) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      LOG.info("Resubmitting unassigned orphan task " + path);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // ignore failure to resubmit. The timeout-monitor will handle it later<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // albeit in a more crude fashion<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      resubmitTask(path, task, FORCE);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void deleteTask(String path) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    deleteNode(path, zkretries);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  public boolean resubmitTask(String path, Task task, ResubmitDirective directive) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    // its ok if this thread misses the update to task.deleted. It will fail later<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    if (task.status != IN_PROGRESS) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      return false;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    int version;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    if (directive != FORCE) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      // We're going to resubmit:<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      // 1) immediately if the worker server is now marked as dead<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      // 2) after a configurable timeout if the server is not marked as dead but has still not<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      // finished the task. This allows to continue if the worker cannot actually handle it,<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      // for any reason.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      final long time = EnvironmentEdgeManager.currentTime() - task.last_update;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      final boolean alive =<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          details.getMaster().getServerManager() != null ? details.getMaster().getServerManager()<a name="line.182"></a>
+<span class="sourceLineNo">183</span>              .isServerOnline(task.cur_worker_name) : true;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      if (alive &amp;&amp; time &lt; timeout) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        LOG.trace("Skipping the resubmit of " + task.toString() + "  because the server "<a name="line.185"></a>
+<span class="sourceLineNo">186</span>            + task.cur_worker_name + " is not marked as dead, we waited for " + time<a name="line.186"></a>
+<span class="sourceLineNo">187</span>            + " while the timeout is " + timeout);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        return false;<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>      if (task.unforcedResubmits.get() &gt;= resubmitThreshold) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        if (!task.resubmitThresholdReached) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          task.resubmitThresholdReached = true;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          SplitLogCounters.tot_mgr_resubmit_threshold_reached.increment();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          LOG.info("Skipping resubmissions of task " + path + " because threshold "<a name="line.195"></a>
+<span class="sourceLineNo">196</span>              + resubmitThreshold + " reached");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        }<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>      // race with heartbeat() that might be changing last_version<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      version = task.last_version;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } else {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      SplitLogCounters.tot_mgr_resubmit_force.increment();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      version = -1;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    LOG.info("Resubmitting task " + path);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    task.incarnation.incrementAndGet();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    boolean result = resubmit(path, version);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    if (!result) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return false;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // don't count forced resubmits<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    if (directive != FORCE) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      task.unforcedResubmits.incrementAndGet();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    task.setUnassigned();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    rescan(Long.MAX_VALUE);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    SplitLogCounters.tot_mgr_resubmit.increment();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    return true;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
 <span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  @Override<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  public void checkTasks() {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    rescan(Long.MAX_VALUE);<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>   * signal the workers that a task was resubmitted by creating the RESCAN node.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  private void rescan(long retries) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    // The RESCAN node will be deleted almost immediately by the<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    // SplitLogManager as soon as it is created because it is being<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    // created in the DONE state. This behavior prevents a buildup<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    // of RESCAN nodes. But there is also a chance that a SplitLogWorker<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    // might miss the watch-trigger that creation of RESCAN node provides.<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    // Since the TimeoutMonitor will keep resubmitting UNASSIGNED tasks<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    // therefore this behavior is safe.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    SplitLogTask slt = new SplitLogTask.Done(this.details.getServerName());<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    this.watcher<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        .getRecoverableZooKeeper()<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        .getZooKeeper()<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        .create(ZKSplitLog.getRescanNode(watcher), slt.toByteArray(), Ids.OPEN_ACL_UNSAFE,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          CreateMode.EPHEMERAL_SEQUENTIAL, new CreateRescanAsyncCallback(), Long.valueOf(retries));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  @Override<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public void submitTask(String path) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    createNode(path, zkretries);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  }<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>  @Override<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void checkTaskStillAvailable(String path) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // A negative retry count will lead to ignoring all error processing.<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    this.watcher<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        .getRecoverableZooKeeper()<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        .getZooKeeper()<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        .getData(path, this.watcher, new GetDataAsyncCallback(),<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          Long.valueOf(-1) /* retry count */);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private void deleteNode(String path, Long retries) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    SplitLogCounters.tot_mgr_node_delete_queued.increment();<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // Once a task znode is ready for delete, that is it is in the TASK_DONE<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    // state, then no one should be writing to it anymore. That is no one<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    // will be updating the znode version any more.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        .delete(path, -1, new DeleteAsyncCallback(), retries);<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>  private void deleteNodeSuccess(String path) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (ignoreZKDeleteForTesting) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    Task task;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    task = details.getTasks().remove(path);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    if (task == null) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        SplitLogCounters.tot_mgr_rescan_deleted.increment();<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      SplitLogCounters.tot_mgr_missing_state_in_delete.increment();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      LOG.debug("Deleted task without in memory state " + path);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      return;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    synchronized (task) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      task.status = DELETED;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      task.notify();<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    SplitLogCounters.tot_mgr_task_deleted.increment();<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>  private void deleteNodeFailure(String path) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    LOG.info("Failed to delete node " + path + " and will retry soon.");<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  private void createRescanSuccess(String path) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    SplitLogCounters.tot_mgr_rescan.increment();<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    getDataSetWatch(path, zkretries);<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>  private void createRescanFailure() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    LOG.error(HBaseMarkers.FATAL, "logic failure, rescan failure must not happen");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>  /**<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * Helper function to check whether to abandon retries in ZooKeeper AsyncCallback functions<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * @param statusCode integer value of a ZooKeeper exception code<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * @param action description message about the retried action<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return true when need to abandon retries otherwise false<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  private boolean needAbandonRetries(int statusCode, String action) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    if (statusCode == KeeperException.Code.SESSIONEXPIRED.intValue()) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      LOG.error("ZK session expired. Master is expected to shut down. Abandoning retries for "<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          + "action=" + action);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return true;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return false;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private void createNode(String path, Long retry_count) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    SplitLogTask slt = new SplitLogTask.Unassigned(details.getServerName());<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    ZKUtil.asyncCreate(this.watcher, path, slt.toByteArray(), new CreateAsyncCallback(),<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      retry_count);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    SplitLogCounters.tot_mgr_node_create_queued.increment();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private void createNodeSuccess(String path) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    LOG.debug("Put up splitlog task at znode " + path);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    getDataSetWatch(path, zkretries);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  private void createNodeFailure(String path) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    // TODO the Manager should split the log locally instead of giving up<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    LOG.warn("Failed to create task node " + path);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    setDone(path, FAILURE);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  private void getDataSetWatch(String path, Long retry_count) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        .getData(path, this.watcher, new GetDataAsyncCallback(), retry_count);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  private void getDataSetWatchSuccess(String path, byte[] data, int version)<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      throws DeserializationException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    if (data == null) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      if (version == Integer.MIN_VALUE) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        // assume all done. The task znode suddenly disappeared.<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        setDone(path, SUCCESS);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        return;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      SplitLogCounters.tot_mgr_null_data.increment();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      LOG.error(HBaseMarkers.FATAL, "logic error - got null data " + path);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      setDone(path, FAILURE);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      return;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    data = ZKMetadata.removeMetaData(data);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    SplitLogTask slt = SplitLogTask.parseFrom(data);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    if (slt.isUnassigned()) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      LOG.debug("Task not yet acquired " + path + ", ver=" + version);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      handleUnassignedTask(path);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    } else if (slt.isOwned()) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      heartbeat(path, version, slt.getServerName());<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    } else if (slt.isResigned()) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      resubmitOrFail(path, FORCE);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    } else if (slt.isDone()) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      if (taskFinisher != null &amp;&amp; !ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        if (taskFinisher.finish(slt.getServerName(), ZKSplitLog.getFileName(path)) == Status.DONE) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          setDone(path, SUCCESS);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        } else {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          resubmitOrFail(path, CHECK);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      } else {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        setDone(path, SUCCESS);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } else if (slt.isErr()) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      resubmitOrFail(path, CHECK);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } else {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.error(HBaseMarkers.FATAL, "logic error - unexpected zk state for path = "<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          + path + " data = " + slt.toString());<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      setDone(path, FAILURE);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  private void resubmitOrFail(String path, ResubmitDirective directive) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    if (resubmitTask(path, findOrCreateOrphanTask(path), directive) == false) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      setDone(path, FAILURE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  private void getDataSetWatchFailure(String path) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    LOG.warn("Failed to set data watch " + path);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    setDone(path, FAILURE);<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>  private void setDone(String path, TerminationStatus status) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    Task task = details.getTasks().get(path);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    if (task == null) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      if (!ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        SplitLogCounters.tot_mgr_unacquired_orphan_done.increment();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.debug("Unacquired orphan task is done " + path);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    } else {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      synchronized (task) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        if (task.status == IN_PROGRESS) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          if (status == SUCCESS) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            SplitLogCounters.tot_mgr_log_split_success.increment();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            LOG.info("Done splitting " + path);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>          } else {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            SplitLogCounters.tot_mgr_log_split_err.increment();<a name="line.416"></a>
-<span class="sourceLineNo">417</span>            LOG.warn("Error splitting " + path);<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          }<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          task.status = status;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          if (task.batch != null) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>            synchronized (task.batch) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>              if (status == SUCCESS) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>                task.batch.done++;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>              } else {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>                task.batch.error++;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>              }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>              task.batch.notify();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>            }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    // delete the task node in zk. It's an async<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // call and no one is blocked waiting for this node to be deleted. All<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    // task names are unique (log.&lt;timestamp&gt;) there is no risk of deleting<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    // a future task.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    // if a deletion fails, TimeoutMonitor will retry the same deletion later<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    deleteNode(path, zkretries);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    return;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>  }<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  private Task findOrCreateOrphanTask(String path) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return computeIfAbsent(details.getTasks(), path, Task::new, () -&gt; {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      LOG.info("Creating orphan task " + path);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      SplitLogCounters.tot_mgr_orphan_task_acquired.increment();<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    });<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private void heartbeat(String path, int new_version, ServerName workerName) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Task task = findOrCreateOrphanTask(path);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (new_version != task.last_version) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      if (task.isUnassigned()) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        LOG.info("Task " + path + " acquired by " + workerName);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      task.heartbeat(EnvironmentEdgeManager.currentTime(), new_version, workerName);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      SplitLogCounters.tot_mgr_heartbeat.increment();<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    } else {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // duplicate heartbeats - heartbeats w/o zk node version<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      // changing - are possible. The timeout thread does<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // getDataSetWatch() just to check whether a node still<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // exists or not<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private void lookForOrphans() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    List&lt;String&gt; orphans;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    try {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      orphans = ZKUtil.listChildrenNoWatch(this.watcher, this.watcher.znodePaths.splitLogZNode);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      if (orphans == null) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        LOG.warn("Could not get children of " + this.watcher.znodePaths.splitLogZNode);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        return;<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    } catch (KeeperException e) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      LOG.warn("Could not get children of " + this.watcher.znodePaths.splitLogZNode + " "<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          + StringUtils.stringifyException(e));<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    int rescan_nodes = 0;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    int listSize = orphans.size();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    for (int i = 0; i &lt; listSize; i++) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      String path = orphans.get(i);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      String nodepath = ZNodePaths.joinZNode(watcher.znodePaths.splitLogZNode, path);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      if (ZKSplitLog.isRescanNode(watcher, nodepath)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        rescan_nodes++;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        LOG.debug("Found orphan rescan node " + path);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        LOG.info("Found orphan task " + path);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      getDataSetWatch(nodepath, zkretries);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    LOG.info("Found " + (orphans.size() - rescan_nodes) + " orphan tasks and " + rescan_nodes<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        + " rescan nodes");<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  @Override<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public void nodeDataChanged(String path) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Task task;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    task = details.getTasks().get(path);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (task != null || ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      if (task != null) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      getDataSetWatch(path, zkretries);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>  }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>  private boolean resubmit(String path, int version) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    try {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      // blocking zk call but this is done from the timeout thread<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      SplitLogTask slt =<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          new SplitLogTask.Unassigned(this.details.getServerName());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (ZKUtil.setData(this.watcher, path, slt.toByteArray(), version) == false) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        LOG.debug("Failed to resubmit task " + path + " version changed");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return false;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    } catch (NoNodeException e) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.warn("Failed to resubmit because znode doesn't exist " + path<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          + " task done (or forced done by removing the znode)");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      try {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        getDataSetWatchSuccess(path, null, Integer.MIN_VALUE);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      } catch (DeserializationException e1) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        LOG.debug("Failed to re-resubmit task " + path + " because of deserialization issue", e1);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        return false;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      return false;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    } catch (KeeperException.BadVersionException e) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      LOG.debug("Failed to resubmit task " + path + " version changed");<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return false;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    } catch (KeeperException e) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      SplitLogCounters.tot_mgr_resubmit_failed.increment();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      LOG.warn("Failed to resubmit " + path, e);<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      return false;<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    return true;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * {@link org.apache.hadoop.hbase.master.SplitLogManager} can use objects implementing this<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   * interface to finish off a partially done task by<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * {@link org.apache.hadoop.hbase.regionserver.SplitLogWorker}. This provides a<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * serialization point at the end of the task processing. Must be restartable and idempotent.<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   */<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public interface TaskFinisher {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>     * status that can be returned finish()<a name="line.547"></a>
-<span class="sourceLineNo">548</span>     */<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    enum Status {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span>       * task completed successfully<a name="line.551"></a>
-<span class="sourceLineNo">552</span>       */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      DONE(),<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>       * task completed with error<a name="line.555"></a>
-<span class="sourceLineNo">556</span>       */<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      ERR()<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    /**<a name="line.560"></a>
-<span class="sourceLineNo">561</span>     * finish the partially done task. workername provides clue to where the partial results of the<a name="line.561"></a>
-<span class="sourceLineNo">562</span>     * partially done tasks are present. taskname is the name of the task that was put up in<a name="line.562"></a>
-<span class="sourceLineNo">563</span>     * zookeeper.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>     * &lt;p&gt;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>     * @param workerName<a name="line.565"></a>
-<span class="sourceLineNo">566</span>     * @param taskname<a name="line.566"></a>
-<span class="sourceLineNo">567</span>     * @return DONE if task completed successfully, ERR otherwise<a name="line.567"></a>
-<span class="sourceLineNo">568</span>     */<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    Status finish(ServerName workerName, String taskname);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>  /**<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   * Asynchronous handler for zk create node results. Retries on failures.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   */<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  public class CreateAsyncCallback implements AsyncCallback.StringCallback {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    private final Logger LOG = LoggerFactory.getLogger(CreateAsyncCallback.class);<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    public void processResult(int rc, String path, Object ctx, String name) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      SplitLogCounters.tot_mgr_node_create_result.increment();<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      if (rc != 0) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        if (needAbandonRetries(rc, "Create znode " + path)) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>          createNodeFailure(path);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>          return;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>        if (rc == KeeperException.Code.NODEEXISTS.intValue()) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>          // What if there is a delete pending against this pre-existing<a name="line.587"></a>
-<span class="sourceLineNo">588</span>          // znode? Then this soon-to-be-deleted task znode must be in TASK_DONE<a name="line.588"></a>
-<span class="sourceLineNo">589</span>          // state. Only operations that will be carried out on this node by<a name="line.589"></a>
-<span class="sourceLineNo">590</span>          // this manager are get-znode-data, task-finisher and delete-znode.<a name="line.590"></a>
-<span class="sourceLineNo">591</span>          // And all code pieces correctly handle the case of suddenly<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          // disappearing task-znode.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>          LOG.debug("Found pre-existing znode " + path);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>          SplitLogCounters.tot_mgr_node_already_exists.increment();<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        } else {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>          Long retry_count = (Long) ctx;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          LOG.warn("Create rc=" + KeeperException.Code.get(rc) + " for " + path<a name="line.597"></a>
-<span class="sourceLineNo">598</span>              + " remaining retries=" + retry_count);<a name="line.598"></a>
-<span class="sourceLineNo">599</span>          if (retry_count == 0) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>            SplitLogCounters.tot_mgr_node_create_err.increment();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>            createNodeFailure(path);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>          } else {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            SplitLogCounters.tot_mgr_node_create_retry.increment();<a name="line.603"></a>
-<span class="sourceLineNo">604</span>            createNode(path, retry_count - 1);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>          return;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      createNodeSuccess(path);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Asynchronous handler for zk get-data-set-watch on node results. Retries on failures.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   */<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  public class GetDataAsyncCallback implements AsyncCallback.DataCallback {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    private final Logger LOG = LoggerFactory.getLogger(GetDataAsyncCallback.class);<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>    @Override<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    public void processResult(int rc, String path, Object ctx, byte[] data, Stat stat) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      SplitLogCounters.tot_mgr_get_data_result.increment();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      if (rc != 0) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        if (needAbandonRetries(rc, "GetData from znode " + path)) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          return;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        }<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        if (rc == KeeperException.Code.NONODE.intValue()) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>          SplitLogCounters.tot_mgr_get_data_nonode.increment();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>          LOG.warn("Task znode " + path + " vanished or not created yet.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>          // ignore since we should not end up in a case where there is in-memory task,<a name="line.629"></a>
-<span class="sourceLineNo">630</span>          // but no znode. The only case is between the time task is created in-memory<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          // and the znode is created. See HBASE-11217.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          return;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>        Long retry_count = (Long) ctx;<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>        if (retry_count &lt; 0) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          LOG.warn("Getdata rc=" + KeeperException.Code.get(rc) + " " + path<a name="line.637"></a>
-<span class="sourceLineNo">638</span>              + ". Ignoring error. No error handling. No retrying.");<a name="line.638"></a>
-<span class="sourceLineNo">639</span>          return;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        LOG.warn("Getdata rc=" + KeeperException.Code.get(rc) + " " + path<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            + " remaining retries=" + retry_count);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        if (retry_count == 0) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>          SplitLogCounters.tot_mgr_get_data_err.increment();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>          getDataSetWatchFailure(path);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        } else {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          SplitLogCounters.tot_mgr_get_data_retry.increment();<a name="line.647"></a>
-<span class="sourceLineNo">648</span>          getDataSetWatch(path, retry_count - 1);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        }<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        return;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      }<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      try {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        getDataSetWatchSuccess(path, data, stat.getVersion());<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      } catch (DeserializationException e) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        LOG.warn("Deserialization problem", e);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      return;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span>  /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * Asynchronous handler for zk delete node results. Retries on failures.<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  public class DeleteAsyncCallback implements AsyncCallback.VoidCallback {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    private final Logger LOG = LoggerFactory.getLogger(DeleteAsyncCallback.class);<a name="line.665"></a>
-<span class="sourceLineNo">666</span><a name="line.666"></a>
-<span class="sourceLineNo">667</span>    @Override<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    public void processResult(int rc, String path, Object ctx) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      SplitLogCounters.tot_mgr_node_delete_result.increment();<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      if (rc != 0) {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        if (needAbandonRetries(rc, "Delete znode " + path)) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>          details.getFailedDeletions().add(path);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          return;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
-<span class="sourceLineNo">675</span>        if (rc != KeeperException.Code.NONODE.intValue()) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>          SplitLogCounters.tot_mgr_node_delete_err.increment();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>          Long retry_count = (Long) ctx;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          LOG.warn("Delete rc=" + KeeperException.Code.get(rc) + " for " + path<a name="line.678"></a>
-<span class="sourceLineNo">679</span>              + " remaining retries=" + retry_count);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>          if (retry_count == 0) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>            LOG.warn("Delete failed " + path);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>            details.getFailedDeletions().add(path);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>            deleteNodeFailure(path);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          } else {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>            deleteNode(path, retry_count - 1);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>          }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          return;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>        } else {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>          LOG.info(path + " does not exist. Either was created but deleted behind our"<a name="line.689"></a>
-<span class="sourceLineNo">690</span>              + " back by another pending delete OR was deleted"<a name="line.690"></a>
-<span class="sourceLineNo">691</span>              + " in earlier retry rounds. zkretries = " + ctx);<a name="line.691"></a>
-<span class="sourceLineNo">692</span>        }<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      } else {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>        LOG.debug("Deleted " + path);<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      }<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      deleteNodeSuccess(path);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  }<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>  /**<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * Asynchronous handler for zk create RESCAN-node results. Retries on failures.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   * &lt;p&gt;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   * A RESCAN node is created using PERSISTENT_SEQUENTIAL flag. It is a signal for all the<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * {@link org.apache.hadoop.hbase.regionserver.SplitLogWorker}s to rescan for new tasks.<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   */<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  public class CreateRescanAsyncCallback implements AsyncCallback.StringCallback {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    private final Logger LOG = LoggerFactory.getLogger(CreateRescanAsyncCallback.class);<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>    @Override<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    public void processResult(int rc, String path, Object ctx, String name) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      if (rc != 0) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>        if (needAbandonRetries(rc, "CreateRescan znode " + path)) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>          return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        }<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        Long retry_count = (Long) ctx;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        LOG.warn("rc=" + KeeperException.Code.get(rc) + " for " + path + " remaining retries="<a name="line.716"></a>
-<span class="sourceLineNo">717</span>            + retry_count);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        if (retry_count == 0) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          createRescanFailure();<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        } else {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          rescan(retry_count - 1);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        return;<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      }<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      // path is the original arg, name is the actual name that was created<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      createRescanSuccess(name);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  @Override<a name="line.730"></a>
-<span class="sourceLineNo">731</span>  public void setDetails(SplitLogManagerDetails details) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    this.details = details;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>  @Override<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  public SplitLogManagerDetails getDetails() {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return details;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Temporary function that is used by unit tests only<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   */<a name="line.742"></a>
-<span class="sourceLineNo">743</span>  @VisibleForTesting<a name="line.743"></a>
-<span class="sourceLineNo">744</span>  public void setIgnoreDeleteForTesting(boolean b) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    ignoreZKDeleteForTesting = b;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span>}<a name="line.747"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  @Override<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  public void checkTasks() {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    rescan(Long.MAX_VALUE);<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>   * signal the workers that a task was resubmitted by creating the RESCAN node.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  private void rescan(long retries) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    // The RESCAN node will be deleted almost immediately by the<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    // SplitLogManager as soon as it is created because it is being<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    // created in the DONE state. This behavior prevents a buildup<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    // of RESCAN nodes. But there is also a chance that a SplitLogWorker<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    // might miss the watch-trigger that creation of RESCAN node provides.<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    // Since the TimeoutMonitor will keep resubmitting UNASSIGNED tasks<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    // therefore this behavior is safe.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    SplitLogTask slt = new SplitLogTask.Done(this.details.getServerName());<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    this.watcher<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        .getRecoverableZooKeeper()<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        .getZooKeeper()<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        .create(ZKSplitLog.getRescanNode(watcher), slt.toByteArray(), Ids.OPEN_ACL_UNSAFE,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          CreateMode.EPHEMERAL_SEQUENTIAL, new CreateRescanAsyncCallback(), Long.valueOf(retries));<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  @Override<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  public void submitTask(String path) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    createNode(path, zkretries);<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>  public void checkTaskStillAvailable(String path) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    // A negative retry count will lead to ignoring all error processing.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    this.watcher<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .getRecoverableZooKeeper()<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        .getZooKeeper()<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        .getData(path, this.watcher, new GetDataAsyncCallback(),<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          Long.valueOf(-1) /* retry count */);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<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>  private void deleteNode(String path, Long retries) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    SplitLogCounters.tot_mgr_node_delete_queued.increment();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    // Once a task znode is ready for delete, that is it is in the TASK_DONE<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    // state, then no one should be writing to it anymore. That is no one<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    // will be updating the znode version any more.<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        .delete(path, -1, new DeleteAsyncCallback(), retries);<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>  private void deleteNodeSuccess(String path) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    if (ignoreZKDeleteForTesting) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      return;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Task task;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    task = details.getTasks().remove(path);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    if (task == null) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        SplitLogCounters.tot_mgr_rescan_deleted.increment();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      SplitLogCounters.tot_mgr_missing_state_in_delete.increment();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      LOG.debug("Deleted task without in memory state " + path);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      return;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    synchronized (task) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      task.status = DELETED;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      task.notify();<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    SplitLogCounters.tot_mgr_task_deleted.increment();<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>  private void deleteNodeFailure(String path) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    LOG.info("Failed to delete node " + path + " and will retry soon.");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return;<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>  private void createRescanSuccess(String path) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    SplitLogCounters.tot_mgr_rescan.increment();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    getDataSetWatch(path, zkretries);<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>  private void createRescanFailure() {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    LOG.error(HBaseMarkers.FATAL, "logic failure, rescan failure must not happen");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  /**<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * Helper function to check whether to abandon retries in ZooKeeper AsyncCallback functions<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * @param statusCode integer value of a ZooKeeper exception code<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * @param action description message about the retried action<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * @return true when need to abandon retries otherwise false<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  private boolean needAbandonRetries(int statusCode, String action) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    if (statusCode == KeeperException.Code.SESSIONEXPIRED.intValue()) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      LOG.error("ZK session expired. Master is expected to shut down. Abandoning retries for "<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          + "action=" + action);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      return true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    return false;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  private void createNode(String path, Long retry_count) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    SplitLogTask slt = new SplitLogTask.Unassigned(details.getServerName());<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    ZKUtil.asyncCreate(this.watcher, path, slt.toByteArray(), new CreateAsyncCallback(),<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      retry_count);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    SplitLogCounters.tot_mgr_node_create_queued.increment();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    return;<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>  private void createNodeSuccess(String path) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    LOG.debug("Put up splitlog task at znode " + path);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    getDataSetWatch(path, zkretries);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private void createNodeFailure(String path) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    // TODO the Manager should split the log locally instead of giving up<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    LOG.warn("Failed to create task node " + path);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    setDone(path, FAILURE);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>  }<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>  private void getDataSetWatch(String path, Long retry_count) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        .getData(path, this.watcher, new GetDataAsyncCallback(), retry_count);<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>  private void getDataSetWatchSuccess(String path, byte[] data, int version)<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throws DeserializationException {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    if (data == null) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      if (version == Integer.MIN_VALUE) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        // assume all done. The task znode suddenly disappeared.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        setDone(path, SUCCESS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        return;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      SplitLogCounters.tot_mgr_null_data.increment();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      LOG.error(HBaseMarkers.FATAL, "logic error - got null data " + path);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      setDone(path, FAILURE);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      return;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    data = ZKMetadata.removeMetaData(data);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    SplitLogTask slt = SplitLogTask.parseFrom(data);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    if (slt.isUnassigned()) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      LOG.debug("Task not yet acquired " + path + ", ver=" + version);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      handleUnassignedTask(path);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    } else if (slt.isOwned()) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      heartbeat(path, version, slt.getServerName());<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    } else if (slt.isResigned()) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      resubmitOrFail(path, FORCE);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    } else if (slt.isDone()) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      if (taskFinisher != null &amp;&amp; !ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        if (taskFinisher.finish(slt.getServerName(), ZKSplitLog.getFileName(path)) == Status.DONE) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>          setDone(path, SUCCESS);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        } else {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          resubmitOrFail(path, CHECK);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      } else {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        setDone(path, SUCCESS);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } else if (slt.isErr()) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      resubmitOrFail(path, CHECK);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    } else {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      LOG.error(HBaseMarkers.FATAL, "logic error - unexpected zk state for path = "<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          + path + " data = " + slt.toString());<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      setDone(path, FAILURE);<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>  private void resubmitOrFail(String path, ResubmitDirective directive) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    if (resubmitTask(path, findOrCreateOrphanTask(path), directive) == false) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      setDone(path, FAILURE);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private void getDataSetWatchFailure(String path) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    LOG.warn("Failed to set data watch " + path);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    setDone(path, FAILURE);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>  private void setDone(String path, TerminationStatus status) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    Task task = details.getTasks().get(path);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (task == null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (!ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        SplitLogCounters.tot_mgr_unacquired_orphan_done

<TRUNCATED>

[30/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.html b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.html
index 80259dd..ec465b9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.html
@@ -130,629 +130,631 @@
 <span class="sourceLineNo">122</span>  public int remainingTasksInCoordination() {<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    int count = 0;<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    try {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      List&lt;String&gt; tasks = ZKUtil.listChildrenNoWatch(watcher, watcher.znodePaths.splitLogZNode);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      if (tasks != null) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        int listSize = tasks.size();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        for (int i = 0; i &lt; listSize; i++) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>          if (!ZKSplitLog.isRescanNode(tasks.get(i))) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>            count++;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>          }<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    } catch (KeeperException ke) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      LOG.warn("Failed to check remaining tasks", ke);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      count = -1;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    return count;<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>   * It is possible for a task to stay in UNASSIGNED state indefinitely - say SplitLogManager wants<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * to resubmit a task. It forces the task to UNASSIGNED state but it dies before it could create<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * the RESCAN task node to signal the SplitLogWorkers to pick up the task. To prevent this<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * scenario the SplitLogManager resubmits all orphan and UNASSIGNED tasks at startup.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @param path<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private void handleUnassignedTask(String path) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      return;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    Task task = findOrCreateOrphanTask(path);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    if (task.isOrphan() &amp;&amp; (task.incarnation.get() == 0)) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      LOG.info("Resubmitting unassigned orphan task " + path);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      // ignore failure to resubmit. The timeout-monitor will handle it later<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      // albeit in a more crude fashion<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      resubmitTask(path, task, FORCE);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void deleteTask(String path) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    deleteNode(path, zkretries);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public boolean resubmitTask(String path, Task task, ResubmitDirective directive) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    // its ok if this thread misses the update to task.deleted. It will fail later<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    if (task.status != IN_PROGRESS) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      return false;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    int version;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    if (directive != FORCE) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      // We're going to resubmit:<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      // 1) immediately if the worker server is now marked as dead<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      // 2) after a configurable timeout if the server is not marked as dead but has still not<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      // finished the task. This allows to continue if the worker cannot actually handle it,<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      // for any reason.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      final long time = EnvironmentEdgeManager.currentTime() - task.last_update;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      final boolean alive =<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          details.getMaster().getServerManager() != null ? details.getMaster().getServerManager()<a name="line.181"></a>
-<span class="sourceLineNo">182</span>              .isServerOnline(task.cur_worker_name) : true;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      if (alive &amp;&amp; time &lt; timeout) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        LOG.trace("Skipping the resubmit of " + task.toString() + "  because the server "<a name="line.184"></a>
-<span class="sourceLineNo">185</span>            + task.cur_worker_name + " is not marked as dead, we waited for " + time<a name="line.185"></a>
-<span class="sourceLineNo">186</span>            + " while the timeout is " + timeout);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return false;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      if (task.unforcedResubmits.get() &gt;= resubmitThreshold) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        if (!task.resubmitThresholdReached) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          task.resubmitThresholdReached = true;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          SplitLogCounters.tot_mgr_resubmit_threshold_reached.increment();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>          LOG.info("Skipping resubmissions of task " + path + " because threshold "<a name="line.194"></a>
-<span class="sourceLineNo">195</span>              + resubmitThreshold + " reached");<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        return false;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // race with heartbeat() that might be changing last_version<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      version = task.last_version;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    } else {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      SplitLogCounters.tot_mgr_resubmit_force.increment();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      version = -1;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    LOG.info("Resubmitting task " + path);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    task.incarnation.incrementAndGet();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    boolean result = resubmit(path, version);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    if (!result) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return false;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    // don't count forced resubmits<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    if (directive != FORCE) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      task.unforcedResubmits.incrementAndGet();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    task.setUnassigned();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    rescan(Long.MAX_VALUE);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    SplitLogCounters.tot_mgr_resubmit.increment();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    return true;<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">125</span>      List&lt;String&gt; tasks = ZKUtil.listChildrenNoWatch(watcher,<a name="line.125"></a>
+<span class="sourceLineNo">126</span>              watcher.getZNodePaths().splitLogZNode);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      if (tasks != null) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        int listSize = tasks.size();<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        for (int i = 0; i &lt; listSize; i++) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>          if (!ZKSplitLog.isRescanNode(tasks.get(i))) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>            count++;<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>      }<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    } catch (KeeperException ke) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      LOG.warn("Failed to check remaining tasks", ke);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      count = -1;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    return count;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * It is possible for a task to stay in UNASSIGNED state indefinitely - say SplitLogManager wants<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * to resubmit a task. It forces the task to UNASSIGNED state but it dies before it could create<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * the RESCAN task node to signal the SplitLogWorkers to pick up the task. To prevent this<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * scenario the SplitLogManager resubmits all orphan and UNASSIGNED tasks at startup.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * @param path<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private void handleUnassignedTask(String path) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    Task task = findOrCreateOrphanTask(path);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    if (task.isOrphan() &amp;&amp; (task.incarnation.get() == 0)) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      LOG.info("Resubmitting unassigned orphan task " + path);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // ignore failure to resubmit. The timeout-monitor will handle it later<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // albeit in a more crude fashion<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      resubmitTask(path, task, FORCE);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void deleteTask(String path) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    deleteNode(path, zkretries);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  public boolean resubmitTask(String path, Task task, ResubmitDirective directive) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    // its ok if this thread misses the update to task.deleted. It will fail later<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    if (task.status != IN_PROGRESS) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      return false;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    int version;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    if (directive != FORCE) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      // We're going to resubmit:<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      // 1) immediately if the worker server is now marked as dead<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      // 2) after a configurable timeout if the server is not marked as dead but has still not<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      // finished the task. This allows to continue if the worker cannot actually handle it,<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      // for any reason.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      final long time = EnvironmentEdgeManager.currentTime() - task.last_update;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      final boolean alive =<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          details.getMaster().getServerManager() != null ? details.getMaster().getServerManager()<a name="line.182"></a>
+<span class="sourceLineNo">183</span>              .isServerOnline(task.cur_worker_name) : true;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      if (alive &amp;&amp; time &lt; timeout) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        LOG.trace("Skipping the resubmit of " + task.toString() + "  because the server "<a name="line.185"></a>
+<span class="sourceLineNo">186</span>            + task.cur_worker_name + " is not marked as dead, we waited for " + time<a name="line.186"></a>
+<span class="sourceLineNo">187</span>            + " while the timeout is " + timeout);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        return false;<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>      if (task.unforcedResubmits.get() &gt;= resubmitThreshold) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        if (!task.resubmitThresholdReached) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          task.resubmitThresholdReached = true;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          SplitLogCounters.tot_mgr_resubmit_threshold_reached.increment();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          LOG.info("Skipping resubmissions of task " + path + " because threshold "<a name="line.195"></a>
+<span class="sourceLineNo">196</span>              + resubmitThreshold + " reached");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        }<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>      // race with heartbeat() that might be changing last_version<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      version = task.last_version;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } else {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      SplitLogCounters.tot_mgr_resubmit_force.increment();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      version = -1;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    LOG.info("Resubmitting task " + path);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    task.incarnation.incrementAndGet();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    boolean result = resubmit(path, version);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    if (!result) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return false;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // don't count forced resubmits<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    if (directive != FORCE) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      task.unforcedResubmits.incrementAndGet();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    task.setUnassigned();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    rescan(Long.MAX_VALUE);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    SplitLogCounters.tot_mgr_resubmit.increment();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    return true;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
 <span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  @Override<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  public void checkTasks() {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    rescan(Long.MAX_VALUE);<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>   * signal the workers that a task was resubmitted by creating the RESCAN node.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  private void rescan(long retries) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    // The RESCAN node will be deleted almost immediately by the<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    // SplitLogManager as soon as it is created because it is being<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    // created in the DONE state. This behavior prevents a buildup<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    // of RESCAN nodes. But there is also a chance that a SplitLogWorker<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    // might miss the watch-trigger that creation of RESCAN node provides.<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    // Since the TimeoutMonitor will keep resubmitting UNASSIGNED tasks<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    // therefore this behavior is safe.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    SplitLogTask slt = new SplitLogTask.Done(this.details.getServerName());<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    this.watcher<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        .getRecoverableZooKeeper()<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        .getZooKeeper()<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        .create(ZKSplitLog.getRescanNode(watcher), slt.toByteArray(), Ids.OPEN_ACL_UNSAFE,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          CreateMode.EPHEMERAL_SEQUENTIAL, new CreateRescanAsyncCallback(), Long.valueOf(retries));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  @Override<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public void submitTask(String path) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    createNode(path, zkretries);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  }<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>  @Override<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void checkTaskStillAvailable(String path) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // A negative retry count will lead to ignoring all error processing.<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    this.watcher<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        .getRecoverableZooKeeper()<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        .getZooKeeper()<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        .getData(path, this.watcher, new GetDataAsyncCallback(),<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          Long.valueOf(-1) /* retry count */);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private void deleteNode(String path, Long retries) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    SplitLogCounters.tot_mgr_node_delete_queued.increment();<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // Once a task znode is ready for delete, that is it is in the TASK_DONE<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    // state, then no one should be writing to it anymore. That is no one<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    // will be updating the znode version any more.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        .delete(path, -1, new DeleteAsyncCallback(), retries);<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>  private void deleteNodeSuccess(String path) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (ignoreZKDeleteForTesting) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    Task task;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    task = details.getTasks().remove(path);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    if (task == null) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        SplitLogCounters.tot_mgr_rescan_deleted.increment();<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      SplitLogCounters.tot_mgr_missing_state_in_delete.increment();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      LOG.debug("Deleted task without in memory state " + path);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      return;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    synchronized (task) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      task.status = DELETED;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      task.notify();<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    SplitLogCounters.tot_mgr_task_deleted.increment();<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>  private void deleteNodeFailure(String path) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    LOG.info("Failed to delete node " + path + " and will retry soon.");<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  private void createRescanSuccess(String path) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    SplitLogCounters.tot_mgr_rescan.increment();<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    getDataSetWatch(path, zkretries);<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>  private void createRescanFailure() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    LOG.error(HBaseMarkers.FATAL, "logic failure, rescan failure must not happen");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>  /**<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * Helper function to check whether to abandon retries in ZooKeeper AsyncCallback functions<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * @param statusCode integer value of a ZooKeeper exception code<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * @param action description message about the retried action<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return true when need to abandon retries otherwise false<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  private boolean needAbandonRetries(int statusCode, String action) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    if (statusCode == KeeperException.Code.SESSIONEXPIRED.intValue()) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      LOG.error("ZK session expired. Master is expected to shut down. Abandoning retries for "<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          + "action=" + action);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return true;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return false;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private void createNode(String path, Long retry_count) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    SplitLogTask slt = new SplitLogTask.Unassigned(details.getServerName());<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    ZKUtil.asyncCreate(this.watcher, path, slt.toByteArray(), new CreateAsyncCallback(),<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      retry_count);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    SplitLogCounters.tot_mgr_node_create_queued.increment();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private void createNodeSuccess(String path) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    LOG.debug("Put up splitlog task at znode " + path);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    getDataSetWatch(path, zkretries);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  private void createNodeFailure(String path) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    // TODO the Manager should split the log locally instead of giving up<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    LOG.warn("Failed to create task node " + path);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    setDone(path, FAILURE);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  private void getDataSetWatch(String path, Long retry_count) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        .getData(path, this.watcher, new GetDataAsyncCallback(), retry_count);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  private void getDataSetWatchSuccess(String path, byte[] data, int version)<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      throws DeserializationException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    if (data == null) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      if (version == Integer.MIN_VALUE) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        // assume all done. The task znode suddenly disappeared.<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        setDone(path, SUCCESS);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        return;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      SplitLogCounters.tot_mgr_null_data.increment();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      LOG.error(HBaseMarkers.FATAL, "logic error - got null data " + path);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      setDone(path, FAILURE);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      return;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    data = ZKMetadata.removeMetaData(data);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    SplitLogTask slt = SplitLogTask.parseFrom(data);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    if (slt.isUnassigned()) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      LOG.debug("Task not yet acquired " + path + ", ver=" + version);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      handleUnassignedTask(path);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    } else if (slt.isOwned()) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      heartbeat(path, version, slt.getServerName());<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    } else if (slt.isResigned()) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      resubmitOrFail(path, FORCE);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    } else if (slt.isDone()) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      if (taskFinisher != null &amp;&amp; !ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        if (taskFinisher.finish(slt.getServerName(), ZKSplitLog.getFileName(path)) == Status.DONE) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          setDone(path, SUCCESS);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        } else {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          resubmitOrFail(path, CHECK);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      } else {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        setDone(path, SUCCESS);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } else if (slt.isErr()) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      resubmitOrFail(path, CHECK);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } else {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.error(HBaseMarkers.FATAL, "logic error - unexpected zk state for path = "<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          + path + " data = " + slt.toString());<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      setDone(path, FAILURE);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  private void resubmitOrFail(String path, ResubmitDirective directive) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    if (resubmitTask(path, findOrCreateOrphanTask(path), directive) == false) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      setDone(path, FAILURE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  private void getDataSetWatchFailure(String path) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    LOG.warn("Failed to set data watch " + path);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    setDone(path, FAILURE);<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>  private void setDone(String path, TerminationStatus status) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    Task task = details.getTasks().get(path);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    if (task == null) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      if (!ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        SplitLogCounters.tot_mgr_unacquired_orphan_done.increment();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.debug("Unacquired orphan task is done " + path);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    } else {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      synchronized (task) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        if (task.status == IN_PROGRESS) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          if (status == SUCCESS) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            SplitLogCounters.tot_mgr_log_split_success.increment();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            LOG.info("Done splitting " + path);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>          } else {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            SplitLogCounters.tot_mgr_log_split_err.increment();<a name="line.416"></a>
-<span class="sourceLineNo">417</span>            LOG.warn("Error splitting " + path);<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          }<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          task.status = status;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          if (task.batch != null) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>            synchronized (task.batch) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>              if (status == SUCCESS) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>                task.batch.done++;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>              } else {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>                task.batch.error++;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>              }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>              task.batch.notify();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>            }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    // delete the task node in zk. It's an async<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // call and no one is blocked waiting for this node to be deleted. All<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    // task names are unique (log.&lt;timestamp&gt;) there is no risk of deleting<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    // a future task.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    // if a deletion fails, TimeoutMonitor will retry the same deletion later<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    deleteNode(path, zkretries);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    return;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>  }<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  private Task findOrCreateOrphanTask(String path) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return computeIfAbsent(details.getTasks(), path, Task::new, () -&gt; {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      LOG.info("Creating orphan task " + path);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      SplitLogCounters.tot_mgr_orphan_task_acquired.increment();<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    });<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private void heartbeat(String path, int new_version, ServerName workerName) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Task task = findOrCreateOrphanTask(path);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (new_version != task.last_version) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      if (task.isUnassigned()) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        LOG.info("Task " + path + " acquired by " + workerName);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      task.heartbeat(EnvironmentEdgeManager.currentTime(), new_version, workerName);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      SplitLogCounters.tot_mgr_heartbeat.increment();<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    } else {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // duplicate heartbeats - heartbeats w/o zk node version<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      // changing - are possible. The timeout thread does<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // getDataSetWatch() just to check whether a node still<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // exists or not<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private void lookForOrphans() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    List&lt;String&gt; orphans;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    try {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      orphans = ZKUtil.listChildrenNoWatch(this.watcher, this.watcher.znodePaths.splitLogZNode);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      if (orphans == null) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        LOG.warn("Could not get children of " + this.watcher.znodePaths.splitLogZNode);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        return;<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    } catch (KeeperException e) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      LOG.warn("Could not get children of " + this.watcher.znodePaths.splitLogZNode + " "<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          + StringUtils.stringifyException(e));<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    int rescan_nodes = 0;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    int listSize = orphans.size();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    for (int i = 0; i &lt; listSize; i++) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      String path = orphans.get(i);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      String nodepath = ZNodePaths.joinZNode(watcher.znodePaths.splitLogZNode, path);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      if (ZKSplitLog.isRescanNode(watcher, nodepath)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        rescan_nodes++;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        LOG.debug("Found orphan rescan node " + path);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        LOG.info("Found orphan task " + path);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      getDataSetWatch(nodepath, zkretries);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    LOG.info("Found " + (orphans.size() - rescan_nodes) + " orphan tasks and " + rescan_nodes<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        + " rescan nodes");<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  @Override<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public void nodeDataChanged(String path) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Task task;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    task = details.getTasks().get(path);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (task != null || ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      if (task != null) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      getDataSetWatch(path, zkretries);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>  }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>  private boolean resubmit(String path, int version) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    try {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      // blocking zk call but this is done from the timeout thread<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      SplitLogTask slt =<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          new SplitLogTask.Unassigned(this.details.getServerName());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (ZKUtil.setData(this.watcher, path, slt.toByteArray(), version) == false) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        LOG.debug("Failed to resubmit task " + path + " version changed");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return false;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    } catch (NoNodeException e) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.warn("Failed to resubmit because znode doesn't exist " + path<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          + " task done (or forced done by removing the znode)");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      try {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        getDataSetWatchSuccess(path, null, Integer.MIN_VALUE);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      } catch (DeserializationException e1) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        LOG.debug("Failed to re-resubmit task " + path + " because of deserialization issue", e1);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        return false;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      return false;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    } catch (KeeperException.BadVersionException e) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      LOG.debug("Failed to resubmit task " + path + " version changed");<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return false;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    } catch (KeeperException e) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      SplitLogCounters.tot_mgr_resubmit_failed.increment();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      LOG.warn("Failed to resubmit " + path, e);<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      return false;<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    return true;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * {@link org.apache.hadoop.hbase.master.SplitLogManager} can use objects implementing this<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   * interface to finish off a partially done task by<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * {@link org.apache.hadoop.hbase.regionserver.SplitLogWorker}. This provides a<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * serialization point at the end of the task processing. Must be restartable and idempotent.<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   */<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public interface TaskFinisher {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>     * status that can be returned finish()<a name="line.547"></a>
-<span class="sourceLineNo">548</span>     */<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    enum Status {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span>       * task completed successfully<a name="line.551"></a>
-<span class="sourceLineNo">552</span>       */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      DONE(),<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>       * task completed with error<a name="line.555"></a>
-<span class="sourceLineNo">556</span>       */<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      ERR()<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    /**<a name="line.560"></a>
-<span class="sourceLineNo">561</span>     * finish the partially done task. workername provides clue to where the partial results of the<a name="line.561"></a>
-<span class="sourceLineNo">562</span>     * partially done tasks are present. taskname is the name of the task that was put up in<a name="line.562"></a>
-<span class="sourceLineNo">563</span>     * zookeeper.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>     * &lt;p&gt;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>     * @param workerName<a name="line.565"></a>
-<span class="sourceLineNo">566</span>     * @param taskname<a name="line.566"></a>
-<span class="sourceLineNo">567</span>     * @return DONE if task completed successfully, ERR otherwise<a name="line.567"></a>
-<span class="sourceLineNo">568</span>     */<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    Status finish(ServerName workerName, String taskname);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>  /**<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   * Asynchronous handler for zk create node results. Retries on failures.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   */<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  public class CreateAsyncCallback implements AsyncCallback.StringCallback {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    private final Logger LOG = LoggerFactory.getLogger(CreateAsyncCallback.class);<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    public void processResult(int rc, String path, Object ctx, String name) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      SplitLogCounters.tot_mgr_node_create_result.increment();<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      if (rc != 0) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        if (needAbandonRetries(rc, "Create znode " + path)) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>          createNodeFailure(path);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>          return;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>        if (rc == KeeperException.Code.NODEEXISTS.intValue()) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>          // What if there is a delete pending against this pre-existing<a name="line.587"></a>
-<span class="sourceLineNo">588</span>          // znode? Then this soon-to-be-deleted task znode must be in TASK_DONE<a name="line.588"></a>
-<span class="sourceLineNo">589</span>          // state. Only operations that will be carried out on this node by<a name="line.589"></a>
-<span class="sourceLineNo">590</span>          // this manager are get-znode-data, task-finisher and delete-znode.<a name="line.590"></a>
-<span class="sourceLineNo">591</span>          // And all code pieces correctly handle the case of suddenly<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          // disappearing task-znode.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>          LOG.debug("Found pre-existing znode " + path);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>          SplitLogCounters.tot_mgr_node_already_exists.increment();<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        } else {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>          Long retry_count = (Long) ctx;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          LOG.warn("Create rc=" + KeeperException.Code.get(rc) + " for " + path<a name="line.597"></a>
-<span class="sourceLineNo">598</span>              + " remaining retries=" + retry_count);<a name="line.598"></a>
-<span class="sourceLineNo">599</span>          if (retry_count == 0) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>            SplitLogCounters.tot_mgr_node_create_err.increment();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>            createNodeFailure(path);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>          } else {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            SplitLogCounters.tot_mgr_node_create_retry.increment();<a name="line.603"></a>
-<span class="sourceLineNo">604</span>            createNode(path, retry_count - 1);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>          return;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      createNodeSuccess(path);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Asynchronous handler for zk get-data-set-watch on node results. Retries on failures.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   */<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  public class GetDataAsyncCallback implements AsyncCallback.DataCallback {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    private final Logger LOG = LoggerFactory.getLogger(GetDataAsyncCallback.class);<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>    @Override<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    public void processResult(int rc, String path, Object ctx, byte[] data, Stat stat) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      SplitLogCounters.tot_mgr_get_data_result.increment();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      if (rc != 0) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        if (needAbandonRetries(rc, "GetData from znode " + path)) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          return;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        }<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        if (rc == KeeperException.Code.NONODE.intValue()) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>          SplitLogCounters.tot_mgr_get_data_nonode.increment();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>          LOG.warn("Task znode " + path + " vanished or not created yet.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>          // ignore since we should not end up in a case where there is in-memory task,<a name="line.629"></a>
-<span class="sourceLineNo">630</span>          // but no znode. The only case is between the time task is created in-memory<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          // and the znode is created. See HBASE-11217.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          return;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>        Long retry_count = (Long) ctx;<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>        if (retry_count &lt; 0) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          LOG.warn("Getdata rc=" + KeeperException.Code.get(rc) + " " + path<a name="line.637"></a>
-<span class="sourceLineNo">638</span>              + ". Ignoring error. No error handling. No retrying.");<a name="line.638"></a>
-<span class="sourceLineNo">639</span>          return;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        LOG.warn("Getdata rc=" + KeeperException.Code.get(rc) + " " + path<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            + " remaining retries=" + retry_count);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        if (retry_count == 0) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>          SplitLogCounters.tot_mgr_get_data_err.increment();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>          getDataSetWatchFailure(path);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        } else {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          SplitLogCounters.tot_mgr_get_data_retry.increment();<a name="line.647"></a>
-<span class="sourceLineNo">648</span>          getDataSetWatch(path, retry_count - 1);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        }<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        return;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      }<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      try {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        getDataSetWatchSuccess(path, data, stat.getVersion());<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      } catch (DeserializationException e) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        LOG.warn("Deserialization problem", e);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      return;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span>  /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * Asynchronous handler for zk delete node results. Retries on failures.<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  public class DeleteAsyncCallback implements AsyncCallback.VoidCallback {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    private final Logger LOG = LoggerFactory.getLogger(DeleteAsyncCallback.class);<a name="line.665"></a>
-<span class="sourceLineNo">666</span><a name="line.666"></a>
-<span class="sourceLineNo">667</span>    @Override<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    public void processResult(int rc, String path, Object ctx) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      SplitLogCounters.tot_mgr_node_delete_result.increment();<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      if (rc != 0) {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        if (needAbandonRetries(rc, "Delete znode " + path)) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>          details.getFailedDeletions().add(path);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          return;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
-<span class="sourceLineNo">675</span>        if (rc != KeeperException.Code.NONODE.intValue()) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>          SplitLogCounters.tot_mgr_node_delete_err.increment();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>          Long retry_count = (Long) ctx;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          LOG.warn("Delete rc=" + KeeperException.Code.get(rc) + " for " + path<a name="line.678"></a>
-<span class="sourceLineNo">679</span>              + " remaining retries=" + retry_count);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>          if (retry_count == 0) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>            LOG.warn("Delete failed " + path);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>            details.getFailedDeletions().add(path);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>            deleteNodeFailure(path);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          } else {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>            deleteNode(path, retry_count - 1);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>          }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          return;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>        } else {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>          LOG.info(path + " does not exist. Either was created but deleted behind our"<a name="line.689"></a>
-<span class="sourceLineNo">690</span>              + " back by another pending delete OR was deleted"<a name="line.690"></a>
-<span class="sourceLineNo">691</span>              + " in earlier retry rounds. zkretries = " + ctx);<a name="line.691"></a>
-<span class="sourceLineNo">692</span>        }<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      } else {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>        LOG.debug("Deleted " + path);<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      }<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      deleteNodeSuccess(path);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  }<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>  /**<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * Asynchronous handler for zk create RESCAN-node results. Retries on failures.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   * &lt;p&gt;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   * A RESCAN node is created using PERSISTENT_SEQUENTIAL flag. It is a signal for all the<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * {@link org.apache.hadoop.hbase.regionserver.SplitLogWorker}s to rescan for new tasks.<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   */<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  public class CreateRescanAsyncCallback implements AsyncCallback.StringCallback {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    private final Logger LOG = LoggerFactory.getLogger(CreateRescanAsyncCallback.class);<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>    @Override<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    public void processResult(int rc, String path, Object ctx, String name) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      if (rc != 0) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>        if (needAbandonRetries(rc, "CreateRescan znode " + path)) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>          return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        }<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        Long retry_count = (Long) ctx;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        LOG.warn("rc=" + KeeperException.Code.get(rc) + " for " + path + " remaining retries="<a name="line.716"></a>
-<span class="sourceLineNo">717</span>            + retry_count);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        if (retry_count == 0) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          createRescanFailure();<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        } else {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          rescan(retry_count - 1);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        return;<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      }<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      // path is the original arg, name is the actual name that was created<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      createRescanSuccess(name);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  @Override<a name="line.730"></a>
-<span class="sourceLineNo">731</span>  public void setDetails(SplitLogManagerDetails details) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    this.details = details;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>  @Override<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  public SplitLogManagerDetails getDetails() {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return details;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Temporary function that is used by unit tests only<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   */<a name="line.742"></a>
-<span class="sourceLineNo">743</span>  @VisibleForTesting<a name="line.743"></a>
-<span class="sourceLineNo">744</span>  public void setIgnoreDeleteForTesting(boolean b) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    ignoreZKDeleteForTesting = b;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span>}<a name="line.747"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  @Override<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  public void checkTasks() {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    rescan(Long.MAX_VALUE);<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>   * signal the workers that a task was resubmitted by creating the RESCAN node.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  private void rescan(long retries) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    // The RESCAN node will be deleted almost immediately by the<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    // SplitLogManager as soon as it is created because it is being<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    // created in the DONE state. This behavior prevents a buildup<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    // of RESCAN nodes. But there is also a chance that a SplitLogWorker<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    // might miss the watch-trigger that creation of RESCAN node provides.<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    // Since the TimeoutMonitor will keep resubmitting UNASSIGNED tasks<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    // therefore this behavior is safe.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    SplitLogTask slt = new SplitLogTask.Done(this.details.getServerName());<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    this.watcher<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        .getRecoverableZooKeeper()<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        .getZooKeeper()<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        .create(ZKSplitLog.getRescanNode(watcher), slt.toByteArray(), Ids.OPEN_ACL_UNSAFE,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          CreateMode.EPHEMERAL_SEQUENTIAL, new CreateRescanAsyncCallback(), Long.valueOf(retries));<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  @Override<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  public void submitTask(String path) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    createNode(path, zkretries);<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>  public void checkTaskStillAvailable(String path) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    // A negative retry count will lead to ignoring all error processing.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    this.watcher<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .getRecoverableZooKeeper()<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        .getZooKeeper()<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        .getData(path, this.watcher, new GetDataAsyncCallback(),<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          Long.valueOf(-1) /* retry count */);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<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>  private void deleteNode(String path, Long retries) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    SplitLogCounters.tot_mgr_node_delete_queued.increment();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    // Once a task znode is ready for delete, that is it is in the TASK_DONE<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    // state, then no one should be writing to it anymore. That is no one<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    // will be updating the znode version any more.<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        .delete(path, -1, new DeleteAsyncCallback(), retries);<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>  private void deleteNodeSuccess(String path) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    if (ignoreZKDeleteForTesting) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      return;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Task task;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    task = details.getTasks().remove(path);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    if (task == null) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        SplitLogCounters.tot_mgr_rescan_deleted.increment();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      SplitLogCounters.tot_mgr_missing_state_in_delete.increment();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      LOG.debug("Deleted task without in memory state " + path);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      return;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    synchronized (task) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      task.status = DELETED;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      task.notify();<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    SplitLogCounters.tot_mgr_task_deleted.increment();<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>  private void deleteNodeFailure(String path) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    LOG.info("Failed to delete node " + path + " and will retry soon.");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return;<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>  private void createRescanSuccess(String path) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    SplitLogCounters.tot_mgr_rescan.increment();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    getDataSetWatch(path, zkretries);<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>  private void createRescanFailure() {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    LOG.error(HBaseMarkers.FATAL, "logic failure, rescan failure must not happen");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  /**<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * Helper function to check whether to abandon retries in ZooKeeper AsyncCallback functions<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * @param statusCode integer value of a ZooKeeper exception code<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * @param action description message about the retried action<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * @return true when need to abandon retries otherwise false<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  private boolean needAbandonRetries(int statusCode, String action) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    if (statusCode == KeeperException.Code.SESSIONEXPIRED.intValue()) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      LOG.error("ZK session expired. Master is expected to shut down. Abandoning retries for "<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          + "action=" + action);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      return true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    return false;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  private void createNode(String path, Long retry_count) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    SplitLogTask slt = new SplitLogTask.Unassigned(details.getServerName());<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    ZKUtil.asyncCreate(this.watcher, path, slt.toByteArray(), new CreateAsyncCallback(),<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      retry_count);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    SplitLogCounters.tot_mgr_node_create_queued.increment();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    return;<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>  private void createNodeSuccess(String path) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    LOG.debug("Put up splitlog task at znode " + path);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    getDataSetWatch(path, zkretries);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private void createNodeFailure(String path) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    // TODO the Manager should split the log locally instead of giving up<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    LOG.warn("Failed to create task node " + path);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    setDone(path, FAILURE);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>  }<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>  private void getDataSetWatch(String path, Long retry_count) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        .getData(path, this.watcher, new GetDataAsyncCallback(), retry_count);<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>  private void getDataSetWatchSuccess(String path, byte[] data, int version)<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throws DeserializationException {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    if (data == null) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      if (version == Integer.MIN_VALUE) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        // assume all done. The task znode suddenly disappeared.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        setDone(path, SUCCESS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        return;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      SplitLogCounters.tot_mgr_null_data.increment();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      LOG.error(HBaseMarkers.FATAL, "logic error - got null data " + path);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      setDone(path, FAILURE);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      return;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    data = ZKMetadata.removeMetaData(data);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    SplitLogTask slt = SplitLogTask.parseFrom(data);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    if (slt.isUnassigned()) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      LOG.debug("Task not yet acquired " + path + ", ver=" + version);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      handleUnassignedTask(path);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    } else if (slt.isOwned()) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      heartbeat(path, version, slt.getServerName());<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    } else if (slt.isResigned()) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      resubmitOrFail(path, FORCE);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    } else if (slt.isDone()) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      if (taskFinisher != null &amp;&amp; !ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        if (taskFinisher.finish(slt.getServerName(), ZKSplitLog.getFileName(path)) == Status.DONE) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>          setDone(path, SUCCESS);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        } else {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          resubmitOrFail(path, CHECK);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      } else {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        setDone(path, SUCCESS);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } else if (slt.isErr()) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      resubmitOrFail(path, CHECK);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    } else {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      LOG.error(HBaseMarkers.FATAL, "logic error - unexpected zk state for path = "<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          + path + " data = " + slt.toString());<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      setDone(path, FAILURE);<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>  private void resubmitOrFail(String path, ResubmitDirective directive) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    if (resubmitTask(path, findOrCreateOrphanTask(path), directive) == false) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      setDone(path, FAILURE);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private void getDataSetWatchFailure(String path) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    LOG.warn("Failed to set data watch " + path);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    setDone(path, FAILURE);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>  private void setDone(String path, TerminationStatus status) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    Task task = details.getTasks().get(path);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (task == null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (!ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        SplitLogCounters.tot_mgr_unacquired_orphan_done.increment();<a name="line.407"></a>
+<span class="sourceLineNo">

<TRUNCATED>

[31/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html
index 80259dd..ec465b9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html
@@ -130,629 +130,631 @@
 <span class="sourceLineNo">122</span>  public int remainingTasksInCoordination() {<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    int count = 0;<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    try {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      List&lt;String&gt; tasks = ZKUtil.listChildrenNoWatch(watcher, watcher.znodePaths.splitLogZNode);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      if (tasks != null) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        int listSize = tasks.size();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        for (int i = 0; i &lt; listSize; i++) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>          if (!ZKSplitLog.isRescanNode(tasks.get(i))) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>            count++;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>          }<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    } catch (KeeperException ke) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      LOG.warn("Failed to check remaining tasks", ke);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      count = -1;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    return count;<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>   * It is possible for a task to stay in UNASSIGNED state indefinitely - say SplitLogManager wants<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * to resubmit a task. It forces the task to UNASSIGNED state but it dies before it could create<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * the RESCAN task node to signal the SplitLogWorkers to pick up the task. To prevent this<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * scenario the SplitLogManager resubmits all orphan and UNASSIGNED tasks at startup.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @param path<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private void handleUnassignedTask(String path) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      return;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    Task task = findOrCreateOrphanTask(path);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    if (task.isOrphan() &amp;&amp; (task.incarnation.get() == 0)) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      LOG.info("Resubmitting unassigned orphan task " + path);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      // ignore failure to resubmit. The timeout-monitor will handle it later<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      // albeit in a more crude fashion<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      resubmitTask(path, task, FORCE);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void deleteTask(String path) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    deleteNode(path, zkretries);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public boolean resubmitTask(String path, Task task, ResubmitDirective directive) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    // its ok if this thread misses the update to task.deleted. It will fail later<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    if (task.status != IN_PROGRESS) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      return false;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    int version;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    if (directive != FORCE) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      // We're going to resubmit:<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      // 1) immediately if the worker server is now marked as dead<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      // 2) after a configurable timeout if the server is not marked as dead but has still not<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      // finished the task. This allows to continue if the worker cannot actually handle it,<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      // for any reason.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      final long time = EnvironmentEdgeManager.currentTime() - task.last_update;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      final boolean alive =<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          details.getMaster().getServerManager() != null ? details.getMaster().getServerManager()<a name="line.181"></a>
-<span class="sourceLineNo">182</span>              .isServerOnline(task.cur_worker_name) : true;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      if (alive &amp;&amp; time &lt; timeout) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        LOG.trace("Skipping the resubmit of " + task.toString() + "  because the server "<a name="line.184"></a>
-<span class="sourceLineNo">185</span>            + task.cur_worker_name + " is not marked as dead, we waited for " + time<a name="line.185"></a>
-<span class="sourceLineNo">186</span>            + " while the timeout is " + timeout);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return false;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      if (task.unforcedResubmits.get() &gt;= resubmitThreshold) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        if (!task.resubmitThresholdReached) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          task.resubmitThresholdReached = true;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          SplitLogCounters.tot_mgr_resubmit_threshold_reached.increment();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>          LOG.info("Skipping resubmissions of task " + path + " because threshold "<a name="line.194"></a>
-<span class="sourceLineNo">195</span>              + resubmitThreshold + " reached");<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        return false;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // race with heartbeat() that might be changing last_version<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      version = task.last_version;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    } else {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      SplitLogCounters.tot_mgr_resubmit_force.increment();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      version = -1;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    LOG.info("Resubmitting task " + path);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    task.incarnation.incrementAndGet();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    boolean result = resubmit(path, version);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    if (!result) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return false;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    // don't count forced resubmits<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    if (directive != FORCE) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      task.unforcedResubmits.incrementAndGet();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    task.setUnassigned();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    rescan(Long.MAX_VALUE);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    SplitLogCounters.tot_mgr_resubmit.increment();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    return true;<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">125</span>      List&lt;String&gt; tasks = ZKUtil.listChildrenNoWatch(watcher,<a name="line.125"></a>
+<span class="sourceLineNo">126</span>              watcher.getZNodePaths().splitLogZNode);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      if (tasks != null) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        int listSize = tasks.size();<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        for (int i = 0; i &lt; listSize; i++) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>          if (!ZKSplitLog.isRescanNode(tasks.get(i))) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>            count++;<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>      }<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    } catch (KeeperException ke) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      LOG.warn("Failed to check remaining tasks", ke);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      count = -1;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    return count;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * It is possible for a task to stay in UNASSIGNED state indefinitely - say SplitLogManager wants<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * to resubmit a task. It forces the task to UNASSIGNED state but it dies before it could create<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * the RESCAN task node to signal the SplitLogWorkers to pick up the task. To prevent this<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * scenario the SplitLogManager resubmits all orphan and UNASSIGNED tasks at startup.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * @param path<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private void handleUnassignedTask(String path) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    Task task = findOrCreateOrphanTask(path);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    if (task.isOrphan() &amp;&amp; (task.incarnation.get() == 0)) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      LOG.info("Resubmitting unassigned orphan task " + path);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // ignore failure to resubmit. The timeout-monitor will handle it later<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // albeit in a more crude fashion<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      resubmitTask(path, task, FORCE);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void deleteTask(String path) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    deleteNode(path, zkretries);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  public boolean resubmitTask(String path, Task task, ResubmitDirective directive) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    // its ok if this thread misses the update to task.deleted. It will fail later<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    if (task.status != IN_PROGRESS) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      return false;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    int version;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    if (directive != FORCE) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      // We're going to resubmit:<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      // 1) immediately if the worker server is now marked as dead<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      // 2) after a configurable timeout if the server is not marked as dead but has still not<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      // finished the task. This allows to continue if the worker cannot actually handle it,<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      // for any reason.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      final long time = EnvironmentEdgeManager.currentTime() - task.last_update;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      final boolean alive =<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          details.getMaster().getServerManager() != null ? details.getMaster().getServerManager()<a name="line.182"></a>
+<span class="sourceLineNo">183</span>              .isServerOnline(task.cur_worker_name) : true;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      if (alive &amp;&amp; time &lt; timeout) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        LOG.trace("Skipping the resubmit of " + task.toString() + "  because the server "<a name="line.185"></a>
+<span class="sourceLineNo">186</span>            + task.cur_worker_name + " is not marked as dead, we waited for " + time<a name="line.186"></a>
+<span class="sourceLineNo">187</span>            + " while the timeout is " + timeout);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        return false;<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>      if (task.unforcedResubmits.get() &gt;= resubmitThreshold) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        if (!task.resubmitThresholdReached) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          task.resubmitThresholdReached = true;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          SplitLogCounters.tot_mgr_resubmit_threshold_reached.increment();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          LOG.info("Skipping resubmissions of task " + path + " because threshold "<a name="line.195"></a>
+<span class="sourceLineNo">196</span>              + resubmitThreshold + " reached");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        }<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>      // race with heartbeat() that might be changing last_version<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      version = task.last_version;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } else {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      SplitLogCounters.tot_mgr_resubmit_force.increment();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      version = -1;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    LOG.info("Resubmitting task " + path);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    task.incarnation.incrementAndGet();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    boolean result = resubmit(path, version);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    if (!result) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return false;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // don't count forced resubmits<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    if (directive != FORCE) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      task.unforcedResubmits.incrementAndGet();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    task.setUnassigned();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    rescan(Long.MAX_VALUE);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    SplitLogCounters.tot_mgr_resubmit.increment();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    return true;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
 <span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  @Override<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  public void checkTasks() {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    rescan(Long.MAX_VALUE);<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>   * signal the workers that a task was resubmitted by creating the RESCAN node.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  private void rescan(long retries) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    // The RESCAN node will be deleted almost immediately by the<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    // SplitLogManager as soon as it is created because it is being<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    // created in the DONE state. This behavior prevents a buildup<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    // of RESCAN nodes. But there is also a chance that a SplitLogWorker<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    // might miss the watch-trigger that creation of RESCAN node provides.<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    // Since the TimeoutMonitor will keep resubmitting UNASSIGNED tasks<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    // therefore this behavior is safe.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    SplitLogTask slt = new SplitLogTask.Done(this.details.getServerName());<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    this.watcher<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        .getRecoverableZooKeeper()<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        .getZooKeeper()<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        .create(ZKSplitLog.getRescanNode(watcher), slt.toByteArray(), Ids.OPEN_ACL_UNSAFE,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          CreateMode.EPHEMERAL_SEQUENTIAL, new CreateRescanAsyncCallback(), Long.valueOf(retries));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  @Override<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public void submitTask(String path) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    createNode(path, zkretries);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  }<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>  @Override<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void checkTaskStillAvailable(String path) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // A negative retry count will lead to ignoring all error processing.<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    this.watcher<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        .getRecoverableZooKeeper()<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        .getZooKeeper()<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        .getData(path, this.watcher, new GetDataAsyncCallback(),<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          Long.valueOf(-1) /* retry count */);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private void deleteNode(String path, Long retries) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    SplitLogCounters.tot_mgr_node_delete_queued.increment();<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // Once a task znode is ready for delete, that is it is in the TASK_DONE<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    // state, then no one should be writing to it anymore. That is no one<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    // will be updating the znode version any more.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        .delete(path, -1, new DeleteAsyncCallback(), retries);<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>  private void deleteNodeSuccess(String path) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (ignoreZKDeleteForTesting) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    Task task;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    task = details.getTasks().remove(path);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    if (task == null) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        SplitLogCounters.tot_mgr_rescan_deleted.increment();<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      SplitLogCounters.tot_mgr_missing_state_in_delete.increment();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      LOG.debug("Deleted task without in memory state " + path);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      return;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    synchronized (task) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      task.status = DELETED;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      task.notify();<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    SplitLogCounters.tot_mgr_task_deleted.increment();<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>  private void deleteNodeFailure(String path) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    LOG.info("Failed to delete node " + path + " and will retry soon.");<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  private void createRescanSuccess(String path) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    SplitLogCounters.tot_mgr_rescan.increment();<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    getDataSetWatch(path, zkretries);<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>  private void createRescanFailure() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    LOG.error(HBaseMarkers.FATAL, "logic failure, rescan failure must not happen");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>  /**<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * Helper function to check whether to abandon retries in ZooKeeper AsyncCallback functions<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * @param statusCode integer value of a ZooKeeper exception code<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * @param action description message about the retried action<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return true when need to abandon retries otherwise false<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  private boolean needAbandonRetries(int statusCode, String action) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    if (statusCode == KeeperException.Code.SESSIONEXPIRED.intValue()) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      LOG.error("ZK session expired. Master is expected to shut down. Abandoning retries for "<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          + "action=" + action);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return true;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return false;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private void createNode(String path, Long retry_count) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    SplitLogTask slt = new SplitLogTask.Unassigned(details.getServerName());<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    ZKUtil.asyncCreate(this.watcher, path, slt.toByteArray(), new CreateAsyncCallback(),<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      retry_count);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    SplitLogCounters.tot_mgr_node_create_queued.increment();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private void createNodeSuccess(String path) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    LOG.debug("Put up splitlog task at znode " + path);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    getDataSetWatch(path, zkretries);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  private void createNodeFailure(String path) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    // TODO the Manager should split the log locally instead of giving up<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    LOG.warn("Failed to create task node " + path);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    setDone(path, FAILURE);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  private void getDataSetWatch(String path, Long retry_count) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        .getData(path, this.watcher, new GetDataAsyncCallback(), retry_count);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  private void getDataSetWatchSuccess(String path, byte[] data, int version)<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      throws DeserializationException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    if (data == null) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      if (version == Integer.MIN_VALUE) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        // assume all done. The task znode suddenly disappeared.<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        setDone(path, SUCCESS);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        return;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      SplitLogCounters.tot_mgr_null_data.increment();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      LOG.error(HBaseMarkers.FATAL, "logic error - got null data " + path);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      setDone(path, FAILURE);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      return;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    data = ZKMetadata.removeMetaData(data);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    SplitLogTask slt = SplitLogTask.parseFrom(data);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    if (slt.isUnassigned()) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      LOG.debug("Task not yet acquired " + path + ", ver=" + version);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      handleUnassignedTask(path);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    } else if (slt.isOwned()) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      heartbeat(path, version, slt.getServerName());<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    } else if (slt.isResigned()) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      resubmitOrFail(path, FORCE);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    } else if (slt.isDone()) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      if (taskFinisher != null &amp;&amp; !ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        if (taskFinisher.finish(slt.getServerName(), ZKSplitLog.getFileName(path)) == Status.DONE) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          setDone(path, SUCCESS);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        } else {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          resubmitOrFail(path, CHECK);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      } else {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        setDone(path, SUCCESS);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } else if (slt.isErr()) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      resubmitOrFail(path, CHECK);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } else {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.error(HBaseMarkers.FATAL, "logic error - unexpected zk state for path = "<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          + path + " data = " + slt.toString());<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      setDone(path, FAILURE);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  private void resubmitOrFail(String path, ResubmitDirective directive) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    if (resubmitTask(path, findOrCreateOrphanTask(path), directive) == false) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      setDone(path, FAILURE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  private void getDataSetWatchFailure(String path) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    LOG.warn("Failed to set data watch " + path);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    setDone(path, FAILURE);<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>  private void setDone(String path, TerminationStatus status) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    Task task = details.getTasks().get(path);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    if (task == null) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      if (!ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        SplitLogCounters.tot_mgr_unacquired_orphan_done.increment();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.debug("Unacquired orphan task is done " + path);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    } else {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      synchronized (task) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        if (task.status == IN_PROGRESS) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          if (status == SUCCESS) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            SplitLogCounters.tot_mgr_log_split_success.increment();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            LOG.info("Done splitting " + path);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>          } else {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            SplitLogCounters.tot_mgr_log_split_err.increment();<a name="line.416"></a>
-<span class="sourceLineNo">417</span>            LOG.warn("Error splitting " + path);<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          }<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          task.status = status;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          if (task.batch != null) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>            synchronized (task.batch) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>              if (status == SUCCESS) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>                task.batch.done++;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>              } else {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>                task.batch.error++;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>              }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>              task.batch.notify();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>            }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    // delete the task node in zk. It's an async<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // call and no one is blocked waiting for this node to be deleted. All<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    // task names are unique (log.&lt;timestamp&gt;) there is no risk of deleting<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    // a future task.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    // if a deletion fails, TimeoutMonitor will retry the same deletion later<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    deleteNode(path, zkretries);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    return;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>  }<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  private Task findOrCreateOrphanTask(String path) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return computeIfAbsent(details.getTasks(), path, Task::new, () -&gt; {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      LOG.info("Creating orphan task " + path);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      SplitLogCounters.tot_mgr_orphan_task_acquired.increment();<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    });<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private void heartbeat(String path, int new_version, ServerName workerName) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Task task = findOrCreateOrphanTask(path);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (new_version != task.last_version) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      if (task.isUnassigned()) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        LOG.info("Task " + path + " acquired by " + workerName);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      task.heartbeat(EnvironmentEdgeManager.currentTime(), new_version, workerName);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      SplitLogCounters.tot_mgr_heartbeat.increment();<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    } else {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // duplicate heartbeats - heartbeats w/o zk node version<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      // changing - are possible. The timeout thread does<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // getDataSetWatch() just to check whether a node still<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // exists or not<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private void lookForOrphans() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    List&lt;String&gt; orphans;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    try {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      orphans = ZKUtil.listChildrenNoWatch(this.watcher, this.watcher.znodePaths.splitLogZNode);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      if (orphans == null) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        LOG.warn("Could not get children of " + this.watcher.znodePaths.splitLogZNode);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        return;<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    } catch (KeeperException e) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      LOG.warn("Could not get children of " + this.watcher.znodePaths.splitLogZNode + " "<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          + StringUtils.stringifyException(e));<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    int rescan_nodes = 0;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    int listSize = orphans.size();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    for (int i = 0; i &lt; listSize; i++) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      String path = orphans.get(i);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      String nodepath = ZNodePaths.joinZNode(watcher.znodePaths.splitLogZNode, path);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      if (ZKSplitLog.isRescanNode(watcher, nodepath)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        rescan_nodes++;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        LOG.debug("Found orphan rescan node " + path);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        LOG.info("Found orphan task " + path);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      getDataSetWatch(nodepath, zkretries);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    LOG.info("Found " + (orphans.size() - rescan_nodes) + " orphan tasks and " + rescan_nodes<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        + " rescan nodes");<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  @Override<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public void nodeDataChanged(String path) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Task task;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    task = details.getTasks().get(path);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (task != null || ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      if (task != null) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      getDataSetWatch(path, zkretries);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>  }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>  private boolean resubmit(String path, int version) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    try {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      // blocking zk call but this is done from the timeout thread<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      SplitLogTask slt =<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          new SplitLogTask.Unassigned(this.details.getServerName());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (ZKUtil.setData(this.watcher, path, slt.toByteArray(), version) == false) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        LOG.debug("Failed to resubmit task " + path + " version changed");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return false;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    } catch (NoNodeException e) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.warn("Failed to resubmit because znode doesn't exist " + path<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          + " task done (or forced done by removing the znode)");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      try {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        getDataSetWatchSuccess(path, null, Integer.MIN_VALUE);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      } catch (DeserializationException e1) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        LOG.debug("Failed to re-resubmit task " + path + " because of deserialization issue", e1);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        return false;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      return false;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    } catch (KeeperException.BadVersionException e) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      LOG.debug("Failed to resubmit task " + path + " version changed");<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return false;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    } catch (KeeperException e) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      SplitLogCounters.tot_mgr_resubmit_failed.increment();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      LOG.warn("Failed to resubmit " + path, e);<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      return false;<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    return true;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * {@link org.apache.hadoop.hbase.master.SplitLogManager} can use objects implementing this<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   * interface to finish off a partially done task by<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * {@link org.apache.hadoop.hbase.regionserver.SplitLogWorker}. This provides a<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * serialization point at the end of the task processing. Must be restartable and idempotent.<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   */<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public interface TaskFinisher {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>     * status that can be returned finish()<a name="line.547"></a>
-<span class="sourceLineNo">548</span>     */<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    enum Status {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span>       * task completed successfully<a name="line.551"></a>
-<span class="sourceLineNo">552</span>       */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      DONE(),<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>       * task completed with error<a name="line.555"></a>
-<span class="sourceLineNo">556</span>       */<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      ERR()<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    /**<a name="line.560"></a>
-<span class="sourceLineNo">561</span>     * finish the partially done task. workername provides clue to where the partial results of the<a name="line.561"></a>
-<span class="sourceLineNo">562</span>     * partially done tasks are present. taskname is the name of the task that was put up in<a name="line.562"></a>
-<span class="sourceLineNo">563</span>     * zookeeper.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>     * &lt;p&gt;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>     * @param workerName<a name="line.565"></a>
-<span class="sourceLineNo">566</span>     * @param taskname<a name="line.566"></a>
-<span class="sourceLineNo">567</span>     * @return DONE if task completed successfully, ERR otherwise<a name="line.567"></a>
-<span class="sourceLineNo">568</span>     */<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    Status finish(ServerName workerName, String taskname);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>  /**<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   * Asynchronous handler for zk create node results. Retries on failures.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   */<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  public class CreateAsyncCallback implements AsyncCallback.StringCallback {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    private final Logger LOG = LoggerFactory.getLogger(CreateAsyncCallback.class);<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    public void processResult(int rc, String path, Object ctx, String name) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      SplitLogCounters.tot_mgr_node_create_result.increment();<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      if (rc != 0) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        if (needAbandonRetries(rc, "Create znode " + path)) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>          createNodeFailure(path);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>          return;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>        if (rc == KeeperException.Code.NODEEXISTS.intValue()) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>          // What if there is a delete pending against this pre-existing<a name="line.587"></a>
-<span class="sourceLineNo">588</span>          // znode? Then this soon-to-be-deleted task znode must be in TASK_DONE<a name="line.588"></a>
-<span class="sourceLineNo">589</span>          // state. Only operations that will be carried out on this node by<a name="line.589"></a>
-<span class="sourceLineNo">590</span>          // this manager are get-znode-data, task-finisher and delete-znode.<a name="line.590"></a>
-<span class="sourceLineNo">591</span>          // And all code pieces correctly handle the case of suddenly<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          // disappearing task-znode.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>          LOG.debug("Found pre-existing znode " + path);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>          SplitLogCounters.tot_mgr_node_already_exists.increment();<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        } else {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>          Long retry_count = (Long) ctx;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          LOG.warn("Create rc=" + KeeperException.Code.get(rc) + " for " + path<a name="line.597"></a>
-<span class="sourceLineNo">598</span>              + " remaining retries=" + retry_count);<a name="line.598"></a>
-<span class="sourceLineNo">599</span>          if (retry_count == 0) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>            SplitLogCounters.tot_mgr_node_create_err.increment();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>            createNodeFailure(path);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>          } else {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            SplitLogCounters.tot_mgr_node_create_retry.increment();<a name="line.603"></a>
-<span class="sourceLineNo">604</span>            createNode(path, retry_count - 1);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>          return;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      createNodeSuccess(path);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Asynchronous handler for zk get-data-set-watch on node results. Retries on failures.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   */<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  public class GetDataAsyncCallback implements AsyncCallback.DataCallback {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    private final Logger LOG = LoggerFactory.getLogger(GetDataAsyncCallback.class);<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>    @Override<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    public void processResult(int rc, String path, Object ctx, byte[] data, Stat stat) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      SplitLogCounters.tot_mgr_get_data_result.increment();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      if (rc != 0) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        if (needAbandonRetries(rc, "GetData from znode " + path)) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          return;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        }<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        if (rc == KeeperException.Code.NONODE.intValue()) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>          SplitLogCounters.tot_mgr_get_data_nonode.increment();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>          LOG.warn("Task znode " + path + " vanished or not created yet.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>          // ignore since we should not end up in a case where there is in-memory task,<a name="line.629"></a>
-<span class="sourceLineNo">630</span>          // but no znode. The only case is between the time task is created in-memory<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          // and the znode is created. See HBASE-11217.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          return;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>        Long retry_count = (Long) ctx;<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>        if (retry_count &lt; 0) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          LOG.warn("Getdata rc=" + KeeperException.Code.get(rc) + " " + path<a name="line.637"></a>
-<span class="sourceLineNo">638</span>              + ". Ignoring error. No error handling. No retrying.");<a name="line.638"></a>
-<span class="sourceLineNo">639</span>          return;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        LOG.warn("Getdata rc=" + KeeperException.Code.get(rc) + " " + path<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            + " remaining retries=" + retry_count);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        if (retry_count == 0) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>          SplitLogCounters.tot_mgr_get_data_err.increment();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>          getDataSetWatchFailure(path);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        } else {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          SplitLogCounters.tot_mgr_get_data_retry.increment();<a name="line.647"></a>
-<span class="sourceLineNo">648</span>          getDataSetWatch(path, retry_count - 1);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        }<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        return;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      }<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      try {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        getDataSetWatchSuccess(path, data, stat.getVersion());<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      } catch (DeserializationException e) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        LOG.warn("Deserialization problem", e);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      return;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span>  /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * Asynchronous handler for zk delete node results. Retries on failures.<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  public class DeleteAsyncCallback implements AsyncCallback.VoidCallback {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    private final Logger LOG = LoggerFactory.getLogger(DeleteAsyncCallback.class);<a name="line.665"></a>
-<span class="sourceLineNo">666</span><a name="line.666"></a>
-<span class="sourceLineNo">667</span>    @Override<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    public void processResult(int rc, String path, Object ctx) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      SplitLogCounters.tot_mgr_node_delete_result.increment();<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      if (rc != 0) {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        if (needAbandonRetries(rc, "Delete znode " + path)) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>          details.getFailedDeletions().add(path);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          return;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
-<span class="sourceLineNo">675</span>        if (rc != KeeperException.Code.NONODE.intValue()) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>          SplitLogCounters.tot_mgr_node_delete_err.increment();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>          Long retry_count = (Long) ctx;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          LOG.warn("Delete rc=" + KeeperException.Code.get(rc) + " for " + path<a name="line.678"></a>
-<span class="sourceLineNo">679</span>              + " remaining retries=" + retry_count);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>          if (retry_count == 0) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>            LOG.warn("Delete failed " + path);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>            details.getFailedDeletions().add(path);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>            deleteNodeFailure(path);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          } else {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>            deleteNode(path, retry_count - 1);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>          }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          return;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>        } else {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>          LOG.info(path + " does not exist. Either was created but deleted behind our"<a name="line.689"></a>
-<span class="sourceLineNo">690</span>              + " back by another pending delete OR was deleted"<a name="line.690"></a>
-<span class="sourceLineNo">691</span>              + " in earlier retry rounds. zkretries = " + ctx);<a name="line.691"></a>
-<span class="sourceLineNo">692</span>        }<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      } else {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>        LOG.debug("Deleted " + path);<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      }<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      deleteNodeSuccess(path);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  }<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>  /**<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * Asynchronous handler for zk create RESCAN-node results. Retries on failures.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   * &lt;p&gt;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   * A RESCAN node is created using PERSISTENT_SEQUENTIAL flag. It is a signal for all the<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * {@link org.apache.hadoop.hbase.regionserver.SplitLogWorker}s to rescan for new tasks.<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   */<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  public class CreateRescanAsyncCallback implements AsyncCallback.StringCallback {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    private final Logger LOG = LoggerFactory.getLogger(CreateRescanAsyncCallback.class);<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>    @Override<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    public void processResult(int rc, String path, Object ctx, String name) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      if (rc != 0) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>        if (needAbandonRetries(rc, "CreateRescan znode " + path)) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>          return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        }<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        Long retry_count = (Long) ctx;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        LOG.warn("rc=" + KeeperException.Code.get(rc) + " for " + path + " remaining retries="<a name="line.716"></a>
-<span class="sourceLineNo">717</span>            + retry_count);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        if (retry_count == 0) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          createRescanFailure();<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        } else {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          rescan(retry_count - 1);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        return;<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      }<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      // path is the original arg, name is the actual name that was created<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      createRescanSuccess(name);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  @Override<a name="line.730"></a>
-<span class="sourceLineNo">731</span>  public void setDetails(SplitLogManagerDetails details) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    this.details = details;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>  @Override<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  public SplitLogManagerDetails getDetails() {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return details;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Temporary function that is used by unit tests only<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   */<a name="line.742"></a>
-<span class="sourceLineNo">743</span>  @VisibleForTesting<a name="line.743"></a>
-<span class="sourceLineNo">744</span>  public void setIgnoreDeleteForTesting(boolean b) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    ignoreZKDeleteForTesting = b;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span>}<a name="line.747"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  @Override<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  public void checkTasks() {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    rescan(Long.MAX_VALUE);<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>   * signal the workers that a task was resubmitted by creating the RESCAN node.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  private void rescan(long retries) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    // The RESCAN node will be deleted almost immediately by the<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    // SplitLogManager as soon as it is created because it is being<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    // created in the DONE state. This behavior prevents a buildup<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    // of RESCAN nodes. But there is also a chance that a SplitLogWorker<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    // might miss the watch-trigger that creation of RESCAN node provides.<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    // Since the TimeoutMonitor will keep resubmitting UNASSIGNED tasks<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    // therefore this behavior is safe.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    SplitLogTask slt = new SplitLogTask.Done(this.details.getServerName());<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    this.watcher<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        .getRecoverableZooKeeper()<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        .getZooKeeper()<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        .create(ZKSplitLog.getRescanNode(watcher), slt.toByteArray(), Ids.OPEN_ACL_UNSAFE,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          CreateMode.EPHEMERAL_SEQUENTIAL, new CreateRescanAsyncCallback(), Long.valueOf(retries));<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  @Override<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  public void submitTask(String path) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    createNode(path, zkretries);<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>  public void checkTaskStillAvailable(String path) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    // A negative retry count will lead to ignoring all error processing.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    this.watcher<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .getRecoverableZooKeeper()<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        .getZooKeeper()<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        .getData(path, this.watcher, new GetDataAsyncCallback(),<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          Long.valueOf(-1) /* retry count */);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<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>  private void deleteNode(String path, Long retries) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    SplitLogCounters.tot_mgr_node_delete_queued.increment();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    // Once a task znode is ready for delete, that is it is in the TASK_DONE<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    // state, then no one should be writing to it anymore. That is no one<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    // will be updating the znode version any more.<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        .delete(path, -1, new DeleteAsyncCallback(), retries);<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>  private void deleteNodeSuccess(String path) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    if (ignoreZKDeleteForTesting) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      return;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Task task;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    task = details.getTasks().remove(path);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    if (task == null) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        SplitLogCounters.tot_mgr_rescan_deleted.increment();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      SplitLogCounters.tot_mgr_missing_state_in_delete.increment();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      LOG.debug("Deleted task without in memory state " + path);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      return;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    synchronized (task) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      task.status = DELETED;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      task.notify();<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    SplitLogCounters.tot_mgr_task_deleted.increment();<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>  private void deleteNodeFailure(String path) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    LOG.info("Failed to delete node " + path + " and will retry soon.");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return;<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>  private void createRescanSuccess(String path) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    SplitLogCounters.tot_mgr_rescan.increment();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    getDataSetWatch(path, zkretries);<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>  private void createRescanFailure() {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    LOG.error(HBaseMarkers.FATAL, "logic failure, rescan failure must not happen");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  /**<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * Helper function to check whether to abandon retries in ZooKeeper AsyncCallback functions<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * @param statusCode integer value of a ZooKeeper exception code<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * @param action description message about the retried action<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * @return true when need to abandon retries otherwise false<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  private boolean needAbandonRetries(int statusCode, String action) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    if (statusCode == KeeperException.Code.SESSIONEXPIRED.intValue()) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      LOG.error("ZK session expired. Master is expected to shut down. Abandoning retries for "<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          + "action=" + action);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      return true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    return false;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  private void createNode(String path, Long retry_count) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    SplitLogTask slt = new SplitLogTask.Unassigned(details.getServerName());<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    ZKUtil.asyncCreate(this.watcher, path, slt.toByteArray(), new CreateAsyncCallback(),<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      retry_count);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    SplitLogCounters.tot_mgr_node_create_queued.increment();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    return;<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>  private void createNodeSuccess(String path) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    LOG.debug("Put up splitlog task at znode " + path);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    getDataSetWatch(path, zkretries);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private void createNodeFailure(String path) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    // TODO the Manager should split the log locally instead of giving up<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    LOG.warn("Failed to create task node " + path);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    setDone(path, FAILURE);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>  }<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>  private void getDataSetWatch(String path, Long retry_count) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        .getData(path, this.watcher, new GetDataAsyncCallback(), retry_count);<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>  private void getDataSetWatchSuccess(String path, byte[] data, int version)<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throws DeserializationException {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    if (data == null) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      if (version == Integer.MIN_VALUE) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        // assume all done. The task znode suddenly disappeared.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        setDone(path, SUCCESS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        return;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      SplitLogCounters.tot_mgr_null_data.increment();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      LOG.error(HBaseMarkers.FATAL, "logic error - got null data " + path);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      setDone(path, FAILURE);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      return;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    data = ZKMetadata.removeMetaData(data);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    SplitLogTask slt = SplitLogTask.parseFrom(data);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    if (slt.isUnassigned()) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      LOG.debug("Task not yet acquired " + path + ", ver=" + version);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      handleUnassignedTask(path);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    } else if (slt.isOwned()) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      heartbeat(path, version, slt.getServerName());<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    } else if (slt.isResigned()) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      resubmitOrFail(path, FORCE);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    } else if (slt.isDone()) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      if (taskFinisher != null &amp;&amp; !ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        if (taskFinisher.finish(slt.getServerName(), ZKSplitLog.getFileName(path)) == Status.DONE) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>          setDone(path, SUCCESS);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        } else {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          resubmitOrFail(path, CHECK);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      } else {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        setDone(path, SUCCESS);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } else if (slt.isErr()) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      resubmitOrFail(path, CHECK);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    } else {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      LOG.error(HBaseMarkers.FATAL, "logic error - unexpected zk state for path = "<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          + path + " data = " + slt.toString());<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      setDone(path, FAILURE);<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>  private void resubmitOrFail(String path, ResubmitDirective directive) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    if (resubmitTask(path, findOrCreateOrphanTask(path), directive) == false) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      setDone(path, FAILURE);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private void getDataSetWatchFailure(String path) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    LOG.warn("Failed to set data watch " + path);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    setDone(path, FAILURE);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>  private void setDone(String path, TerminationStatus status) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    Task task = details.getTasks().get(path);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (task == null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (!ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        SplitLogCounters.tot_mgr_unacquired_orphan_done.increment();<a name="line.407

<TRUNCATED>

[36/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.html b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.html
index 68575b6..5832df4 100644
--- a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.html
+++ b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.html
@@ -2044,7 +2044,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationZnodesDump</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1800">getReplicationZnodesDump</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1801">getReplicationZnodesDump</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)
                                       throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Appends replication znodes to the passed StringBuilder.</div>
@@ -2063,7 +2063,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>appendHFileRefsZnodes</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1823">appendHFileRefsZnodes</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1824">appendHFileRefsZnodes</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                           <a href="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;hfileRefsZnode,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)
                                    throws org.apache.zookeeper.KeeperException</pre>
@@ -2079,7 +2079,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationZnodesDump</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1845">getReplicationZnodesDump</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw)
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1846">getReplicationZnodesDump</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw)
                                        throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Returns a string with replication znodes and position of the replication log</div>
 <dl>
@@ -2098,7 +2098,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>appendRSZnodes</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1851">appendRSZnodes</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1852">appendRSZnodes</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                    <a href="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;znode,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)
                             throws org.apache.zookeeper.KeeperException</pre>
@@ -2114,7 +2114,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>appendPeersZnodes</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1882">appendPeersZnodes</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1883">appendPeersZnodes</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                       <a href="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;peersZnode,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)
                                throws org.apache.zookeeper.KeeperException</pre>
@@ -2130,7 +2130,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>appendPeerState</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1910">appendPeerState</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1911">appendPeerState</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                     <a href="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;znodeToProcess,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)
                              throws org.apache.zookeeper.KeeperException,
@@ -2148,7 +2148,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerStats</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1946">getServerStats</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;server,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1947">getServerStats</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;server,
                                       int&nbsp;timeout)
                                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">Gets the statistics from the given server.</div>
@@ -2169,7 +2169,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>logRetrievedMsg</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1982">logRetrievedMsg</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1983">logRetrievedMsg</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                     <a href="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;znode,
                                     byte[]&nbsp;data,
                                     boolean&nbsp;watcherSet)</pre>
@@ -2181,7 +2181,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerNameOrEmptyString</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1999">getServerNameOrEmptyString</a>(byte[]&nbsp;data)</pre>
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2000">getServerNameOrEmptyString</a>(byte[]&nbsp;data)</pre>
 </li>
 </ul>
 <a name="waitForBaseZNode-org.apache.hadoop.conf.Configuration-">
@@ -2190,7 +2190,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForBaseZNode</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2011">waitForBaseZNode</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2012">waitForBaseZNode</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Waits for HBase installation's base (parent) znode to become available.</div>
 <dl>
@@ -2205,7 +2205,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>convert</h4>
-<pre>public static&nbsp;org.apache.zookeeper.KeeperException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2055">convert</a>(<a href="../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a>&nbsp;e)</pre>
+<pre>public static&nbsp;org.apache.zookeeper.KeeperException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2056">convert</a>(<a href="../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a>&nbsp;e)</pre>
 <div class="block">Convert a <a href="../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions"><code>DeserializationException</code></a> to a more palatable <code>KeeperException</code>.
  Used when can't let a <a href="../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions"><code>DeserializationException</code></a> out w/o changing public API.</div>
 <dl>
@@ -2222,7 +2222,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>logZKTree</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2065">logZKTree</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2066">logZKTree</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                              <a href="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;root)</pre>
 <div class="block">Recursively print the current state of ZK (non-transactional)</div>
 <dl>
@@ -2237,7 +2237,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>logZKTree</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2085">logZKTree</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2086">logZKTree</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                 <a href="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;root,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;prefix)
                          throws org.apache.zookeeper.KeeperException</pre>
@@ -2256,7 +2256,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>positionToByteArray</h4>
-<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2105">positionToByteArray</a>(long&nbsp;position)</pre>
+<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2106">positionToByteArray</a>(long&nbsp;position)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>position</code> - the position to serialize</dd>
@@ -2272,7 +2272,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>parseWALPositionFrom</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2116">parseWALPositionFrom</a>(byte[]&nbsp;bytes)
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2117">parseWALPositionFrom</a>(byte[]&nbsp;bytes)
                                  throws <a href="../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a></pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html
index fb9a5c8..c4df8e7 100644
--- a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html
+++ b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html
@@ -200,11 +200,11 @@ implements org.apache.zookeeper.Watcher, <a href="../../../../../org/apache/hado
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#recoverableZooKeeper">recoverableZooKeeper</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a></code></td>
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#saslLatch">saslLatch</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZNodePaths.html" title="class in org.apache.hadoop.hbase.zookeeper">ZNodePaths</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZNodePaths.html" title="class in org.apache.hadoop.hbase.zookeeper">ZNodePaths</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#znodePaths">znodePaths</a></span></code>&nbsp;</td>
 </tr>
 </table>
@@ -515,7 +515,7 @@ implements org.apache.zookeeper.Watcher, <a href="../../../../../org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>znodePaths</h4>
-<pre>public final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZNodePaths.html" title="class in org.apache.hadoop.hbase.zookeeper">ZNodePaths</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.79">znodePaths</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZNodePaths.html" title="class in org.apache.hadoop.hbase.zookeeper">ZNodePaths</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.79">znodePaths</a></pre>
 </li>
 </ul>
 <a name="listeners">
@@ -533,7 +533,7 @@ implements org.apache.zookeeper.Watcher, <a href="../../../../../org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>saslLatch</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.86">saslLatch</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.86">saslLatch</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -580,7 +580,7 @@ implements org.apache.zookeeper.Watcher, <a href="../../../../../org/apache/hado
                    identifier for this instance. Use null for default.</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - if the connection to ZooKeeper fails</dd>
-<dd><code><a href="../../../../../org/apache/hadoop/hbase/ZooKeeperConnectionException.html" title="class in org.apache.hadoop.hbase">ZooKeeperConnectionException</a></code></dd>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/ZooKeeperConnectionException.html" title="class in org.apache.hadoop.hbase">ZooKeeperConnectionException</a></code> - if the client can't connect to ZooKeeper</dd>
 </dl>
 </li>
 </ul>
@@ -607,7 +607,7 @@ implements org.apache.zookeeper.Watcher, <a href="../../../../../org/apache/hado
 <dd><code>canCreateBaseZNode</code> - true if a base ZNode can be created</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - if the connection to ZooKeeper fails</dd>
-<dd><code><a href="../../../../../org/apache/hadoop/hbase/ZooKeeperConnectionException.html" title="class in org.apache.hadoop.hbase">ZooKeeperConnectionException</a></code></dd>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/ZooKeeperConnectionException.html" title="class in org.apache.hadoop.hbase">ZooKeeperConnectionException</a></code> - if the client can't connect to ZooKeeper</dd>
 </dl>
 </li>
 </ul>
@@ -934,7 +934,7 @@ implements org.apache.zookeeper.Watcher, <a href="../../../../../org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>connectionEvent</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.535">connectionEvent</a>(org.apache.zookeeper.WatchedEvent&nbsp;event)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.537">connectionEvent</a>(org.apache.zookeeper.WatchedEvent&nbsp;event)</pre>
 <div class="block">Called when there is a connection-related event via the Watcher callback.
  <p>
  If Disconnected or Expired, this should shutdown the cluster. But, since
@@ -954,7 +954,7 @@ implements org.apache.zookeeper.Watcher, <a href="../../../../../org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>sync</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.581">sync</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;path)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.583">sync</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;path)
           throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Forces a synchronization of this ZooKeeper client connection.
  <p>
@@ -978,7 +978,7 @@ implements org.apache.zookeeper.Watcher, <a href="../../../../../org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>keeperException</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.595">keeperException</a>(org.apache.zookeeper.KeeperException&nbsp;ke)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.597">keeperException</a>(org.apache.zookeeper.KeeperException&nbsp;ke)
                      throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Handles KeeperExceptions in client calls.
  <p>
@@ -1000,7 +1000,7 @@ implements org.apache.zookeeper.Watcher, <a href="../../../../../org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>interruptedException</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.605">interruptedException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>&nbsp;ie)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.607">interruptedException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>&nbsp;ie)
                           throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Handles InterruptedExceptions in client calls.</div>
 <dl>
@@ -1017,7 +1017,7 @@ implements org.apache.zookeeper.Watcher, <a href="../../../../../org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>interruptedExceptionNoThrow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.616">interruptedExceptionNoThrow</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>&nbsp;ie,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.618">interruptedExceptionNoThrow</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>&nbsp;ie,
                                         boolean&nbsp;throwLater)</pre>
 <div class="block">Log the InterruptedException and interrupt current thread</div>
 <dl>
@@ -1033,7 +1033,7 @@ implements org.apache.zookeeper.Watcher, <a href="../../../../../org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.629">close</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.631">close</a>()</pre>
 <div class="block">Close the connection to ZooKeeper.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -1049,7 +1049,7 @@ implements org.apache.zookeeper.Watcher, <a href="../../../../../org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.637">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.639">getConfiguration</a>()</pre>
 </li>
 </ul>
 <a name="abort-java.lang.String-java.lang.Throwable-">
@@ -1058,7 +1058,7 @@ implements org.apache.zookeeper.Watcher, <a href="../../../../../org/apache/hado
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.642">abort</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;why,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.644">abort</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;why,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-java.lang.Throwable-">Abortable</a></code></span></div>
 <div class="block">Abort the server or client.</div>
@@ -1077,7 +1077,7 @@ implements org.apache.zookeeper.Watcher, <a href="../../../../../org/apache/hado
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isAborted</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.651">isAborted</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#line.653">isAborted</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">Abortable</a></code></span></div>
 <div class="block">Check if the server or client was aborted.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/zookeeper/class-use/ZNodePaths.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/zookeeper/class-use/ZNodePaths.html b/devapidocs/org/apache/hadoop/hbase/zookeeper/class-use/ZNodePaths.html
index 5e65982..e6b6519 100644
--- a/devapidocs/org/apache/hadoop/hbase/zookeeper/class-use/ZNodePaths.html
+++ b/devapidocs/org/apache/hadoop/hbase/zookeeper/class-use/ZNodePaths.html
@@ -127,7 +127,7 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZNodePaths.html" title="class in org.apache.hadoop.hbase.zookeeper">ZNodePaths</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZNodePaths.html" title="class in org.apache.hadoop.hbase.zookeeper">ZNodePaths</a></code></td>
 <td class="colLast"><span class="typeNameLabel">ZKWatcher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html#znodePaths">znodePaths</a></span></code>&nbsp;</td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/overview-tree.html b/devapidocs/overview-tree.html
index 99d11c9..2b8e1ab 100644
--- a/devapidocs/overview-tree.html
+++ b/devapidocs/overview-tree.html
@@ -337,6 +337,7 @@
 <li type="circle">org.apache.hadoop.hbase.backup.mapreduce.<a href="org/apache/hadoop/hbase/backup/mapreduce/MapReduceBackupCopyJob.SnapshotCopy.html" title="class in org.apache.hadoop.hbase.backup.mapreduce"><span class="typeNameLink">MapReduceBackupCopyJob.SnapshotCopy</span></a></li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">PreUpgradeValidator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/RegionMover.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">RegionMover</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/RestoreDriver.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">RestoreDriver</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotInfo.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">SnapshotInfo</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/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 b01c27f..7ab7412 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,11 +16,11 @@
 <span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
 <span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
 <span class="sourceLineNo">010</span>  public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
-<span class="sourceLineNo">011</span>  public static final String revision = "d5ea926321d8339dbbb761b32bcdc043aed576ee";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "8377873d22c25185127bc07ea055412d8e302a1a";<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 = "Fri Jun  1 14:39:32 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Sat Jun  2 14:39:04 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 = "e66fe4dc152ed206b3e863448e3a5389";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "e6f5e6aac3e3902468201f3bd0da44da";<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/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/ZKNamespaceManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ZKNamespaceManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/ZKNamespaceManager.html
index 2f5f767..1d548a3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ZKNamespaceManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ZKNamespaceManager.html
@@ -63,7 +63,7 @@
 <span class="sourceLineNo">055</span><a name="line.55"></a>
 <span class="sourceLineNo">056</span>  public ZKNamespaceManager(ZKWatcher zkw) throws IOException {<a name="line.56"></a>
 <span class="sourceLineNo">057</span>    super(zkw);<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    nsZNode = zkw.znodePaths.namespaceZNode;<a name="line.58"></a>
+<span class="sourceLineNo">058</span>    nsZNode = zkw.getZNodePaths().namespaceZNode;<a name="line.58"></a>
 <span class="sourceLineNo">059</span>    cache = new ConcurrentSkipListMap&lt;&gt;();<a name="line.59"></a>
 <span class="sourceLineNo">060</span>  }<a name="line.60"></a>
 <span class="sourceLineNo">061</span><a name="line.61"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/ZNodeClearer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ZNodeClearer.html b/devapidocs/src-html/org/apache/hadoop/hbase/ZNodeClearer.html
index e4240d6..04c9eea 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ZNodeClearer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ZNodeClearer.html
@@ -194,7 +194,7 @@
 <span class="sourceLineNo">186</span>      if (ZNodeClearer.tablesOnMaster(conf)) {<a name="line.186"></a>
 <span class="sourceLineNo">187</span>        // In case of master crash also remove rsZnode since master is also regionserver<a name="line.187"></a>
 <span class="sourceLineNo">188</span>        ZKUtil.deleteNodeFailSilent(zkw,<a name="line.188"></a>
-<span class="sourceLineNo">189</span>          ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, znodeFileContent));<a name="line.189"></a>
+<span class="sourceLineNo">189</span>          ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, znodeFileContent));<a name="line.189"></a>
 <span class="sourceLineNo">190</span>        return MasterAddressTracker.deleteIfEquals(zkw,<a name="line.190"></a>
 <span class="sourceLineNo">191</span>          ZNodeClearer.parseMasterServerName(znodeFileContent));<a name="line.191"></a>
 <span class="sourceLineNo">192</span>      } else {<a name="line.192"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/backup/example/ZKTableArchiveClient.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/example/ZKTableArchiveClient.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/example/ZKTableArchiveClient.html
index bf9f804..fc77149 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/example/ZKTableArchiveClient.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/example/ZKTableArchiveClient.html
@@ -157,7 +157,7 @@
 <span class="sourceLineNo">149</span>   * @return get the znode for long-term archival of a table for<a name="line.149"></a>
 <span class="sourceLineNo">150</span>   */<a name="line.150"></a>
 <span class="sourceLineNo">151</span>  public static String getArchiveZNode(Configuration conf, ZKWatcher zooKeeper) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    return ZNodePaths.joinZNode(zooKeeper.znodePaths.baseZNode, conf.get(<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    return ZNodePaths.joinZNode(zooKeeper.getZNodePaths().baseZNode, conf.get(<a name="line.152"></a>
 <span class="sourceLineNo">153</span>      ZOOKEEPER_ZNODE_HFILE_ARCHIVE_KEY, TableHFileArchiveTracker.HFILE_ARCHIVE_ZNODE_PARENT));<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>


[24/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
index 623c258..c38c185 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
@@ -75,7 +75,7 @@
 <span class="sourceLineNo">067</span>    super(watcher);<a name="line.67"></a>
 <span class="sourceLineNo">068</span>    this.authManager = authManager;<a name="line.68"></a>
 <span class="sourceLineNo">069</span>    String aclZnodeParent = conf.get("zookeeper.znode.acl.parent", ACL_NODE);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    this.aclZNode = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, aclZnodeParent);<a name="line.70"></a>
+<span class="sourceLineNo">070</span>    this.aclZNode = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, aclZnodeParent);<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    executor = Executors.newSingleThreadExecutor(<a name="line.71"></a>
 <span class="sourceLineNo">072</span>      new DaemonThreadFactory("zk-permission-watcher"));<a name="line.72"></a>
 <span class="sourceLineNo">073</span>  }<a name="line.73"></a>
@@ -268,7 +268,7 @@
 <span class="sourceLineNo">260</span>   */<a name="line.260"></a>
 <span class="sourceLineNo">261</span>  public void writeToZookeeper(byte[] entry, byte[] permsData) {<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    String entryName = Bytes.toString(entry);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    String zkNode = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, ACL_NODE);<a name="line.263"></a>
+<span class="sourceLineNo">263</span>    String zkNode = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, ACL_NODE);<a name="line.263"></a>
 <span class="sourceLineNo">264</span>    zkNode = ZNodePaths.joinZNode(zkNode, entryName);<a name="line.264"></a>
 <span class="sourceLineNo">265</span><a name="line.265"></a>
 <span class="sourceLineNo">266</span>    try {<a name="line.266"></a>
@@ -286,7 +286,7 @@
 <span class="sourceLineNo">278</span>   * @param tableName<a name="line.278"></a>
 <span class="sourceLineNo">279</span>   */<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  public void deleteTableACLNode(final TableName tableName) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    String zkNode = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, ACL_NODE);<a name="line.281"></a>
+<span class="sourceLineNo">281</span>    String zkNode = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, ACL_NODE);<a name="line.281"></a>
 <span class="sourceLineNo">282</span>    zkNode = ZNodePaths.joinZNode(zkNode, tableName.getNameAsString());<a name="line.282"></a>
 <span class="sourceLineNo">283</span><a name="line.283"></a>
 <span class="sourceLineNo">284</span>    try {<a name="line.284"></a>
@@ -303,7 +303,7 @@
 <span class="sourceLineNo">295</span>   * Delete the acl notify node of namespace<a name="line.295"></a>
 <span class="sourceLineNo">296</span>   */<a name="line.296"></a>
 <span class="sourceLineNo">297</span>  public void deleteNamespaceACLNode(final String namespace) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    String zkNode = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, ACL_NODE);<a name="line.298"></a>
+<span class="sourceLineNo">298</span>    String zkNode = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, ACL_NODE);<a name="line.298"></a>
 <span class="sourceLineNo">299</span>    zkNode = ZNodePaths.joinZNode(zkNode, AccessControlLists.NAMESPACE_PREFIX + namespace);<a name="line.299"></a>
 <span class="sourceLineNo">300</span><a name="line.300"></a>
 <span class="sourceLineNo">301</span>    try {<a name="line.301"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/security/token/ZKSecretWatcher.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/token/ZKSecretWatcher.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/token/ZKSecretWatcher.html
index 9143f5d..8d5851a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/token/ZKSecretWatcher.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/token/ZKSecretWatcher.html
@@ -62,7 +62,7 @@
 <span class="sourceLineNo">054</span>    super(watcher);<a name="line.54"></a>
 <span class="sourceLineNo">055</span>    this.secretManager = secretManager;<a name="line.55"></a>
 <span class="sourceLineNo">056</span>    String keyZNodeParent = conf.get("zookeeper.znode.tokenauth.parent", DEFAULT_ROOT_NODE);<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    this.baseKeyZNode = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, keyZNodeParent);<a name="line.57"></a>
+<span class="sourceLineNo">057</span>    this.baseKeyZNode = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, keyZNodeParent);<a name="line.57"></a>
 <span class="sourceLineNo">058</span>    this.keysParentZNode = ZNodePaths.joinZNode(baseKeyZNode, DEFAULT_KEYS_PARENT);<a name="line.58"></a>
 <span class="sourceLineNo">059</span>  }<a name="line.59"></a>
 <span class="sourceLineNo">060</span><a name="line.60"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html
index e34dce1..1b324a8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.html
@@ -62,101 +62,102 @@
 <span class="sourceLineNo">054</span>    String labelZnodeParent = conf.get(VISIBILITY_LABEL_ZK_PATH, DEFAULT_VISIBILITY_LABEL_NODE);<a name="line.54"></a>
 <span class="sourceLineNo">055</span>    String userAuthsZnodeParent = conf.get(VISIBILITY_USER_AUTHS_ZK_PATH,<a name="line.55"></a>
 <span class="sourceLineNo">056</span>        DEFAULT_VISIBILITY_USER_AUTHS_NODE);<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    this.labelZnode = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, labelZnodeParent);<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    this.userAuthsZnode = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, userAuthsZnodeParent);<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  public void start() throws KeeperException {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    watcher.registerListener(this);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    ZKUtil.createWithParents(watcher, labelZnode);<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    ZKUtil.createWithParents(watcher, userAuthsZnode);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    byte[] data = ZKUtil.getDataAndWatch(watcher, labelZnode);<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    if (data != null &amp;&amp; data.length &gt; 0) {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>      refreshVisibilityLabelsCache(data);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    }<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    data = ZKUtil.getDataAndWatch(watcher, userAuthsZnode);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    if (data != null &amp;&amp; data.length &gt; 0) {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      refreshUserAuthsCache(data);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    }<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  }<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private void refreshVisibilityLabelsCache(byte[] data) {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    try {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      this.labelsCache.refreshLabelsCache(data);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    } catch (IOException ioe) {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      LOG.error("Failed parsing data from labels table " + " from zk", ioe);<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    }<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  }<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private void refreshUserAuthsCache(byte[] data) {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    try {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      this.labelsCache.refreshUserAuthsCache(data);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    } catch (IOException ioe) {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      LOG.error("Failed parsing data from labels table " + " from zk", ioe);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    }<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  @Override<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  public void nodeCreated(String path) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    if (path.equals(labelZnode) || path.equals(userAuthsZnode)) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      try {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        ZKUtil.watchAndCheckExists(watcher, path);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      } catch (KeeperException ke) {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>        LOG.error("Error setting watcher on node " + path, ke);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        // only option is to abort<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        watcher.abort("ZooKeeper error obtaining label node children", ke);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      }<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    }<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  @Override<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public void nodeDeleted(String path) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    // There is no case of visibility labels path to get deleted.<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>  @Override<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  public void nodeDataChanged(String path) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    if (path.equals(labelZnode) || path.equals(userAuthsZnode)) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      try {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>        watcher.sync(path);<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        byte[] data = ZKUtil.getDataAndWatch(watcher, path);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        if (path.equals(labelZnode)) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>          refreshVisibilityLabelsCache(data);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        } else {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>          refreshUserAuthsCache(data);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>        }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      } catch (KeeperException ke) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        LOG.error("Error reading data from zookeeper for node " + path, ke);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>        // only option is to abort<a name="line.122"></a>
-<span class="sourceLineNo">123</span>        watcher.abort("ZooKeeper error getting data for node " + path, ke);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>  @Override<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  public void nodeChildrenChanged(String path) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    // We are not dealing with child nodes under the label znode or userauths znode.<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>  /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * Write a labels mirror or user auths mirror into zookeeper<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   *<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   * @param data<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * @param labelsOrUserAuths true for writing labels and false for user auths.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  public void writeToZookeeper(byte[] data, boolean labelsOrUserAuths) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    String znode = this.labelZnode;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    if (!labelsOrUserAuths) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      znode = this.userAuthsZnode;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    try {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      ZKUtil.updateExistingNodeData(watcher, znode, data, -1);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    } catch (KeeperException e) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      LOG.error("Failed writing to " + znode, e);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      watcher.abort("Failed writing node " + znode + " to zookeeper", e);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>}<a name="line.151"></a>
+<span class="sourceLineNo">057</span>    this.labelZnode = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, labelZnodeParent);<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    this.userAuthsZnode = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>            userAuthsZnodeParent);<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  }<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public void start() throws KeeperException {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    watcher.registerListener(this);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    ZKUtil.createWithParents(watcher, labelZnode);<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    ZKUtil.createWithParents(watcher, userAuthsZnode);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    byte[] data = ZKUtil.getDataAndWatch(watcher, labelZnode);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    if (data != null &amp;&amp; data.length &gt; 0) {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      refreshVisibilityLabelsCache(data);<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    }<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    data = ZKUtil.getDataAndWatch(watcher, userAuthsZnode);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    if (data != null &amp;&amp; data.length &gt; 0) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      refreshUserAuthsCache(data);<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><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private void refreshVisibilityLabelsCache(byte[] data) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    try {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      this.labelsCache.refreshLabelsCache(data);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    } catch (IOException ioe) {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      LOG.error("Failed parsing data from labels table " + " from zk", ioe);<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><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private void refreshUserAuthsCache(byte[] data) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    try {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      this.labelsCache.refreshUserAuthsCache(data);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    } catch (IOException ioe) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      LOG.error("Failed parsing data from labels table " + " from zk", ioe);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Override<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public void nodeCreated(String path) {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    if (path.equals(labelZnode) || path.equals(userAuthsZnode)) {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      try {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        ZKUtil.watchAndCheckExists(watcher, path);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      } catch (KeeperException ke) {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        LOG.error("Error setting watcher on node " + path, ke);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>        // only option is to abort<a name="line.99"></a>
+<span class="sourceLineNo">100</span>        watcher.abort("ZooKeeper error obtaining label node children", ke);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      }<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  @Override<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  public void nodeDeleted(String path) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    // There is no case of visibility labels path to get deleted.<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  @Override<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public void nodeDataChanged(String path) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    if (path.equals(labelZnode) || path.equals(userAuthsZnode)) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      try {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        watcher.sync(path);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        byte[] data = ZKUtil.getDataAndWatch(watcher, path);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        if (path.equals(labelZnode)) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>          refreshVisibilityLabelsCache(data);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        } else {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>          refreshUserAuthsCache(data);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>        }<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      } catch (KeeperException ke) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        LOG.error("Error reading data from zookeeper for node " + path, ke);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        // only option is to abort<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        watcher.abort("ZooKeeper error getting data for node " + path, ke);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      }<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  @Override<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  public void nodeChildrenChanged(String path) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    // We are not dealing with child nodes under the label znode or userauths znode.<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>  /**<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * Write a labels mirror or user auths mirror into zookeeper<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   *<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   * @param data<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   * @param labelsOrUserAuths true for writing labels and false for user auths.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   */<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  public void writeToZookeeper(byte[] data, boolean labelsOrUserAuths) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    String znode = this.labelZnode;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    if (!labelsOrUserAuths) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      znode = this.userAuthsZnode;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    }<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    try {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      ZKUtil.updateExistingNodeData(watcher, znode, data, -1);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    } catch (KeeperException e) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      LOG.error("Failed writing to " + znode, e);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      watcher.abort("Failed writing node " + znode + " to zookeeper", e);<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.Counter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.Counter.html b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.Counter.html
index b77fb8a..4c0b9a7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.Counter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.Counter.html
@@ -1035,116 +1035,120 @@
 <span class="sourceLineNo">1027</span>    // The snapshot references must be copied before the hfiles otherwise the cleaner<a name="line.1027"></a>
 <span class="sourceLineNo">1028</span>    // will remove them because they are unreferenced.<a name="line.1028"></a>
 <span class="sourceLineNo">1029</span>    List&lt;Path&gt; travesedPaths = new ArrayList&lt;&gt;();<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    try {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      LOG.info("Copy Snapshot Manifest");<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      travesedPaths =<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    } catch (IOException e) {<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    } finally {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      if (filesUser != null || filesGroup != null) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>        LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>            + filesUser)<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            + filesGroup));<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>        setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      }<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>      if (filesMode &gt; 0) {<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    if (!targetName.equals(snapshotName)) {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      SnapshotDescription snapshotDesc =<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>          .toBuilder()<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>          .setName(targetName)<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>          .build();<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      if (filesUser != null || filesGroup != null) {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      }<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>      if (filesMode &gt; 0) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1066"></a>
+<span class="sourceLineNo">1030</span>    boolean copySucceeded = false;<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    try {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      LOG.info("Copy Snapshot Manifest from " + snapshotDir + " to " + initialOutputSnapshotDir);<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>      travesedPaths =<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      copySucceeded = true;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>    } catch (IOException e) {<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>    } finally {<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      if (copySucceeded) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>        if (filesUser != null || filesGroup != null) {<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>          LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>              + filesUser)<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>              + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>                  + filesGroup));<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>          setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>        }<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        if (filesMode &gt; 0) {<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>          setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>        }<a name="line.1052"></a>
+<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>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    if (!targetName.equals(snapshotName)) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>      SnapshotDescription snapshotDesc =<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>          .toBuilder()<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>          .setName(targetName)<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>          .build();<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      if (filesUser != null || filesGroup != null) {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>      }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span><a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    // Step 2 - Start MR Job to copy files<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // by the HFileArchiver, since they have no references.<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    try {<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span><a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>      if (!skipTmp) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<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><a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      // Step 4 - Verify snapshot integrity<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      if (verifyTarget) {<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>        LOG.info("Verify snapshot integrity");<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>      }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      LOG.info("Export Completed: " + targetName);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      return 0;<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    } catch (Exception e) {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      LOG.error("Snapshot export failed", e);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      if (!skipTmp) {<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      }<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      return 1;<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    } finally {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      IOUtils.closeStream(inputFs);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      IOUtils.closeStream(outputFs);<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>
-<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>  @Override<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>  protected void printUsage() {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>    super.printUsage();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    System.out.println("\n"<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>        + "Examples:\n"<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        + "  hbase snapshot export \\\n"<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        + "\n"<a name="line.1115"></a>
+<span class="sourceLineNo">1068</span>      if (filesMode &gt; 0) {<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    }<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span><a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // Step 2 - Start MR Job to copy files<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // by the HFileArchiver, since they have no references.<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    try {<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span><a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      if (!skipTmp) {<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>        }<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      }<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span><a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      // Step 4 - Verify snapshot integrity<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      if (verifyTarget) {<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>        LOG.info("Verify snapshot integrity");<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      LOG.info("Export Completed: " + targetName);<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      return 0;<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } catch (Exception e) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      LOG.error("Snapshot export failed", e);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>      if (!skipTmp) {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>      }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      return 1;<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    } finally {<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      IOUtils.closeStream(inputFs);<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>      IOUtils.closeStream(outputFs);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>  }<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span><a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>  @Override<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>  protected void printUsage() {<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    super.printUsage();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    System.out.println("\n"<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>        + "Examples:\n"<a name="line.1115"></a>
 <span class="sourceLineNo">1116</span>        + "  hbase snapshot export \\\n"<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  }<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span><a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>  @Override protected void addOptions() {<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    addOption(Options.COPY_TO);<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    addOption(Options.COPY_FROM);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    addOption(Options.TARGET_NAME);<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    addOption(Options.OVERWRITE);<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    addOption(Options.CHUSER);<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    addOption(Options.CHGROUP);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    addOption(Options.CHMOD);<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    addOption(Options.MAPPERS);<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    addOption(Options.BANDWIDTH);<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>  }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span><a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>  public static void main(String[] args) {<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1137"></a>
+<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>        + "\n"<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        + "  hbase snapshot export \\\n"<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>  }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>  @Override protected void addOptions() {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>    addOption(Options.COPY_TO);<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    addOption(Options.COPY_FROM);<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    addOption(Options.TARGET_NAME);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    addOption(Options.OVERWRITE);<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    addOption(Options.CHUSER);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    addOption(Options.CHGROUP);<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    addOption(Options.CHMOD);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    addOption(Options.MAPPERS);<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    addOption(Options.BANDWIDTH);<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>  }<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>}<a name="line.1139"></a>
+<span class="sourceLineNo">1139</span><a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>  public static void main(String[] args) {<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>  }<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>}<a name="line.1143"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportMapper.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportMapper.html b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportMapper.html
index b77fb8a..4c0b9a7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportMapper.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/ExportSnapshot.ExportMapper.html
@@ -1035,116 +1035,120 @@
 <span class="sourceLineNo">1027</span>    // The snapshot references must be copied before the hfiles otherwise the cleaner<a name="line.1027"></a>
 <span class="sourceLineNo">1028</span>    // will remove them because they are unreferenced.<a name="line.1028"></a>
 <span class="sourceLineNo">1029</span>    List&lt;Path&gt; travesedPaths = new ArrayList&lt;&gt;();<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    try {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      LOG.info("Copy Snapshot Manifest");<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      travesedPaths =<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    } catch (IOException e) {<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    } finally {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      if (filesUser != null || filesGroup != null) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>        LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>            + filesUser)<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            + filesGroup));<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>        setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      }<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>      if (filesMode &gt; 0) {<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>      }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    if (!targetName.equals(snapshotName)) {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      SnapshotDescription snapshotDesc =<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>          .toBuilder()<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>          .setName(targetName)<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>          .build();<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      if (filesUser != null || filesGroup != null) {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      }<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>      if (filesMode &gt; 0) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1066"></a>
+<span class="sourceLineNo">1030</span>    boolean copySucceeded = false;<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    try {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      LOG.info("Copy Snapshot Manifest from " + snapshotDir + " to " + initialOutputSnapshotDir);<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>      travesedPaths =<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>          FSUtils.copyFilesParallel(inputFs, snapshotDir, outputFs, initialOutputSnapshotDir, conf,<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>              conf.getInt(CONF_COPY_MANIFEST_THREADS, DEFAULT_COPY_MANIFEST_THREADS));<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      copySucceeded = true;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>    } catch (IOException e) {<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      throw new ExportSnapshotException("Failed to copy the snapshot directory: from=" +<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>        snapshotDir + " to=" + initialOutputSnapshotDir, e);<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>    } finally {<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      if (copySucceeded) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>        if (filesUser != null || filesGroup != null) {<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>          LOG.warn((filesUser == null ? "" : "Change the owner of " + needSetOwnerDir + " to "<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>              + filesUser)<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>              + (filesGroup == null ? "" : ", Change the group of " + needSetOwnerDir + " to "<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>                  + filesGroup));<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>          setOwnerParallel(outputFs, filesUser, filesGroup, conf, travesedPaths);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>        }<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        if (filesMode &gt; 0) {<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          LOG.warn("Change the permission of " + needSetOwnerDir + " to " + filesMode);<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>          setPermissionParallel(outputFs, (short)filesMode, travesedPaths, conf);<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>        }<a name="line.1052"></a>
+<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>    // Write a new .snapshotinfo if the target name is different from the source name<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    if (!targetName.equals(snapshotName)) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>      SnapshotDescription snapshotDesc =<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        SnapshotDescriptionUtils.readSnapshotInfo(inputFs, snapshotDir)<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>          .toBuilder()<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>          .setName(targetName)<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>          .build();<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      SnapshotDescriptionUtils.writeSnapshotInfo(snapshotDesc, initialOutputSnapshotDir, outputFs);<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      if (filesUser != null || filesGroup != null) {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>        outputFs.setOwner(new Path(initialOutputSnapshotDir,<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), filesUser, filesGroup);<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>      }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span><a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    // Step 2 - Start MR Job to copy files<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // by the HFileArchiver, since they have no references.<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    try {<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span><a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>      if (!skipTmp) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<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><a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      // Step 4 - Verify snapshot integrity<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      if (verifyTarget) {<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>        LOG.info("Verify snapshot integrity");<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>      }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      LOG.info("Export Completed: " + targetName);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      return 0;<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    } catch (Exception e) {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      LOG.error("Snapshot export failed", e);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      if (!skipTmp) {<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      }<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      return 1;<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    } finally {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      IOUtils.closeStream(inputFs);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      IOUtils.closeStream(outputFs);<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>
-<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>  @Override<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>  protected void printUsage() {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>    super.printUsage();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    System.out.println("\n"<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>        + "Examples:\n"<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        + "  hbase snapshot export \\\n"<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        + "\n"<a name="line.1115"></a>
+<span class="sourceLineNo">1068</span>      if (filesMode &gt; 0) {<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>        outputFs.setPermission(new Path(initialOutputSnapshotDir,<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>          SnapshotDescriptionUtils.SNAPSHOTINFO_FILE), new FsPermission((short)filesMode));<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    }<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span><a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // Step 2 - Start MR Job to copy files<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // The snapshot references must be copied before the files otherwise the files gets removed<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // by the HFileArchiver, since they have no references.<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    try {<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      runCopyJob(inputRoot, outputRoot, snapshotName, snapshotDir, verifyChecksum,<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>                 filesUser, filesGroup, filesMode, mappers, bandwidthMB);<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span><a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      LOG.info("Finalize the Snapshot Export");<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      if (!skipTmp) {<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>        // Step 3 - Rename fs2:/.snapshot/.tmp/&lt;snapshot&gt; fs2:/.snapshot/&lt;snapshot&gt;<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>        if (!outputFs.rename(snapshotTmpDir, outputSnapshotDir)) {<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>          throw new ExportSnapshotException("Unable to rename snapshot directory from=" +<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>            snapshotTmpDir + " to=" + outputSnapshotDir);<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>        }<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      }<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span><a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      // Step 4 - Verify snapshot integrity<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      if (verifyTarget) {<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>        LOG.info("Verify snapshot integrity");<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>        verifySnapshot(destConf, outputFs, outputRoot, outputSnapshotDir);<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      LOG.info("Export Completed: " + targetName);<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      return 0;<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } catch (Exception e) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      LOG.error("Snapshot export failed", e);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>      if (!skipTmp) {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>        outputFs.delete(snapshotTmpDir, true);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>      }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>      outputFs.delete(outputSnapshotDir, true);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      return 1;<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    } finally {<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      IOUtils.closeStream(inputFs);<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>      IOUtils.closeStream(outputFs);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>  }<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span><a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>  @Override<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>  protected void printUsage() {<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    super.printUsage();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>    System.out.println("\n"<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>        + "Examples:\n"<a name="line.1115"></a>
 <span class="sourceLineNo">1116</span>        + "  hbase snapshot export \\\n"<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  }<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span><a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>  @Override protected void addOptions() {<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    addOption(Options.COPY_TO);<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    addOption(Options.COPY_FROM);<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    addOption(Options.TARGET_NAME);<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    addOption(Options.OVERWRITE);<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    addOption(Options.CHUSER);<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    addOption(Options.CHGROUP);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    addOption(Options.CHMOD);<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    addOption(Options.MAPPERS);<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    addOption(Options.BANDWIDTH);<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>  }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span><a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>  public static void main(String[] args) {<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1137"></a>
+<span class="sourceLineNo">1117</span>        + "    --snapshot MySnapshot --copy-to hdfs://srv2:8082/hbase \\\n"<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>        + "    --chuser MyUser --chgroup MyGroup --chmod 700 --mappers 16\n"<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>        + "\n"<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        + "  hbase snapshot export \\\n"<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        + "    --snapshot MySnapshot --copy-from hdfs://srv2:8082/hbase \\\n"<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>        + "    --copy-to hdfs://srv1:50070/hbase");<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>  }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>  @Override protected void addOptions() {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    addRequiredOption(Options.SNAPSHOT);<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>    addOption(Options.COPY_TO);<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    addOption(Options.COPY_FROM);<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>    addOption(Options.TARGET_NAME);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    addOption(Options.NO_CHECKSUM_VERIFY);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    addOption(Options.NO_TARGET_VERIFY);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    addOption(Options.OVERWRITE);<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    addOption(Options.CHUSER);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    addOption(Options.CHGROUP);<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    addOption(Options.CHMOD);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    addOption(Options.MAPPERS);<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    addOption(Options.BANDWIDTH);<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>  }<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>}<a name="line.1139"></a>
+<span class="sourceLineNo">1139</span><a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>  public static void main(String[] args) {<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    new ExportSnapshot().doStaticMain(args);<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>  }<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>}<a name="line.1143"></a>
 
 
 


[03/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html
index f4dc25f..e219821 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html
@@ -91,191 +91,192 @@
 <span class="sourceLineNo">083</span>    utility.startMiniZKCluster();<a name="line.83"></a>
 <span class="sourceLineNo">084</span>    conf = utility.getConfiguration();<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    ZKWatcher zk = HBaseTestingUtility.getZooKeeperWatcher(utility);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    ZKUtil.createWithParents(zk, zk.znodePaths.rsZNode);<a name="line.86"></a>
+<span class="sourceLineNo">086</span>    ZKUtil.createWithParents(zk, zk.getZNodePaths().rsZNode);<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>  @Before<a name="line.89"></a>
 <span class="sourceLineNo">090</span>  public void setUp() throws Exception {<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    zkw = HBaseTestingUtility.getZooKeeperWatcher(utility);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    String fakeRs1 = ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname1.example.org:1234");<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    try {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      ZKClusterId.setClusterId(zkw, new ClusterId());<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      rp = ReplicationFactory.getReplicationPeers(zkw, conf);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      rp.init();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      rt = ReplicationFactory.getReplicationTracker(zkw, new DummyServer(fakeRs1),<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        new DummyServer(fakeRs1));<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    } catch (Exception e) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      fail("Exception during test setup: " + e);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    }<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    rsRemovedCount = new AtomicInteger(0);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    rsRemovedData = "";<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>  @AfterClass<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  public static void tearDownAfterClass() throws Exception {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    utility.shutdownMiniZKCluster();<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>  @Test<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  public void testGetListOfRegionServers() throws Exception {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    // 0 region servers<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    assertEquals(0, rt.getListOfRegionServers().size());<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>    // 1 region server<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    ZKUtil.createWithParents(zkw,<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname1.example.org:1234"));<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    assertEquals(1, rt.getListOfRegionServers().size());<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>    // 2 region servers<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    ZKUtil.createWithParents(zkw,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234"));<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    assertEquals(2, rt.getListOfRegionServers().size());<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>    // 1 region server<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    ZKUtil.deleteNode(zkw,<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234"));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assertEquals(1, rt.getListOfRegionServers().size());<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    // 0 region server<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    ZKUtil.deleteNode(zkw,<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname1.example.org:1234"));<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    assertEquals(0, rt.getListOfRegionServers().size());<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>  @Test<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  public void testRegionServerRemovedEvent() throws Exception {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    ZKUtil.createAndWatch(zkw,<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234"),<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      HConstants.EMPTY_BYTE_ARRAY);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    rt.registerListener(new DummyReplicationListener());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    // delete one<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    ZKUtil.deleteNode(zkw,<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      ZNodePaths.joinZNode(zkw.znodePaths.rsZNode, "hostname2.example.org:1234"));<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    // wait for event<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    while (rsRemovedCount.get() &lt; 1) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      Thread.sleep(5);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    assertEquals("hostname2.example.org:1234", rsRemovedData);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @Test<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public void testPeerNameControl() throws Exception {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    int exists = 0;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    rp.getPeerStorage().addPeer("6",<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      ReplicationPeerConfig.newBuilder().setClusterKey(utility.getClusterKey()).build(), true);<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>    try {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      rp.getPeerStorage().addPeer("6",<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        ReplicationPeerConfig.newBuilder().setClusterKey(utility.getClusterKey()).build(), true);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    } catch (ReplicationException e) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      if (e.getCause() instanceof KeeperException.NodeExistsException) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        exists++;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    assertEquals(1, exists);<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>    // clean up<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    rp.getPeerStorage().removePeer("6");<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  private class DummyReplicationListener implements ReplicationListener {<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    @Override<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    public void regionServerRemoved(String regionServer) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      rsRemovedData = regionServer;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      rsRemovedCount.getAndIncrement();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      LOG.debug("Received regionServerRemoved event: " + regionServer);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  private class DummyServer implements Server {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    private String serverName;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    private boolean isAborted = false;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    private boolean isStopped = false;<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public DummyServer(String serverName) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      this.serverName = serverName;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    @Override<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    public Configuration getConfiguration() {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      return conf;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>    @Override<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    public ZKWatcher getZooKeeper() {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      return zkw;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>    @Override<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return null;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>    @Override<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    public ClusterConnection getConnection() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return null;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>    @Override<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public MetaTableLocator getMetaTableLocator() {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      return null;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    @Override<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    public ServerName getServerName() {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      return ServerName.valueOf(this.serverName);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>    @Override<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    public void abort(String why, Throwable e) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      LOG.info("Aborting " + serverName);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      this.isAborted = true;<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>    @Override<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    public boolean isAborted() {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      return this.isAborted;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>    @Override<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    public void stop(String why) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      this.isStopped = true;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    }<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 boolean isStopped() {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      return this.isStopped;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>    @Override<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    public ChoreService getChoreService() {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      return null;<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>    @Override<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    public ClusterConnection getClusterConnection() {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      // TODO Auto-generated method stub<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      return null;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    @Override<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    public FileSystem getFileSystem() {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      return null;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>    @Override<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    public boolean isStopping() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      return false;<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 Connection createConnection(Configuration conf) throws IOException {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      return null;<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>}<a name="line.270"></a>
+<span class="sourceLineNo">092</span>    String fakeRs1 = ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>            "hostname1.example.org:1234");<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    try {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      ZKClusterId.setClusterId(zkw, new ClusterId());<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      rp = ReplicationFactory.getReplicationPeers(zkw, conf);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      rp.init();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      rt = ReplicationFactory.getReplicationTracker(zkw, new DummyServer(fakeRs1),<a name="line.98"></a>
+<span class="sourceLineNo">099</span>        new DummyServer(fakeRs1));<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    } catch (Exception e) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      fail("Exception during test setup: " + e);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    rsRemovedCount = new AtomicInteger(0);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    rsRemovedData = "";<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>  @AfterClass<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  public static void tearDownAfterClass() throws Exception {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    utility.shutdownMiniZKCluster();<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  @Test<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  public void testGetListOfRegionServers() throws Exception {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    // 0 region servers<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    assertEquals(0, rt.getListOfRegionServers().size());<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // 1 region server<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    ZKUtil.createWithParents(zkw,<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname1.example.org:1234"));<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    assertEquals(1, rt.getListOfRegionServers().size());<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>    // 2 region servers<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    ZKUtil.createWithParents(zkw,<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname2.example.org:1234"));<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    assertEquals(2, rt.getListOfRegionServers().size());<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>    // 1 region server<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    ZKUtil.deleteNode(zkw,<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname2.example.org:1234"));<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    assertEquals(1, rt.getListOfRegionServers().size());<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>    // 0 region server<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    ZKUtil.deleteNode(zkw,<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname1.example.org:1234"));<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    assertEquals(0, rt.getListOfRegionServers().size());<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  @Test<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public void testRegionServerRemovedEvent() throws Exception {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    ZKUtil.createAndWatch(zkw,<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname2.example.org:1234"),<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      HConstants.EMPTY_BYTE_ARRAY);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    rt.registerListener(new DummyReplicationListener());<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    // delete one<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    ZKUtil.deleteNode(zkw,<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      ZNodePaths.joinZNode(zkw.getZNodePaths().rsZNode, "hostname2.example.org:1234"));<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    // wait for event<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    while (rsRemovedCount.get() &lt; 1) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      Thread.sleep(5);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    assertEquals("hostname2.example.org:1234", rsRemovedData);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  }<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>  @Test<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  public void testPeerNameControl() throws Exception {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    int exists = 0;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    rp.getPeerStorage().addPeer("6",<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      ReplicationPeerConfig.newBuilder().setClusterKey(utility.getClusterKey()).build(), true);<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    try {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      rp.getPeerStorage().addPeer("6",<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        ReplicationPeerConfig.newBuilder().setClusterKey(utility.getClusterKey()).build(), true);<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    } catch (ReplicationException e) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      if (e.getCause() instanceof KeeperException.NodeExistsException) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        exists++;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    }<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    assertEquals(1, exists);<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // clean up<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    rp.getPeerStorage().removePeer("6");<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>  private class DummyReplicationListener implements ReplicationListener {<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>    @Override<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    public void regionServerRemoved(String regionServer) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      rsRemovedData = regionServer;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      rsRemovedCount.getAndIncrement();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      LOG.debug("Received regionServerRemoved event: " + regionServer);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  private class DummyServer implements Server {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    private String serverName;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    private boolean isAborted = false;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    private boolean isStopped = false;<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>    public DummyServer(String serverName) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      this.serverName = serverName;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>    @Override<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    public Configuration getConfiguration() {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      return conf;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>    @Override<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    public ZKWatcher getZooKeeper() {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      return zkw;<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>    @Override<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      return null;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>    @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public ClusterConnection getConnection() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return null;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>    @Override<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    public MetaTableLocator getMetaTableLocator() {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      return null;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>    @Override<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    public ServerName getServerName() {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      return ServerName.valueOf(this.serverName);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    @Override<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public void abort(String why, Throwable e) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      LOG.info("Aborting " + serverName);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      this.isAborted = true;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>    @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public boolean isAborted() {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      return this.isAborted;<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>    @Override<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    public void stop(String why) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      this.isStopped = true;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>    @Override<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    public boolean isStopped() {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      return this.isStopped;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span>    @Override<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    public ChoreService getChoreService() {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      return null;<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>    @Override<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    public ClusterConnection getClusterConnection() {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      // TODO Auto-generated method stub<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      return null;<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>    public FileSystem getFileSystem() {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      return null;<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 boolean isStopping() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      return false;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>    @Override<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    public Connection createConnection(Configuration conf) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      return null;<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html
new file mode 100644
index 0000000..b9202fb
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html
@@ -0,0 +1,260 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.replication.regionserver;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.conf.Configuration;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HConstants;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.TableName;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.client.Put;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.client.Result;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.Table;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.replication.ReplicationAdmin;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.zookeeper.MiniZooKeeperCluster;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.junit.AfterClass;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.junit.Assert;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.junit.BeforeClass;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.junit.ClassRule;<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.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>@Category({ ReplicationTests.class, LargeTests.class })<a name="line.56"></a>
+<span class="sourceLineNo">057</span>public class TestGlobalReplicationThrottler {<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  @ClassRule<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      HBaseClassTestRule.forClass(TestGlobalReplicationThrottler.class);<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private static final Logger LOG = LoggerFactory.getLogger(TestGlobalReplicationThrottler.class);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private static final int REPLICATION_SOURCE_QUOTA = 200;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static int numOfPeer = 0;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static Configuration conf1;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private static Configuration conf2;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private static HBaseTestingUtility utility1;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private static HBaseTestingUtility utility2;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private static final byte[] famName = Bytes.toBytes("f");<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private static final byte[] VALUE = Bytes.toBytes("v");<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static final byte[] ROW = Bytes.toBytes("r");<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  private static final byte[][] ROWS = HTestConst.makeNAscii(ROW, 100);<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 TestName name = new TestName();<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  @BeforeClass<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public static void setUpBeforeClass() throws Exception {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    conf1 = HBaseConfiguration.create();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    conf1.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/1");<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    conf1.setLong("replication.source.sleepforretries", 100);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    // Each WAL is about 120 bytes<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    conf1.setInt(HConstants.REPLICATION_SOURCE_TOTAL_BUFFER_KEY, REPLICATION_SOURCE_QUOTA);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    conf1.setLong("replication.source.per.peer.node.bandwidth", 100L);<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>    utility1 = new HBaseTestingUtility(conf1);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    utility1.startMiniZKCluster();<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    MiniZooKeeperCluster miniZK = utility1.getZkCluster();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    new ZKWatcher(conf1, "cluster1", null, true);<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>    conf2 = new Configuration(conf1);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    conf2.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/2");<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>    utility2 = new HBaseTestingUtility(conf2);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    utility2.setZkCluster(miniZK);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    new ZKWatcher(conf2, "cluster2", null, true);<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>    ReplicationAdmin admin1 = new ReplicationAdmin(conf1);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    ReplicationPeerConfig rpc = new ReplicationPeerConfig();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    rpc.setClusterKey(utility2.getClusterKey());<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>    utility1.startMiniCluster(1, 1);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    utility2.startMiniCluster(1, 1);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>    admin1.addPeer("peer1", rpc, null);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    admin1.addPeer("peer2", rpc, null);<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    admin1.addPeer("peer3", rpc, null);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    numOfPeer = admin1.getPeersCount();<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 tearDownAfterClass() throws Exception {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    utility2.shutdownMiniCluster();<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    utility1.shutdownMiniCluster();<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  }<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>  volatile private boolean testQuotaPass = false;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  volatile private boolean testQuotaNonZero = false;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  @Test<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public void testQuota() throws IOException {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    HTableDescriptor table = new HTableDescriptor(tableName);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    HColumnDescriptor fam = new HColumnDescriptor(famName);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    fam.setScope(HConstants.REPLICATION_SCOPE_GLOBAL);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    table.addFamily(fam);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    utility1.getAdmin().createTable(table);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    utility2.getAdmin().createTable(table);<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>    Thread watcher = new Thread(()-&gt;{<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      Replication replication = (Replication)utility1.getMiniHBaseCluster()<a name="line.134"></a>
+<span class="sourceLineNo">135</span>          .getRegionServer(0).getReplicationSourceService();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      AtomicLong bufferUsed = replication.getReplicationManager().getTotalBufferUsed();<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      testQuotaPass = true;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      while (!Thread.interrupted()) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        long size = bufferUsed.get();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        if (size &gt; 0) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>          testQuotaNonZero = true;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        }<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        //the reason here doing "numOfPeer + 1" is because by using method addEntryToBatch(), even the<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        // batch size (after added last entry) exceeds quota, it still keeps the last one in the batch<a name="line.144"></a>
+<span class="sourceLineNo">145</span>        // so total used buffer size can be one "replication.total.buffer.quota" larger than expected<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        if (size &gt; REPLICATION_SOURCE_QUOTA * (numOfPeer + 1)) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>          // We read logs first then check throttler, so if the buffer quota limiter doesn't<a name="line.147"></a>
+<span class="sourceLineNo">148</span>          // take effect, it will push many logs and exceed the quota.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>          testQuotaPass = false;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        Threads.sleep(50);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    });<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    watcher.start();<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>    try(Table t1 = utility1.getConnection().getTable(tableName);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        Table t2 = utility2.getConnection().getTable(tableName)) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      for (int i = 0; i &lt; 50; i++) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        Put put = new Put(ROWS[i]);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        put.addColumn(famName, VALUE, VALUE);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        t1.put(put);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      long start = EnvironmentEdgeManager.currentTime();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      while (EnvironmentEdgeManager.currentTime() - start &lt; 180000) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        Scan scan = new Scan();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        scan.setCaching(50);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        int count = 0;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        try (ResultScanner results = t2.getScanner(scan)) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          for (Result result : results) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>            count++;<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>        if (count &lt; 50) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>          LOG.info("Waiting all logs pushed to slave. Expected 50 , actual " + count);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>          Threads.sleep(200);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>          continue;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        break;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      }<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>    watcher.interrupt();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    Assert.assertTrue(testQuotaPass);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    Assert.assertTrue(testQuotaNonZero);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span>}<a name="line.188"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html
deleted file mode 100644
index 2c9bf61..0000000
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html
+++ /dev/null
@@ -1,265 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
-<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
-<span class="sourceLineNo">009</span> *<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *<a name="line.11"></a>
-<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
-<span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.replication.regionserver;<a name="line.18"></a>
-<span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.util.ArrayList;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.conf.Configuration;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.Cell;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HConstants;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.TableName;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.Put;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.Result;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.Table;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.replication.ReplicationAdmin;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.zookeeper.MiniZooKeeperCluster;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.junit.AfterClass;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.junit.Assert;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.junit.BeforeClass;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.junit.ClassRule;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.junit.Rule;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.junit.Test;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.junit.experimental.categories.Category;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.junit.rules.TestName;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.slf4j.Logger;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.slf4j.LoggerFactory;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>@Category({ ReplicationTests.class, LargeTests.class })<a name="line.59"></a>
-<span class="sourceLineNo">060</span>public class TestGlobalThrottler {<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  @ClassRule<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      HBaseClassTestRule.forClass(TestGlobalThrottler.class);<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private static final Logger LOG = LoggerFactory.getLogger(TestGlobalThrottler.class);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static Configuration conf1;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private static Configuration conf2;<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private static HBaseTestingUtility utility1;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private static HBaseTestingUtility utility2;<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private static final byte[] famName = Bytes.toBytes("f");<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static final byte[] VALUE = Bytes.toBytes("v");<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private static final byte[] ROW = Bytes.toBytes("r");<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private static final byte[][] ROWS = HTestConst.makeNAscii(ROW, 100);<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span>  @Rule<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public TestName name = new TestName();<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  @BeforeClass<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public static void setUpBeforeClass() throws Exception {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    conf1 = HBaseConfiguration.create();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    conf1.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/1");<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    conf1.setLong("replication.source.sleepforretries", 100);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    // Each WAL is about 120 bytes<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    conf1.setInt(HConstants.REPLICATION_SOURCE_TOTAL_BUFFER_KEY, 200);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    conf1.setLong("replication.source.per.peer.node.bandwidth", 100L);<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>    utility1 = new HBaseTestingUtility(conf1);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    utility1.startMiniZKCluster();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    MiniZooKeeperCluster miniZK = utility1.getZkCluster();<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    new ZKWatcher(conf1, "cluster1", null, true);<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>    conf2 = new Configuration(conf1);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    conf2.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/2");<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>    utility2 = new HBaseTestingUtility(conf2);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    utility2.setZkCluster(miniZK);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    new ZKWatcher(conf2, "cluster2", null, true);<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>    ReplicationAdmin admin1 = new ReplicationAdmin(conf1);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    ReplicationPeerConfig rpc = new ReplicationPeerConfig();<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    rpc.setClusterKey(utility2.getClusterKey());<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>    utility1.startMiniCluster(1, 1);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    utility2.startMiniCluster(1, 1);<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>    admin1.addPeer("peer1", rpc, null);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    admin1.addPeer("peer2", rpc, null);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    admin1.addPeer("peer3", rpc, null);<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 tearDownAfterClass() throws Exception {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    utility2.shutdownMiniCluster();<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    utility1.shutdownMiniCluster();<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  }<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>  volatile private boolean testQuotaPass = false;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  volatile private boolean testQuotaNonZero = false;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  @Test<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  public void testQuota() throws IOException {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    HTableDescriptor table = new HTableDescriptor(tableName);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    HColumnDescriptor fam = new HColumnDescriptor(famName);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    fam.setScope(HConstants.REPLICATION_SCOPE_GLOBAL);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    table.addFamily(fam);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    utility1.getAdmin().createTable(table);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    utility2.getAdmin().createTable(table);<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>    Thread watcher = new Thread(()-&gt;{<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      Replication replication = (Replication)utility1.getMiniHBaseCluster()<a name="line.134"></a>
-<span class="sourceLineNo">135</span>          .getRegionServer(0).getReplicationSourceService();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      AtomicLong bufferUsed = replication.getReplicationManager().getTotalBufferUsed();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      testQuotaPass = true;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      while (!Thread.interrupted()) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        long size = bufferUsed.get();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        if (size &gt; 0) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>          testQuotaNonZero = true;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        }<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        if (size &gt; 600) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>          // We read logs first then check throttler, so if the buffer quota limiter doesn't<a name="line.144"></a>
-<span class="sourceLineNo">145</span>          // take effect, it will push many logs and exceed the quota.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>          testQuotaPass = false;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        Threads.sleep(50);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    });<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    watcher.start();<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    try(Table t1 = utility1.getConnection().getTable(tableName);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        Table t2 = utility2.getConnection().getTable(tableName)) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      for (int i = 0; i &lt; 50; i++) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        Put put = new Put(ROWS[i]);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        put.addColumn(famName, VALUE, VALUE);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        t1.put(put);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      }<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      long start = EnvironmentEdgeManager.currentTime();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      while (EnvironmentEdgeManager.currentTime() - start &lt; 180000) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        Scan scan = new Scan();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        scan.setCaching(50);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        int count = 0;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        try (ResultScanner results = t2.getScanner(scan)) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          for (Result result : results) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>            count++;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>          }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        if (count &lt; 50) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>          LOG.info("Waiting all logs pushed to slave. Expected 50 , actual " + count);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>          Threads.sleep(200);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>          continue;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        break;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      }<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>    watcher.interrupt();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    Assert.assertTrue(testQuotaPass);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    Assert.assertTrue(testQuotaNonZero);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  private List&lt;Integer&gt; getRowNumbers(List&lt;Cell&gt; cells) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    List&lt;Integer&gt; listOfRowNumbers = new ArrayList&lt;&gt;(cells.size());<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    for (Cell c : cells) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      listOfRowNumbers.add(Integer.parseInt(Bytes<a name="line.187"></a>
-<span class="sourceLineNo">188</span>          .toString(c.getRowArray(), c.getRowOffset() + ROW.length,<a name="line.188"></a>
-<span class="sourceLineNo">189</span>              c.getRowLength() - ROW.length)));<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    return listOfRowNumbers;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
-<span class="sourceLineNo">193</span>}<a name="line.193"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdminClient.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdminClient.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdminClient.html
index c19746e..3fbbe46 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdminClient.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdminClient.html
@@ -142,7 +142,7 @@
 <span class="sourceLineNo">134</span>    Assert.assertEquals(Sets.newHashSet(groupMap.values()),<a name="line.134"></a>
 <span class="sourceLineNo">135</span>        Sets.newHashSet(wrapped.listRSGroups()));<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    try {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      String groupBasePath = ZNodePaths.joinZNode(zkw.znodePaths.baseZNode, "rsgroup");<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      String groupBasePath = ZNodePaths.joinZNode(zkw.getZNodePaths().baseZNode, "rsgroup");<a name="line.137"></a>
 <span class="sourceLineNo">138</span>      for(String znode: ZKUtil.listChildrenNoWatch(zkw, groupBasePath)) {<a name="line.138"></a>
 <span class="sourceLineNo">139</span>        byte[] data = ZKUtil.getData(zkw, ZNodePaths.joinZNode(groupBasePath, znode));<a name="line.139"></a>
 <span class="sourceLineNo">140</span>        if(data.length &gt; 0) {<a name="line.140"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/src-html/org/apache/hadoop/hbase/test/IntegrationTestZKAndFSPermissions.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/test/IntegrationTestZKAndFSPermissions.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/test/IntegrationTestZKAndFSPermissions.html
index 3780840..2751c11 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/test/IntegrationTestZKAndFSPermissions.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/test/IntegrationTestZKAndFSPermissions.html
@@ -152,7 +152,7 @@
 <span class="sourceLineNo">144</span>    ZKWatcher watcher = new ZKWatcher(conf, "IntegrationTestZnodeACLs", null);<a name="line.144"></a>
 <span class="sourceLineNo">145</span>    RecoverableZooKeeper zk = ZKUtil.connect(this.conf, watcher);<a name="line.145"></a>
 <span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>    String baseZNode = watcher.znodePaths.baseZNode;<a name="line.147"></a>
+<span class="sourceLineNo">147</span>    String baseZNode = watcher.getZNodePaths().baseZNode;<a name="line.147"></a>
 <span class="sourceLineNo">148</span><a name="line.148"></a>
 <span class="sourceLineNo">149</span>    LOG.info("");<a name="line.149"></a>
 <span class="sourceLineNo">150</span>    LOG.info("***********************************************************************************");<a name="line.150"></a>
@@ -168,7 +168,7 @@
 <span class="sourceLineNo">160</span>  private void checkZnodePermsRecursive(ZKWatcher watcher,<a name="line.160"></a>
 <span class="sourceLineNo">161</span>      RecoverableZooKeeper zk, String znode) throws KeeperException, InterruptedException {<a name="line.161"></a>
 <span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>    boolean expectedWorldReadable = watcher.znodePaths.isClientReadable(znode);<a name="line.163"></a>
+<span class="sourceLineNo">163</span>    boolean expectedWorldReadable = watcher.getZNodePaths().isClientReadable(znode);<a name="line.163"></a>
 <span class="sourceLineNo">164</span><a name="line.164"></a>
 <span class="sourceLineNo">165</span>    assertZnodePerms(zk, znode, expectedWorldReadable);<a name="line.165"></a>
 <span class="sourceLineNo">166</span><a name="line.166"></a>


[10/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html
index 5e2c133..10dcb4f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html#line.164">TestMasterAddressTracker.NodeCreationListener</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html#line.166">TestMasterAddressTracker.NodeCreationListener</a>
 extends org.apache.hadoop.hbase.zookeeper.ZKListener</pre>
 </li>
 </ul>
@@ -233,7 +233,7 @@ extends org.apache.hadoop.hbase.zookeeper.ZKListener</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/regionserver/TestMasterAddressTracker.NodeCreationListener.html#line.165">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html#line.167">LOG</a></pre>
 </li>
 </ul>
 <a name="lock">
@@ -242,7 +242,7 @@ extends org.apache.hadoop.hbase.zookeeper.ZKListener</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>lock</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Semaphore.html?is-external=true" title="class or interface in java.util.concurrent">Semaphore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html#line.167">lock</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Semaphore.html?is-external=true" title="class or interface in java.util.concurrent">Semaphore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html#line.169">lock</a></pre>
 </li>
 </ul>
 <a name="node">
@@ -251,7 +251,7 @@ extends org.apache.hadoop.hbase.zookeeper.ZKListener</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>node</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/regionserver/TestMasterAddressTracker.NodeCreationListener.html#line.168">node</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/regionserver/TestMasterAddressTracker.NodeCreationListener.html#line.170">node</a></pre>
 </li>
 </ul>
 </li>
@@ -268,7 +268,7 @@ extends org.apache.hadoop.hbase.zookeeper.ZKListener</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NodeCreationListener</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html#line.170">NodeCreationListener</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;watcher,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html#line.172">NodeCreationListener</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;watcher,
                             <a href="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;node)</pre>
 </li>
 </ul>
@@ -286,7 +286,7 @@ extends org.apache.hadoop.hbase.zookeeper.ZKListener</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>nodeCreated</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html#line.177">nodeCreated</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;path)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html#line.179">nodeCreated</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;path)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code>nodeCreated</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.zookeeper.ZKListener</code></dd>
@@ -299,7 +299,7 @@ extends org.apache.hadoop.hbase.zookeeper.ZKListener</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>waitForCreation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html#line.184">waitForCreation</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html#line.186">waitForCreation</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html
index ee5c60d..fb2efd5 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html
@@ -384,7 +384,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMasterAddressTrackerFromZK</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html#line.120">testMasterAddressTrackerFromZK</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html#line.122">testMasterAddressTrackerFromZK</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">Unit tests that uses ZooKeeper but does not use the master-side methods
  but rather acts directly on ZK.</div>
@@ -400,7 +400,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testParsingNull</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html#line.138">testParsingNull</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html#line.140">testParsingNull</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>
@@ -414,7 +414,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testNoBackups</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html#line.143">testNoBackups</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html#line.145">testNoBackups</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>
@@ -428,7 +428,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testNoMaster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html#line.157">testNoMaster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html#line.159">testNoMaster</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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html
index 4e51597..df14bee 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html
@@ -602,7 +602,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testAcquireMultiTasks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html#line.450">testAcquireMultiTasks</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html#line.451">testAcquireMultiTasks</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>
@@ -616,7 +616,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testAcquireMultiTasksByAvgTasksPerRS</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html#line.485">testAcquireMultiTasksByAvgTasksPerRS</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html#line.486">testAcquireMultiTasksByAvgTasksPerRS</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">The test checks SplitLogWorker should not spawn more splitters than expected num of tasks per
  RS</div>
@@ -632,7 +632,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getRegionServer</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.RegionServerServices&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html#line.529">getRegionServer</a>(org.apache.hadoop.hbase.ServerName&nbsp;name)</pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.RegionServerServices&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html#line.530">getRegionServer</a>(org.apache.hadoop.hbase.ServerName&nbsp;name)</pre>
 <div class="block">Create a mocked region server service instance</div>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html
index c34091a..d0ddf89 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html
@@ -348,7 +348,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>setUp</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html#line.79">setUp</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html#line.80">setUp</a>()</pre>
 </li>
 </ul>
 <a name="tearDown--">
@@ -357,7 +357,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html#line.87">tearDown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html#line.88">tearDown</a>()
               throws org.apache.zookeeper.KeeperException,
                      <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>
@@ -373,7 +373,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html#line.92">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html#line.93">tearDownAfterClass</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyReplicationListener.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyReplicationListener.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyReplicationListener.html
index 2836e49..ba7ff50 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyReplicationListener.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyReplicationListener.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html#line.174">TestReplicationTrackerZKImpl.DummyReplicationListener</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html#line.175">TestReplicationTrackerZKImpl.DummyReplicationListener</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements org.apache.hadoop.hbase.replication.ReplicationListener</pre>
 </li>
@@ -189,7 +189,7 @@ implements org.apache.hadoop.hbase.replication.ReplicationListener</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DummyReplicationListener</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyReplicationListener.html#line.174">DummyReplicationListener</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyReplicationListener.html#line.175">DummyReplicationListener</a>()</pre>
 </li>
 </ul>
 </li>
@@ -206,7 +206,7 @@ implements org.apache.hadoop.hbase.replication.ReplicationListener</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>regionServerRemoved</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyReplicationListener.html#line.177">regionServerRemoved</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;regionServer)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyReplicationListener.html#line.178">regionServerRemoved</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;regionServer)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>regionServerRemoved</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.replication.ReplicationListener</code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html
index 0545761..d8a192c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html#line.184">TestReplicationTrackerZKImpl.DummyServer</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html#line.185">TestReplicationTrackerZKImpl.DummyServer</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.Server</pre>
 </li>
@@ -271,7 +271,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>serverName</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.185">serverName</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.186">serverName</a></pre>
 </li>
 </ul>
 <a name="isAborted">
@@ -280,7 +280,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>isAborted</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.186">isAborted</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.187">isAborted</a></pre>
 </li>
 </ul>
 <a name="isStopped">
@@ -289,7 +289,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.187">isStopped</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.188">isStopped</a></pre>
 </li>
 </ul>
 </li>
@@ -306,7 +306,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DummyServer</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.189">DummyServer</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;serverName)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.190">DummyServer</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;serverName)</pre>
 </li>
 </ul>
 </li>
@@ -323,7 +323,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.194">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.195">getConfiguration</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getConfiguration</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -336,7 +336,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getZooKeeper</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.199">getZooKeeper</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.zookeeper.ZKWatcher&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.200">getZooKeeper</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getZooKeeper</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -349,7 +349,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoordinatedStateManager</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.CoordinatedStateManager&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.204">getCoordinatedStateManager</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.CoordinatedStateManager&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.205">getCoordinatedStateManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getCoordinatedStateManager</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -362,7 +362,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getConnection</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.ClusterConnection&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.209">getConnection</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.client.ClusterConnection&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.210">getConnection</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getConnection</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -375,7 +375,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaTableLocator</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.zookeeper.MetaTableLocator&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.214">getMetaTableLocator</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.zookeeper.MetaTableLocator&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.215">getMetaTableLocator</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getMetaTableLocator</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -388,7 +388,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerName</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.ServerName&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.219">getServerName</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.ServerName&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.220">getServerName</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getServerName</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -401,7 +401,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.224">abort</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;why,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.225">abort</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;why,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -415,7 +415,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>isAborted</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.230">isAborted</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.231">isAborted</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>isAborted</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Abortable</code></dd>
@@ -428,7 +428,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.235">stop</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;why)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.236">stop</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;why)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>stop</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Stoppable</code></dd>
@@ -441,7 +441,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.240">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.241">isStopped</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>isStopped</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Stoppable</code></dd>
@@ -454,7 +454,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getChoreService</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.ChoreService&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.245">getChoreService</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.ChoreService&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.246">getChoreService</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getChoreService</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -467,7 +467,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterConnection</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.ClusterConnection&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.250">getClusterConnection</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.client.ClusterConnection&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.251">getClusterConnection</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getClusterConnection</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -480,7 +480,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileSystem</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.256">getFileSystem</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.257">getFileSystem</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getFileSystem</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -493,7 +493,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopping</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.261">isStopping</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.262">isStopping</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>isStopping</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Server</code></dd>
@@ -506,7 +506,7 @@ implements org.apache.hadoop.hbase.Server</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createConnection</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.Connection&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.266">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>public&nbsp;org.apache.hadoop.hbase.client.Connection&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyServer.html#line.267">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html
index fa8e421..ecfa498 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html
@@ -411,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>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html#line.107">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html#line.108">tearDownAfterClass</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -425,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>testGetListOfRegionServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html#line.112">testGetListOfRegionServers</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html#line.113">testGetListOfRegionServers</a>()
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -439,7 +439,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testRegionServerRemovedEvent</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html#line.138">testRegionServerRemovedEvent</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html#line.139">testRegionServerRemovedEvent</a>()
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -453,7 +453,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testPeerNameControl</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html#line.154">testPeerNameControl</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.html#line.155">testPeerNameControl</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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html
new file mode 100644
index 0000000..771e3d6
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html
@@ -0,0 +1,535 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestGlobalReplicationThrottler (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestGlobalReplicationThrottler (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":9,"i1":9,"i2":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestGlobalReplicationThrottler.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev&nbsp;Class</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceFactory.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" target="_top">Frames</a></li>
+<li><a href="TestGlobalReplicationThrottler.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.replication.regionserver</div>
+<h2 title="Class TestGlobalReplicationThrottler" class="title">Class TestGlobalReplicationThrottler</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.replication.regionserver.TestGlobalReplicationThrottler</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.57">TestGlobalReplicationThrottler</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static org.apache.hadoop.conf.Configuration</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#conf1">conf1</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.apache.hadoop.conf.Configuration</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#conf2">conf2</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#famName">famName</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#LOG">LOG</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>org.junit.rules.TestName</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#name">name</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#numOfPeer">numOfPeer</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#REPLICATION_SOURCE_QUOTA">REPLICATION_SOURCE_QUOTA</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#ROW">ROW</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static byte[][]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#ROWS">ROWS</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#testQuotaNonZero">testQuotaNonZero</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#testQuotaPass">testQuotaPass</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#utility1">utility1</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#utility2">utility2</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#VALUE">VALUE</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#TestGlobalReplicationThrottler--">TestGlobalReplicationThrottler</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#setUpBeforeClass--">setUpBeforeClass</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#tearDownAfterClass--">tearDownAfterClass</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/replication/regionserver/TestGlobalReplicationThrottler.html#testQuota--">testQuota</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="CLASS_RULE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CLASS_RULE</h4>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.60">CLASS_RULE</a></pre>
+</li>
+</ul>
+<a name="LOG">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>LOG</h4>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.63">LOG</a></pre>
+</li>
+</ul>
+<a name="REPLICATION_SOURCE_QUOTA">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>REPLICATION_SOURCE_QUOTA</h4>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.64">REPLICATION_SOURCE_QUOTA</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.replication.regionserver.TestGlobalReplicationThrottler.REPLICATION_SOURCE_QUOTA">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="numOfPeer">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>numOfPeer</h4>
+<pre>private static&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.65">numOfPeer</a></pre>
+</li>
+</ul>
+<a name="conf1">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>conf1</h4>
+<pre>private static&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.66">conf1</a></pre>
+</li>
+</ul>
+<a name="conf2">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>conf2</h4>
+<pre>private static&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.67">conf2</a></pre>
+</li>
+</ul>
+<a name="utility1">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>utility1</h4>
+<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.69">utility1</a></pre>
+</li>
+</ul>
+<a name="utility2">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>utility2</h4>
+<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.70">utility2</a></pre>
+</li>
+</ul>
+<a name="famName">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>famName</h4>
+<pre>private static final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.72">famName</a></pre>
+</li>
+</ul>
+<a name="VALUE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>VALUE</h4>
+<pre>private static final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.73">VALUE</a></pre>
+</li>
+</ul>
+<a name="ROW">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ROW</h4>
+<pre>private static final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.74">ROW</a></pre>
+</li>
+</ul>
+<a name="ROWS">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ROWS</h4>
+<pre>private static final&nbsp;byte[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.75">ROWS</a></pre>
+</li>
+</ul>
+<a name="name">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>name</h4>
+<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.78">name</a></pre>
+</li>
+</ul>
+<a name="testQuotaPass">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testQuotaPass</h4>
+<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.121">testQuotaPass</a></pre>
+</li>
+</ul>
+<a name="testQuotaNonZero">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testQuotaNonZero</h4>
+<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.122">testQuotaNonZero</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="TestGlobalReplicationThrottler--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestGlobalReplicationThrottler</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.57">TestGlobalReplicationThrottler</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="setUpBeforeClass--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setUpBeforeClass</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.81">setUpBeforeClass</a>()
+                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="tearDownAfterClass--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tearDownAfterClass</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.115">tearDownAfterClass</a>()
+                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testQuota--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testQuota</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html#line.124">testQuota</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>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestGlobalReplicationThrottler.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev&nbsp;Class</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceFactory.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.html" target="_top">Frames</a></li>
+<li><a href="TestGlobalReplicationThrottler.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>


[40/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index 1e60ae7..2886526 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,8 +25,8 @@ under the License.
     <language>en-us</language>
     <copyright>&#169;2007 - 2018 The Apache Software Foundation</copyright>
     <item>
-      <title>File: 3619,
-             Errors: 16325,
+      <title>File: 3620,
+             Errors: 16262,
              Warnings: 0,
              Infos: 0
       </title>
@@ -111,7 +111,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  26
+                  0
                 </td>
               </tr>
                           <tr>
@@ -517,7 +517,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -3135,7 +3135,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -4955,7 +4955,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  11
+                  0
                 </td>
               </tr>
                           <tr>
@@ -9225,7 +9225,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  10
+                  7
                 </td>
               </tr>
                           <tr>
@@ -10961,7 +10961,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -13061,7 +13061,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  6
+                  0
                 </td>
               </tr>
                           <tr>
@@ -13411,7 +13411,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  4
+                  0
                 </td>
               </tr>
                           <tr>
@@ -28195,7 +28195,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  8
+                  0
                 </td>
               </tr>
                           <tr>
@@ -33165,7 +33165,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -39297,7 +39297,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
@@ -45042,6 +45042,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.TestGlobalReplicationThrottler.java">org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  3
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.snapshot.TestSecureExportSnapshot.java">org/apache/hadoop/hbase/snapshot/TestSecureExportSnapshot.java</a>
                 </td>
                 <td>
@@ -48999,7 +49013,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -49634,6 +49648,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.tool.PreUpgradeValidator.java">org/apache/hadoop/hbase/tool/PreUpgradeValidator.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.TestProtobufRpcServiceImpl.java">org/apache/hadoop/hbase/ipc/TestProtobufRpcServiceImpl.java</a>
                 </td>
                 <td>
@@ -49937,7 +49965,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -50544,20 +50572,6 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.TestGlobalThrottler.java">org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.java</a>
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  0
-                </td>
-              </tr>
-                          <tr>
-                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.conf.ConfigurationObserver.java">org/apache/hadoop/hbase/conf/ConfigurationObserver.java</a>
                 </td>
                 <td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index bc5f099..f620d29 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="20180601" />
+    <meta name="Date-Revision-yyyymmdd" content="20180602" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -375,7 +375,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-06-01</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-06-02</li>
             </p>
                 </div>
 

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index f8ec4f6..7bdeeb7 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="20180601" />
+    <meta name="Date-Revision-yyyymmdd" content="20180602" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -1105,7 +1105,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-06-01</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-06-02</li>
             </p>
                 </div>
 

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index d943205..585ea3c 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="20180601" />
+    <meta name="Date-Revision-yyyymmdd" content="20180602" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -969,7 +969,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-06-01</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-06-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-frame.html b/devapidocs/allclasses-frame.html
index 88fa858..0a983f8 100644
--- a/devapidocs/allclasses-frame.html
+++ b/devapidocs/allclasses-frame.html
@@ -1814,6 +1814,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/throttle/PressureAwareThroughputController.ActiveOperation.html" title="class in org.apache.hadoop.hbase.regionserver.throttle" target="classFrame">PressureAwareThroughputController.ActiveOperation</a></li>
 <li><a href="org/apache/hadoop/hbase/util/PrettyPrinter.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">PrettyPrinter</a></li>
 <li><a href="org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util" target="classFrame">PrettyPrinter.Unit</a></li>
+<li><a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool" target="classFrame">PreUpgradeValidator</a></li>
 <li><a href="org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc" target="classFrame"><span class="interfaceName">PriorityFunction</span></a></li>
 <li><a href="org/apache/hadoop/hbase/PrivateCellUtil.html" title="class in org.apache.hadoop.hbase" target="classFrame">PrivateCellUtil</a></li>
 <li><a href="org/apache/hadoop/hbase/PrivateCellUtil.EmptyByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase" target="classFrame">PrivateCellUtil.EmptyByteBufferExtendedCell</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-noframe.html b/devapidocs/allclasses-noframe.html
index 2085c21..90d570f 100644
--- a/devapidocs/allclasses-noframe.html
+++ b/devapidocs/allclasses-noframe.html
@@ -1814,6 +1814,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/throttle/PressureAwareThroughputController.ActiveOperation.html" title="class in org.apache.hadoop.hbase.regionserver.throttle">PressureAwareThroughputController.ActiveOperation</a></li>
 <li><a href="org/apache/hadoop/hbase/util/PrettyPrinter.html" title="class in org.apache.hadoop.hbase.util">PrettyPrinter</a></li>
 <li><a href="org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util">PrettyPrinter.Unit</a></li>
+<li><a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">PreUpgradeValidator</a></li>
 <li><a href="org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc"><span class="interfaceName">PriorityFunction</span></a></li>
 <li><a href="org/apache/hadoop/hbase/PrivateCellUtil.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil</a></li>
 <li><a href="org/apache/hadoop/hbase/PrivateCellUtil.EmptyByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.EmptyByteBufferExtendedCell</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index bcfa32d..80b5954 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3768,21 +3768,21 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Fri Jun  1 14:39:32 UTC 2018"</code></td>
+<td class="colLast"><code>"Sat Jun  2 14:39:04 UTC 2018"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"d5ea926321d8339dbbb761b32bcdc043aed576ee"</code></td>
+<td class="colLast"><code>"8377873d22c25185127bc07ea055412d8e302a1a"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"e66fe4dc152ed206b3e863448e3a5389"</code></td>
+<td class="colLast"><code>"e6f5e6aac3e3902468201f3bd0da44da"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">
@@ -26665,6 +26665,25 @@
 </tbody>
 </table>
 </li>
+<li class="blockList">
+<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
+<caption><span>org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">PreUpgradeValidator</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th scope="col">Constant Field</th>
+<th class="colLast" scope="col">Value</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.tool.PreUpgradeValidator.NAME">
+<!--   -->
+</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/tool/PreUpgradeValidator.html#NAME">NAME</a></code></td>
+<td class="colLast"><code>"pre-upgrade"</code></td>
+</tr>
+</tbody>
+</table>
+</li>
 </ul>
 <ul class="blockList">
 <li class="blockList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index cef756d..0ee9808 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -1999,6 +1999,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotInfo.html#addOptions--">addOptions()</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotInfo.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotInfo</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#addOptions--">addOptions()</a></span> - Method in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">PreUpgradeValidator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addOptions--">addOptions()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/AbstractHBaseTool.html" title="class in org.apache.hadoop.hbase.util">AbstractHBaseTool</a></dt>
 <dd>
 <div class="block">Override this to add command-line options using <a href="org/apache/hadoop/hbase/util/AbstractHBaseTool.html#addOptWithArg-java.lang.String-java.lang.String-"><code>AbstractHBaseTool.addOptWithArg(java.lang.String, java.lang.String)</code></a>
@@ -8305,10 +8307,6 @@
 <div class="block">When scanning for a prefix the scan should stop immediately after the the last row that
  has the specified prefix.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#calculateTotalSizeOfStoreFiles-org.apache.hadoop.hbase.wal.WALEdit-">calculateTotalSizeOfStoreFiles(WALEdit)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a></dt>
-<dd>
-<div class="block">Calculate the total size of all the store files</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/regionserver/LogRollBackupSubprocedure.RSRollLogTask.html#call--">call()</a></span> - Method in class org.apache.hadoop.hbase.backup.regionserver.<a href="org/apache/hadoop/hbase/backup/regionserver/LogRollBackupSubprocedure.RSRollLogTask.html" title="class in org.apache.hadoop.hbase.backup.regionserver">LogRollBackupSubprocedure.RSRollLogTask</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#call--">call()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncAdminRequestRetryingCaller</a></dt>
@@ -21507,6 +21505,8 @@
 <dd>
 <div class="block">Type of encoding used for data blocks in HFile.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#DATA_BLOCK_ENCODING">DATA_BLOCK_ENCODING</a></span> - Static variable in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">PreUpgradeValidator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.html#DATA_BLOCK_ENCODING_BYTES">DATA_BLOCK_ENCODING_BYTES</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">ColumnFamilyDescriptorBuilder</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HConstants.html#DATA_FILE_UMASK_KEY">DATA_FILE_UMASK_KEY</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></dt>
@@ -26171,6 +26171,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotInfo.html#doWork--">doWork()</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotInfo.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotInfo</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#doWork--">doWork()</a></span> - Method in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">PreUpgradeValidator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/AbstractHBaseTool.html#doWork--">doWork()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/AbstractHBaseTool.html" title="class in org.apache.hadoop.hbase.util">AbstractHBaseTool</a></dt>
 <dd>
 <div class="block">The "main function" of the tool</div>
@@ -34795,6 +34797,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/model/ScannerModel.html#getBatch--">getBatch()</a></span> - Method in class org.apache.hadoop.hbase.rest.model.<a href="org/apache/hadoop/hbase/rest/model/ScannerModel.html" title="class in org.apache.hadoop.hbase.rest.model">ScannerModel</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#getBatchEntrySizeExcludeBulkLoad-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-">getBatchEntrySizeExcludeBulkLoad(WALEntryBatch)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper</a></dt>
+<dd>
+<div class="block">get batchEntry size excludes bulk load file sizes.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/HashTable.ResultHasher.html#getBatchHash--">getBatchHash()</a></span> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/HashTable.ResultHasher.html" title="class in org.apache.hadoop.hbase.mapreduce">HashTable.ResultHasher</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html#getBatchLimit--">getBatchLimit()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a></dt>
@@ -38142,7 +38148,9 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.html#getEntryCount--">getEntryCount()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.html" title="class in org.apache.hadoop.hbase.io.hfile">FixedFileTrailer</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#getEntrySize-org.apache.hadoop.hbase.wal.WAL.Entry-">getEntrySize(WAL.Entry)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#getEntrySizeExcludeBulkLoad-org.apache.hadoop.hbase.wal.WAL.Entry-">getEntrySizeExcludeBulkLoad(WAL.Entry)</a></span> - Static method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#getEntrySizeIncludeBulkLoad-org.apache.hadoop.hbase.wal.WAL.Entry-">getEntrySizeIncludeBulkLoad(WAL.Entry)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/ReadOnlyConfiguration.html#getEnum-java.lang.String-T-">getEnum(String, T)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/ReadOnlyConfiguration.html" title="class in org.apache.hadoop.hbase.coprocessor">ReadOnlyConfiguration</a></dt>
 <dd>&nbsp;</dd>
@@ -68247,6 +68255,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">PreUpgradeValidator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/WriteSinkCoprocessor.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/WriteSinkCoprocessor.html" title="class in org.apache.hadoop.hbase.tool">WriteSinkCoprocessor</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/trace/HBaseHTraceConfiguration.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.trace.<a href="org/apache/hadoop/hbase/trace/HBaseHTraceConfiguration.html" title="class in org.apache.hadoop.hbase.trace">HBaseHTraceConfiguration</a></dt>
@@ -69232,6 +69242,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#main-java.lang.String:A-">main(String[])</a></span> - Static method in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#main-java.lang.String:A-">main(String[])</a></span> - Static method in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">PreUpgradeValidator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/Base64.html#main-java.lang.String:A-">main(String[])</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/Base64.html" title="class in org.apache.hadoop.hbase.util">Base64</a></dt>
 <dd>
 <div class="block">Main program.</div>
@@ -75145,6 +75157,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#NAME">NAME</a></span> - Static variable in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#NAME">NAME</a></span> - Static variable in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">PreUpgradeValidator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/metrics2/lib/MetricsExecutorImpl.ThreadPoolExecutorThreadFactory.html#name">name</a></span> - Variable in class org.apache.hadoop.metrics2.lib.<a href="org/apache/hadoop/metrics2/lib/MetricsExecutorImpl.ThreadPoolExecutorThreadFactory.html" title="class in org.apache.hadoop.metrics2.lib">MetricsExecutorImpl.ThreadPoolExecutorThreadFactory</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/metrics2/lib/MutableHistogram.html#name">name</a></span> - Variable in class org.apache.hadoop.metrics2.lib.<a href="org/apache/hadoop/metrics2/lib/MutableHistogram.html" title="class in org.apache.hadoop.metrics2.lib">MutableHistogram</a></dt>
@@ -83584,6 +83598,12 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessController.html#preUpdateReplicationPeerConfig-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">preUpdateReplicationPeerConfig(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, String, ReplicationPeerConfig)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessController.html" title="class in org.apache.hadoop.hbase.security.access">AccessController</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">PreUpgradeValidator</span></a> - Class in <a href="org/apache/hadoop/hbase/tool/package-summary.html">org.apache.hadoop.hbase.tool</a></dt>
+<dd>
+<div class="block">Tool for validating that cluster can be upgraded from HBase 1.x to 2.0</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#PreUpgradeValidator--">PreUpgradeValidator()</a></span> - Constructor for class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">PreUpgradeValidator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/util/LRUDictionary.BidirectionalLRUMap.Node.html#prev">prev</a></span> - Variable in class org.apache.hadoop.hbase.io.util.<a href="org/apache/hadoop/hbase/io/util/LRUDictionary.BidirectionalLRUMap.Node.html" title="class in org.apache.hadoop.hbase.io.util">LRUDictionary.BidirectionalLRUMap.Node</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/HFileBlock.Header.html#PREV_BLOCK_OFFSET_INDEX">PREV_BLOCK_OFFSET_INDEX</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/HFileBlock.Header.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileBlock.Header</a></dt>
@@ -84563,6 +84583,8 @@ service.</div>
 <dd>
 <div class="block">Parse the command line options to set parameters the conf.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#processOptions-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">processOptions(CommandLine)</a></span> - Method in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">PreUpgradeValidator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/AbstractHBaseTool.html#processOptions-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">processOptions(CommandLine)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/AbstractHBaseTool.html" title="class in org.apache.hadoop.hbase.util">AbstractHBaseTool</a></dt>
 <dd>
 <div class="block">This method is called to process the options after they have been parsed.</div>
@@ -104685,6 +104707,10 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#sizeOfLogQueueKey">sizeOfLogQueueKey</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSourceImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#sizeOfStoreFilesIncludeBulkLoad-org.apache.hadoop.hbase.wal.WALEdit-">sizeOfStoreFilesIncludeBulkLoad(WALEdit)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a></dt>
+<dd>
+<div class="block">Calculate the total size of all the store files</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#sizePerFile">sizePerFile</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#sizeScope">sizeScope</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitFields</a></dt>
@@ -117129,6 +117155,8 @@ service.</div>
 <div class="block">Convert the passed snapshot description into a 'full' snapshot description based on default
  parameters, if none have been supplied.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#validateAll">validateAll</a></span> - Variable in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">PreUpgradeValidator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/coprocessor/AggregationHelper.html#validateArgAndGetPB-org.apache.hadoop.hbase.client.Scan-org.apache.hadoop.hbase.coprocessor.ColumnInterpreter-boolean-">validateArgAndGetPB(Scan, ColumnInterpreter&lt;R, S, P, Q, T&gt;, boolean)</a></span> - Static method in class org.apache.hadoop.hbase.client.coprocessor.<a href="org/apache/hadoop/hbase/client/coprocessor/AggregationHelper.html" title="class in org.apache.hadoop.hbase.client.coprocessor">AggregationHelper</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#validateBlockAddition-org.apache.hadoop.hbase.io.hfile.Cacheable-org.apache.hadoop.hbase.io.hfile.Cacheable-org.apache.hadoop.hbase.io.hfile.BlockCacheKey-">validateBlockAddition(Cacheable, Cacheable, BlockCacheKey)</a></span> - Static method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheUtil</a></dt>
@@ -117157,6 +117185,12 @@ service.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/MultiTableHFileOutputFormat.html#validateCompositeKey-byte:A-">validateCompositeKey(byte[])</a></span> - Static method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/MultiTableHFileOutputFormat.html" title="class in org.apache.hadoop.hbase.mapreduce">MultiTableHFileOutputFormat</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#validateDBE">validateDBE</a></span> - Variable in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">PreUpgradeValidator</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html#validateDBE--">validateDBE()</a></span> - Method in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/PreUpgradeValidator.html" title="class in org.apache.hadoop.hbase.tool">PreUpgradeValidator</a></dt>
+<dd>
+<div class="block">Check DataBlockEncodings for column families.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#validateFamiliesInHFiles-org.apache.hadoop.hbase.client.Table-java.util.Deque-boolean-">validateFamiliesInHFiles(Table, Deque&lt;LoadIncrementalHFiles.LoadQueueItem&gt;, boolean)</a></span> - Method in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles</a></dt>
 <dd>
 <div class="block">Checks whether there is any invalid family name in HFiles to be bulk loaded.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 90d5020..b385d9a 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -167,10 +167,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index b8e4cf9..554971a 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -552,24 +552,24 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html
index cf74b30..deead86 100644
--- a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html
+++ b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.575">ZKSplitLogManagerCoordination.CreateAsyncCallback</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.577">ZKSplitLogManagerCoordination.CreateAsyncCallback</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.zookeeper.AsyncCallback.StringCallback</pre>
 <div class="block">Asynchronous handler for zk create node results. Retries on failures.</div>
@@ -225,7 +225,7 @@ implements org.apache.zookeeper.AsyncCallback.StringCallback</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html#line.576">LOG</a></pre>
+<pre>private final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html#line.578">LOG</a></pre>
 </li>
 </ul>
 </li>
@@ -242,7 +242,7 @@ implements org.apache.zookeeper.AsyncCallback.StringCallback</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CreateAsyncCallback</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html#line.575">CreateAsyncCallback</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html#line.577">CreateAsyncCallback</a>()</pre>
 </li>
 </ul>
 </li>
@@ -259,7 +259,7 @@ implements org.apache.zookeeper.AsyncCallback.StringCallback</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>processResult</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html#line.579">processResult</a>(int&nbsp;rc,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html#line.581">processResult</a>(int&nbsp;rc,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;ctx,
                           <a href="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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html
index 20822bb..316cd8b 100644
--- a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html
+++ b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.706">ZKSplitLogManagerCoordination.CreateRescanAsyncCallback</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.708">ZKSplitLogManagerCoordination.CreateRescanAsyncCallback</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.zookeeper.AsyncCallback.StringCallback</pre>
 <div class="block">Asynchronous handler for zk create RESCAN-node results. Retries on failures.
@@ -228,7 +228,7 @@ implements org.apache.zookeeper.AsyncCallback.StringCallback</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html#line.707">LOG</a></pre>
+<pre>private final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html#line.709">LOG</a></pre>
 </li>
 </ul>
 </li>
@@ -245,7 +245,7 @@ implements org.apache.zookeeper.AsyncCallback.StringCallback</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CreateRescanAsyncCallback</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html#line.706">CreateRescanAsyncCallback</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html#line.708">CreateRescanAsyncCallback</a>()</pre>
 </li>
 </ul>
 </li>
@@ -262,7 +262,7 @@ implements org.apache.zookeeper.AsyncCallback.StringCallback</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>processResult</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html#line.710">processResult</a>(int&nbsp;rc,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html#line.712">processResult</a>(int&nbsp;rc,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;ctx,
                           <a href="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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html
index b4cdc88..84adf19 100644
--- a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html
+++ b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.664">ZKSplitLogManagerCoordination.DeleteAsyncCallback</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.666">ZKSplitLogManagerCoordination.DeleteAsyncCallback</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.zookeeper.AsyncCallback.VoidCallback</pre>
 <div class="block">Asynchronous handler for zk delete node results. Retries on failures.</div>
@@ -224,7 +224,7 @@ implements org.apache.zookeeper.AsyncCallback.VoidCallback</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html#line.665">LOG</a></pre>
+<pre>private final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html#line.667">LOG</a></pre>
 </li>
 </ul>
 </li>
@@ -241,7 +241,7 @@ implements org.apache.zookeeper.AsyncCallback.VoidCallback</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DeleteAsyncCallback</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html#line.664">DeleteAsyncCallback</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html#line.666">DeleteAsyncCallback</a>()</pre>
 </li>
 </ul>
 </li>
@@ -258,7 +258,7 @@ implements org.apache.zookeeper.AsyncCallback.VoidCallback</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>processResult</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html#line.668">processResult</a>(int&nbsp;rc,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html#line.670">processResult</a>(int&nbsp;rc,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;ctx)</pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html
index af7051d..f9a139a 100644
--- a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html
+++ b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.616">ZKSplitLogManagerCoordination.GetDataAsyncCallback</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.618">ZKSplitLogManagerCoordination.GetDataAsyncCallback</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.zookeeper.AsyncCallback.DataCallback</pre>
 <div class="block">Asynchronous handler for zk get-data-set-watch on node results. Retries on failures.</div>
@@ -226,7 +226,7 @@ implements org.apache.zookeeper.AsyncCallback.DataCallback</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html#line.617">LOG</a></pre>
+<pre>private final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html#line.619">LOG</a></pre>
 </li>
 </ul>
 </li>
@@ -243,7 +243,7 @@ implements org.apache.zookeeper.AsyncCallback.DataCallback</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>GetDataAsyncCallback</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html#line.616">GetDataAsyncCallback</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html#line.618">GetDataAsyncCallback</a>()</pre>
 </li>
 </ul>
 </li>
@@ -260,7 +260,7 @@ implements org.apache.zookeeper.AsyncCallback.DataCallback</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>processResult</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html#line.620">processResult</a>(int&nbsp;rc,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html#line.622">processResult</a>(int&nbsp;rc,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;ctx,
                           byte[]&nbsp;data,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html
index 330c1b0..fb96ec4 100644
--- a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html
+++ b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.html#line.549">ZKSplitLogManagerCoordination.TaskFinisher.Status</a>
+<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.html#line.551">ZKSplitLogManagerCoordination.TaskFinisher.Status</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/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html" title="enum in org.apache.hadoop.hbase.coordination">ZKSplitLogManagerCoordination.TaskFinisher.Status</a>&gt;</pre>
 <div class="block">status that can be returned finish()</div>
 </li>
@@ -215,7 +215,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>DONE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html" title="enum in org.apache.hadoop.hbase.coordination">ZKSplitLogManagerCoordination.TaskFinisher.Status</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html#line.553">DONE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html" title="enum in org.apache.hadoop.hbase.coordination">ZKSplitLogManagerCoordination.TaskFinisher.Status</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html#line.555">DONE</a></pre>
 <div class="block">task completed successfully</div>
 </li>
 </ul>
@@ -225,7 +225,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ERR</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html" title="enum in org.apache.hadoop.hbase.coordination">ZKSplitLogManagerCoordination.TaskFinisher.Status</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html#line.557">ERR</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html" title="enum in org.apache.hadoop.hbase.coordination">ZKSplitLogManagerCoordination.TaskFinisher.Status</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html#line.559">ERR</a></pre>
 <div class="block">task completed with error</div>
 </li>
 </ul>
@@ -243,7 +243,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/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html" title="enum in org.apache.hadoop.hbase.coordination">ZKSplitLogManagerCoordination.TaskFinisher.Status</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html#line.549">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html" title="enum in org.apache.hadoop.hbase.coordination">ZKSplitLogManagerCoordination.TaskFinisher.Status</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html#line.551">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:
@@ -263,7 +263,7 @@ for (ZKSplitLogManagerCoordination.TaskFinisher.Status c : ZKSplitLogManagerCoor
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html" title="enum in org.apache.hadoop.hbase.coordination">ZKSplitLogManagerCoordination.TaskFinisher.Status</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html#line.549">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/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html" title="enum in org.apache.hadoop.hbase.coordination">ZKSplitLogManagerCoordination.TaskFinisher.Status</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html#line.551">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/3797f0e6/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.html b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.html
index ff66b02..bd8f555 100644
--- a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.html
+++ b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.html
@@ -105,7 +105,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.545">ZKSplitLogManagerCoordination.TaskFinisher</a></pre>
+<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.html#line.547">ZKSplitLogManagerCoordination.TaskFinisher</a></pre>
 <div class="block"><a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.html" title="class in org.apache.hadoop.hbase.master"><code>SplitLogManager</code></a> can use objects implementing this
  interface to finish off a partially done task by
  <a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver"><code>SplitLogWorker</code></a>. This provides a
@@ -177,7 +177,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>finish</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html" title="enum in org.apache.hadoop.hbase.coordination">ZKSplitLogManagerCoordination.TaskFinisher.Status</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.html#line.569">finish</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;workerName,
+<pre><a href="../../../../../org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.Status.html" title="enum in org.apache.hadoop.hbase.coordination">ZKSplitLogManagerCoordination.TaskFinisher.Status</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.TaskFinisher.html#line.571">finish</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;workerName,
                                                          <a href="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;taskname)</pre>
 <div class="block">finish the partially done task. workername provides clue to where the partial results of the
  partially done tasks are present. taskname is the name of the task that was put up in


[17/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html
index 6d59738..61e3cd8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html
@@ -116,20 +116,20 @@
 <span class="sourceLineNo">108</span>   * @throws IOException if unable to connect to zk or config problem<a name="line.108"></a>
 <span class="sourceLineNo">109</span>   */<a name="line.109"></a>
 <span class="sourceLineNo">110</span>  public static RecoverableZooKeeper connect(Configuration conf, Watcher watcher)<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  throws IOException {<a name="line.111"></a>
+<span class="sourceLineNo">111</span>    throws IOException {<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    String ensemble = ZKConfig.getZKQuorumServersString(conf);<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    return connect(conf, ensemble, watcher);<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>  public static RecoverableZooKeeper connect(Configuration conf, String ensemble,<a name="line.116"></a>
 <span class="sourceLineNo">117</span>      Watcher watcher)<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  throws IOException {<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    throws IOException {<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    return connect(conf, ensemble, watcher, null);<a name="line.119"></a>
 <span class="sourceLineNo">120</span>  }<a name="line.120"></a>
 <span class="sourceLineNo">121</span><a name="line.121"></a>
 <span class="sourceLineNo">122</span>  public static RecoverableZooKeeper connect(Configuration conf, String ensemble,<a name="line.122"></a>
 <span class="sourceLineNo">123</span>      Watcher watcher, final String identifier)<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  throws IOException {<a name="line.124"></a>
+<span class="sourceLineNo">124</span>    throws IOException {<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    if(ensemble == null) {<a name="line.125"></a>
 <span class="sourceLineNo">126</span>      throw new IOException("Unable to determine ZooKeeper ensemble");<a name="line.126"></a>
 <span class="sourceLineNo">127</span>    }<a name="line.127"></a>
@@ -355,7 +355,7 @@
 <span class="sourceLineNo">347</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.347"></a>
 <span class="sourceLineNo">348</span>   */<a name="line.348"></a>
 <span class="sourceLineNo">349</span>  public static boolean watchAndCheckExists(ZKWatcher zkw, String znode)<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  throws KeeperException {<a name="line.350"></a>
+<span class="sourceLineNo">350</span>    throws KeeperException {<a name="line.350"></a>
 <span class="sourceLineNo">351</span>    try {<a name="line.351"></a>
 <span class="sourceLineNo">352</span>      Stat s = zkw.getRecoverableZooKeeper().exists(znode, zkw);<a name="line.352"></a>
 <span class="sourceLineNo">353</span>      boolean exists = s != null ? true : false;<a name="line.353"></a>
@@ -409,7 +409,7 @@
 <span class="sourceLineNo">401</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.401"></a>
 <span class="sourceLineNo">402</span>   */<a name="line.402"></a>
 <span class="sourceLineNo">403</span>  public static int checkExists(ZKWatcher zkw, String znode)<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  throws KeeperException {<a name="line.404"></a>
+<span class="sourceLineNo">404</span>    throws KeeperException {<a name="line.404"></a>
 <span class="sourceLineNo">405</span>    try {<a name="line.405"></a>
 <span class="sourceLineNo">406</span>      Stat s = zkw.getRecoverableZooKeeper().exists(znode, null);<a name="line.406"></a>
 <span class="sourceLineNo">407</span>      return s != null ? s.getVersion() : -1;<a name="line.407"></a>
@@ -446,7 +446,7 @@
 <span class="sourceLineNo">438</span>   */<a name="line.438"></a>
 <span class="sourceLineNo">439</span>  public static List&lt;String&gt; listChildrenAndWatchForNewChildren(<a name="line.439"></a>
 <span class="sourceLineNo">440</span>          ZKWatcher zkw, String znode)<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  throws KeeperException {<a name="line.441"></a>
+<span class="sourceLineNo">441</span>    throws KeeperException {<a name="line.441"></a>
 <span class="sourceLineNo">442</span>    try {<a name="line.442"></a>
 <span class="sourceLineNo">443</span>      List&lt;String&gt; children = zkw.getRecoverableZooKeeper().getChildren(znode, zkw);<a name="line.443"></a>
 <span class="sourceLineNo">444</span>      return children;<a name="line.444"></a>
@@ -501,7 +501,7 @@
 <span class="sourceLineNo">493</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.493"></a>
 <span class="sourceLineNo">494</span>   */<a name="line.494"></a>
 <span class="sourceLineNo">495</span>  public static List&lt;String&gt; listChildrenNoWatch(ZKWatcher zkw, String znode)<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  throws KeeperException {<a name="line.496"></a>
+<span class="sourceLineNo">496</span>    throws KeeperException {<a name="line.496"></a>
 <span class="sourceLineNo">497</span>    List&lt;String&gt; children = null;<a name="line.497"></a>
 <span class="sourceLineNo">498</span>    try {<a name="line.498"></a>
 <span class="sourceLineNo">499</span>      // List the children without watching<a name="line.499"></a>
@@ -558,7 +558,7 @@
 <span class="sourceLineNo">550</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.550"></a>
 <span class="sourceLineNo">551</span>   */<a name="line.551"></a>
 <span class="sourceLineNo">552</span>  public static boolean nodeHasChildren(ZKWatcher zkw, String znode)<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  throws KeeperException {<a name="line.553"></a>
+<span class="sourceLineNo">553</span>    throws KeeperException {<a name="line.553"></a>
 <span class="sourceLineNo">554</span>    try {<a name="line.554"></a>
 <span class="sourceLineNo">555</span>      return !zkw.getRecoverableZooKeeper().getChildren(znode, null).isEmpty();<a name="line.555"></a>
 <span class="sourceLineNo">556</span>    } catch(KeeperException.NoNodeException ke) {<a name="line.556"></a>
@@ -590,7 +590,7 @@
 <span class="sourceLineNo">582</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.582"></a>
 <span class="sourceLineNo">583</span>   */<a name="line.583"></a>
 <span class="sourceLineNo">584</span>  public static int getNumberOfChildren(ZKWatcher zkw, String znode)<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  throws KeeperException {<a name="line.585"></a>
+<span class="sourceLineNo">585</span>    throws KeeperException {<a name="line.585"></a>
 <span class="sourceLineNo">586</span>    try {<a name="line.586"></a>
 <span class="sourceLineNo">587</span>      Stat stat = zkw.getRecoverableZooKeeper().exists(znode, null);<a name="line.587"></a>
 <span class="sourceLineNo">588</span>      return stat == null ? 0 : stat.getNumChildren();<a name="line.588"></a>
@@ -641,7 +641,7 @@
 <span class="sourceLineNo">633</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.633"></a>
 <span class="sourceLineNo">634</span>   */<a name="line.634"></a>
 <span class="sourceLineNo">635</span>  public static byte [] getDataAndWatch(ZKWatcher zkw, String znode)<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  throws KeeperException {<a name="line.636"></a>
+<span class="sourceLineNo">636</span>    throws KeeperException {<a name="line.636"></a>
 <span class="sourceLineNo">637</span>    return getDataInternal(zkw, znode, null, true);<a name="line.637"></a>
 <span class="sourceLineNo">638</span>  }<a name="line.638"></a>
 <span class="sourceLineNo">639</span><a name="line.639"></a>
@@ -703,7 +703,7 @@
 <span class="sourceLineNo">695</span>   */<a name="line.695"></a>
 <span class="sourceLineNo">696</span>  public static byte [] getDataNoWatch(ZKWatcher zkw, String znode,<a name="line.696"></a>
 <span class="sourceLineNo">697</span>                                       Stat stat)<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  throws KeeperException {<a name="line.698"></a>
+<span class="sourceLineNo">698</span>    throws KeeperException {<a name="line.698"></a>
 <span class="sourceLineNo">699</span>    try {<a name="line.699"></a>
 <span class="sourceLineNo">700</span>      byte [] data = zkw.getRecoverableZooKeeper().getData(znode, null, stat);<a name="line.700"></a>
 <span class="sourceLineNo">701</span>      logRetrievedMsg(zkw, znode, data, false);<a name="line.701"></a>
@@ -809,7 +809,7 @@
 <span class="sourceLineNo">801</span>   */<a name="line.801"></a>
 <span class="sourceLineNo">802</span>  public static boolean setData(ZKWatcher zkw, String znode,<a name="line.802"></a>
 <span class="sourceLineNo">803</span>                                byte [] data, int expectedVersion)<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.804"></a>
+<span class="sourceLineNo">804</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.804"></a>
 <span class="sourceLineNo">805</span>    try {<a name="line.805"></a>
 <span class="sourceLineNo">806</span>      return zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion) != null;<a name="line.806"></a>
 <span class="sourceLineNo">807</span>    } catch (InterruptedException e) {<a name="line.807"></a>
@@ -853,12 +853,12 @@
 <span class="sourceLineNo">845</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.845"></a>
 <span class="sourceLineNo">846</span>   */<a name="line.846"></a>
 <span class="sourceLineNo">847</span>  public static void setData(ZKWatcher zkw, String znode, byte [] data)<a name="line.847"></a>
-<span class="sourceLineNo">848</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.848"></a>
+<span class="sourceLineNo">848</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.848"></a>
 <span class="sourceLineNo">849</span>    setData(zkw, (SetData)ZKUtilOp.setData(znode, data));<a name="line.849"></a>
 <span class="sourceLineNo">850</span>  }<a name="line.850"></a>
 <span class="sourceLineNo">851</span><a name="line.851"></a>
 <span class="sourceLineNo">852</span>  private static void setData(ZKWatcher zkw, SetData setData)<a name="line.852"></a>
-<span class="sourceLineNo">853</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.853"></a>
+<span class="sourceLineNo">853</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.853"></a>
 <span class="sourceLineNo">854</span>    SetDataRequest sd = (SetDataRequest)toZooKeeperOp(zkw, setData).toRequestRecord();<a name="line.854"></a>
 <span class="sourceLineNo">855</span>    setData(zkw, sd.getPath(), sd.getData(), sd.getVersion());<a name="line.855"></a>
 <span class="sourceLineNo">856</span>  }<a name="line.856"></a>
@@ -899,7 +899,7 @@
 <span class="sourceLineNo">891</span><a name="line.891"></a>
 <span class="sourceLineNo">892</span>  public static ArrayList&lt;ACL&gt; createACL(ZKWatcher zkw, String node,<a name="line.892"></a>
 <span class="sourceLineNo">893</span>                                         boolean isSecureZooKeeper) {<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    if (!node.startsWith(zkw.znodePaths.baseZNode)) {<a name="line.894"></a>
+<span class="sourceLineNo">894</span>    if (!node.startsWith(zkw.getZNodePaths().baseZNode)) {<a name="line.894"></a>
 <span class="sourceLineNo">895</span>      return Ids.OPEN_ACL_UNSAFE;<a name="line.895"></a>
 <span class="sourceLineNo">896</span>    }<a name="line.896"></a>
 <span class="sourceLineNo">897</span>    if (isSecureZooKeeper) {<a name="line.897"></a>
@@ -931,7 +931,7 @@
 <span class="sourceLineNo">923</span>      }<a name="line.923"></a>
 <span class="sourceLineNo">924</span>      // Certain znodes are accessed directly by the client,<a name="line.924"></a>
 <span class="sourceLineNo">925</span>      // so they must be readable by non-authenticated clients<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      if (zkw.znodePaths.isClientReadable(node)) {<a name="line.926"></a>
+<span class="sourceLineNo">926</span>      if (zkw.getZNodePaths().isClientReadable(node)) {<a name="line.926"></a>
 <span class="sourceLineNo">927</span>        acls.addAll(Ids.CREATOR_ALL_ACL);<a name="line.927"></a>
 <span class="sourceLineNo">928</span>        acls.addAll(Ids.READ_ACL_UNSAFE);<a name="line.928"></a>
 <span class="sourceLineNo">929</span>      } else {<a name="line.929"></a>
@@ -967,7 +967,7 @@
 <span class="sourceLineNo">959</span>   */<a name="line.959"></a>
 <span class="sourceLineNo">960</span>  public static boolean createEphemeralNodeAndWatch(ZKWatcher zkw,<a name="line.960"></a>
 <span class="sourceLineNo">961</span>      String znode, byte [] data)<a name="line.961"></a>
-<span class="sourceLineNo">962</span>  throws KeeperException {<a name="line.962"></a>
+<span class="sourceLineNo">962</span>    throws KeeperException {<a name="line.962"></a>
 <span class="sourceLineNo">963</span>    boolean ret = true;<a name="line.963"></a>
 <span class="sourceLineNo">964</span>    try {<a name="line.964"></a>
 <span class="sourceLineNo">965</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.965"></a>
@@ -1007,7 +1007,7 @@
 <span class="sourceLineNo">999</span>   */<a name="line.999"></a>
 <span class="sourceLineNo">1000</span>  public static boolean createNodeIfNotExistsAndWatch(<a name="line.1000"></a>
 <span class="sourceLineNo">1001</span>          ZKWatcher zkw, String znode, byte [] data)<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>  throws KeeperException {<a name="line.1002"></a>
+<span class="sourceLineNo">1002</span>    throws KeeperException {<a name="line.1002"></a>
 <span class="sourceLineNo">1003</span>    boolean ret = true;<a name="line.1003"></a>
 <span class="sourceLineNo">1004</span>    try {<a name="line.1004"></a>
 <span class="sourceLineNo">1005</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1005"></a>
@@ -1074,7 +1074,7 @@
 <span class="sourceLineNo">1066</span>   */<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>  public static int createAndWatch(ZKWatcher zkw,<a name="line.1067"></a>
 <span class="sourceLineNo">1068</span>      String znode, byte [] data)<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>  throws KeeperException, KeeperException.NodeExistsException {<a name="line.1069"></a>
+<span class="sourceLineNo">1069</span>    throws KeeperException, KeeperException.NodeExistsException {<a name="line.1069"></a>
 <span class="sourceLineNo">1070</span>    try {<a name="line.1070"></a>
 <span class="sourceLineNo">1071</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1071"></a>
 <span class="sourceLineNo">1072</span>          CreateMode.PERSISTENT);<a name="line.1072"></a>
@@ -1140,13 +1140,13 @@
 <span class="sourceLineNo">1132</span>   */<a name="line.1132"></a>
 <span class="sourceLineNo">1133</span>  public static void createAndFailSilent(ZKWatcher zkw,<a name="line.1133"></a>
 <span class="sourceLineNo">1134</span>      String znode, byte[] data)<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>  throws KeeperException {<a name="line.1135"></a>
+<span class="sourceLineNo">1135</span>    throws KeeperException {<a name="line.1135"></a>
 <span class="sourceLineNo">1136</span>    createAndFailSilent(zkw,<a name="line.1136"></a>
 <span class="sourceLineNo">1137</span>        (CreateAndFailSilent)ZKUtilOp.createAndFailSilent(znode, data));<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>  }<a name="line.1138"></a>
 <span class="sourceLineNo">1139</span><a name="line.1139"></a>
 <span class="sourceLineNo">1140</span>  private static void createAndFailSilent(ZKWatcher zkw, CreateAndFailSilent cafs)<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>  throws KeeperException {<a name="line.1141"></a>
+<span class="sourceLineNo">1141</span>    throws KeeperException {<a name="line.1141"></a>
 <span class="sourceLineNo">1142</span>    CreateRequest create = (CreateRequest)toZooKeeperOp(zkw, cafs).toRequestRecord();<a name="line.1142"></a>
 <span class="sourceLineNo">1143</span>    String znode = create.getPath();<a name="line.1143"></a>
 <span class="sourceLineNo">1144</span>    try {<a name="line.1144"></a>
@@ -1181,7 +1181,7 @@
 <span class="sourceLineNo">1173</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1173"></a>
 <span class="sourceLineNo">1174</span>   */<a name="line.1174"></a>
 <span class="sourceLineNo">1175</span>  public static void createWithParents(ZKWatcher zkw, String znode)<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>  throws KeeperException {<a name="line.1176"></a>
+<span class="sourceLineNo">1176</span>    throws KeeperException {<a name="line.1176"></a>
 <span class="sourceLineNo">1177</span>    createWithParents(zkw, znode, new byte[0]);<a name="line.1177"></a>
 <span class="sourceLineNo">1178</span>  }<a name="line.1178"></a>
 <span class="sourceLineNo">1179</span><a name="line.1179"></a>
@@ -1199,7 +1199,7 @@
 <span class="sourceLineNo">1191</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1191"></a>
 <span class="sourceLineNo">1192</span>   */<a name="line.1192"></a>
 <span class="sourceLineNo">1193</span>  public static void createWithParents(ZKWatcher zkw, String znode, byte[] data)<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>  throws KeeperException {<a name="line.1194"></a>
+<span class="sourceLineNo">1194</span>    throws KeeperException {<a name="line.1194"></a>
 <span class="sourceLineNo">1195</span>    try {<a name="line.1195"></a>
 <span class="sourceLineNo">1196</span>      if(znode == null) {<a name="line.1196"></a>
 <span class="sourceLineNo">1197</span>        return;<a name="line.1197"></a>
@@ -1224,7 +1224,7 @@
 <span class="sourceLineNo">1216</span>   * Delete the specified node.  Sets no watches.  Throws all exceptions.<a name="line.1216"></a>
 <span class="sourceLineNo">1217</span>   */<a name="line.1217"></a>
 <span class="sourceLineNo">1218</span>  public static void deleteNode(ZKWatcher zkw, String node)<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  throws KeeperException {<a name="line.1219"></a>
+<span class="sourceLineNo">1219</span>    throws KeeperException {<a name="line.1219"></a>
 <span class="sourceLineNo">1220</span>    deleteNode(zkw, node, -1);<a name="line.1220"></a>
 <span class="sourceLineNo">1221</span>  }<a name="line.1221"></a>
 <span class="sourceLineNo">1222</span><a name="line.1222"></a>
@@ -1234,7 +1234,7 @@
 <span class="sourceLineNo">1226</span>   */<a name="line.1226"></a>
 <span class="sourceLineNo">1227</span>  public static boolean deleteNode(ZKWatcher zkw, String node,<a name="line.1227"></a>
 <span class="sourceLineNo">1228</span>                                   int version)<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>  throws KeeperException {<a name="line.1229"></a>
+<span class="sourceLineNo">1229</span>    throws KeeperException {<a name="line.1229"></a>
 <span class="sourceLineNo">1230</span>    try {<a name="line.1230"></a>
 <span class="sourceLineNo">1231</span>      zkw.getRecoverableZooKeeper().delete(node, version);<a name="line.1231"></a>
 <span class="sourceLineNo">1232</span>      return true;<a name="line.1232"></a>
@@ -1254,7 +1254,7 @@
 <span class="sourceLineNo">1246</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1246"></a>
 <span class="sourceLineNo">1247</span>   */<a name="line.1247"></a>
 <span class="sourceLineNo">1248</span>  public static void deleteNodeFailSilent(ZKWatcher zkw, String node)<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>  throws KeeperException {<a name="line.1249"></a>
+<span class="sourceLineNo">1249</span>    throws KeeperException {<a name="line.1249"></a>
 <span class="sourceLineNo">1250</span>    deleteNodeFailSilent(zkw,<a name="line.1250"></a>
 <span class="sourceLineNo">1251</span>      (DeleteNodeFailSilent)ZKUtilOp.deleteNodeFailSilent(node));<a name="line.1251"></a>
 <span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
@@ -1280,7 +1280,7 @@
 <span class="sourceLineNo">1272</span>   * children.<a name="line.1272"></a>
 <span class="sourceLineNo">1273</span>   */<a name="line.1273"></a>
 <span class="sourceLineNo">1274</span>  public static void deleteNodeRecursively(ZKWatcher zkw, String node)<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>  throws KeeperException {<a name="line.1275"></a>
+<span class="sourceLineNo">1275</span>    throws KeeperException {<a name="line.1275"></a>
 <span class="sourceLineNo">1276</span>    deleteNodeRecursivelyMultiOrSequential(zkw, true, node);<a name="line.1276"></a>
 <span class="sourceLineNo">1277</span>  }<a name="line.1277"></a>
 <span class="sourceLineNo">1278</span><a name="line.1278"></a>
@@ -1743,7 +1743,7 @@
 <span class="sourceLineNo">1735</span>  public static String dump(ZKWatcher zkw) {<a name="line.1735"></a>
 <span class="sourceLineNo">1736</span>    StringBuilder sb = new StringBuilder();<a name="line.1736"></a>
 <span class="sourceLineNo">1737</span>    try {<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>      sb.append("HBase is rooted at ").append(zkw.znodePaths.baseZNode);<a name="line.1738"></a>
+<span class="sourceLineNo">1738</span>      sb.append("HBase is rooted at ").append(zkw.getZNodePaths().baseZNode);<a name="line.1738"></a>
 <span class="sourceLineNo">1739</span>      sb.append("\nActive master address: ");<a name="line.1739"></a>
 <span class="sourceLineNo">1740</span>      try {<a name="line.1740"></a>
 <span class="sourceLineNo">1741</span>        sb.append(MasterAddressTracker.getMasterAddress(zkw));<a name="line.1741"></a>
@@ -1751,400 +1751,401 @@
 <span class="sourceLineNo">1743</span>        sb.append("&lt;&lt;FAILED LOOKUP: " + e.getMessage() + "&gt;&gt;");<a name="line.1743"></a>
 <span class="sourceLineNo">1744</span>      }<a name="line.1744"></a>
 <span class="sourceLineNo">1745</span>      sb.append("\nBackup master addresses:");<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      for (String child : listChildrenNoWatch(zkw, zkw.znodePaths.backupMasterAddressesZNode)) {<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        sb.append("\n ").append(child);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      }<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        + new MetaTableLocator().getMetaRegionLocation(zkw));<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>                    + new MetaTableLocator().getMetaRegionLocation(zkw, i));<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      }<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      sb.append("\nRegion servers:");<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>      for (String child : listChildrenNoWatch(zkw, zkw.znodePaths.rsZNode)) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        sb.append("\n ").append(child);<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      try {<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      } catch (KeeperException ke) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>      }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>      for (String server : servers) {<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>        sb.append("\n ").append(server);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        try {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          if (stat == null) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>            break;<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>          }<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span><a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>          for (String s : stat) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            sb.append("\n  ").append(s);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>          }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>        } catch (Exception e) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>        }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    } catch (KeeperException ke) {<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      sb.append("\n" + ke.getMessage());<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    return sb.toString();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>  }<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span><a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>  /**<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>   *<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>   */<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>      throws KeeperException {<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    String replicationZnode = zkw.znodePaths.replicationZNode;<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span><a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>      return;<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>    }<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span><a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>    // do a ls -r on this znode<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    for (String child : children) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      String znode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (znode.equals(zkw.znodePaths.peersZNode)) {<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>        appendPeersZnodes(zkw, znode, sb);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      } else if (znode.equals(zkw.znodePaths.queuesZNode)) {<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        appendRSZnodes(zkw, znode, sb);<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      } else if (znode.equals(zkw.znodePaths.hfileRefsZNode)) {<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>        appendHFileRefsZnodes(zkw, znode, sb);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>      }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>    }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>  }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span><a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>  private static void appendHFileRefsZnodes(ZKWatcher zkw, String hfileRefsZnode,<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    sb.append("\n").append(hfileRefsZnode).append(": ");<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, hfileRefsZnode)) {<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      String znodeToProcess = ZNodePaths.joinZNode(hfileRefsZnode, peerIdZnode);<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>      List&lt;String&gt; peerHFileRefsZnodes = ZKUtil.listChildrenNoWatch(zkw, znodeToProcess);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      int size = peerHFileRefsZnodes.size();<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      for (int i = 0; i &lt; size; i++) {<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        sb.append(peerHFileRefsZnodes.get(i));<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        if (i != size - 1) {<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          sb.append(", ");<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>        }<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>      }<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    }<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>  }<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span><a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>  /**<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>   * @return aq string of replication znodes and log positions<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>   */<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>    StringBuilder sb = new StringBuilder();<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>    return sb.toString();<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>  }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span><a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>      throws KeeperException {<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>    stack.add(znode);<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>    do {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      byte[] data;<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      try {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      } catch (InterruptedException e) {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>        zkw.interruptedException(e);<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>        return;<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      }<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        long position = 0;<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        try {<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>          sb.append(position);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        } catch (DeserializationException ignored) {<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>        } catch (InterruptedException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>          zkw.interruptedException(e);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>          return;<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>        }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>      }<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>    } while (stack.size() &gt; 0);<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>  }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span><a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      byte[] data;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>      try {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      } catch (InterruptedException e) {<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>        zkw.interruptedException(e);<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        return;<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>      }<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>      // parse the data of the above peer znode.<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      try {<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>        String clusterKey = builder.getClusterkey();<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        // add the peer-state.<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>      } catch (IOException ipbe) {<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>  }<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span><a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      "peer-state");<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>      if (!child.equals(peerState)) {<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>        continue;<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span><a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      byte[] peerStateData;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>      try {<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>        sb.append(builder.getState().name());<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      } catch (IOException ipbe) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      } catch (InterruptedException e) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>        zkw.interruptedException(e);<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>        return;<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  }<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span><a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>  /**<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>   * Gets the statistics from the given server.<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>   *<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * @param server  The server to get the statistics from.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param timeout  The socket timeout to use.<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @return The array of response strings.<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   * @throws IOException When the socket communication fails.<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>   */<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>  public static String[] getServerStats(String server, int timeout)<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>  throws IOException {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    String[] sp = server.split(":");<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    if (sp == null || sp.length == 0) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>      return null;<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    }<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span><a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>    String host = sp[0];<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span><a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    try (Socket socket = new Socket()) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      socket.connect(sockAddr, timeout);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span><a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      socket.setSoTimeout(timeout);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          BufferedReader in = new BufferedReader(<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>        out.println("stat");<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>        out.flush();<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>        while (true) {<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>          String line = in.readLine();<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>          if (line != null) {<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>            res.add(line);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>          } else {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>            break;<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        }<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        return res.toArray(new String[res.size()]);<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>      }<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    }<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>  }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    if (!LOG.isTraceEnabled()) {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>      return;<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    }<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span><a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      " byte(s) of data from znode " + znode +<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>          znode.startsWith(zkw.znodePaths.metaZNodePrefix)?<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>            getServerNameOrEmptyString(data):<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>          znode.startsWith(zkw.znodePaths.backupMasterAddressesZNode)?<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>            getServerNameOrEmptyString(data):<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>  }<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    try {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    } catch (DeserializationException e) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>      return "";<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    }<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>  }<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span><a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>  /**<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>   * @throws IOException on ZK errors<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>   */<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>  public static void waitForBaseZNode(Configuration conf) throws IOException {<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    LOG.info("Waiting until the base znode is available");<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>    String parentZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>        HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>    ZooKeeper zk = new ZooKeeper(ZKConfig.getZKQuorumServersString(conf),<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>        conf.getInt(HConstants.ZK_SESSION_TIMEOUT,<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>        HConstants.DEFAULT_ZK_SESSION_TIMEOUT), EmptyWatcher.instance);<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span><a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final int maxTimeMs = 10000;<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span><a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>    KeeperException keeperEx = null;<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    try {<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      try {<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>        for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>          try {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>            if (zk.exists(parentZNode, false) != null) {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>              LOG.info("Parent znode exists: " + parentZNode);<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>              keeperEx = null;<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>              break;<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>            }<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          } catch (KeeperException e) {<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>            keeperEx = e;<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          }<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>          Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>        }<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>      } finally {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>        zk.close();<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>      }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    } catch (InterruptedException ex) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>      Thread.currentThread().interrupt();<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    if (keeperEx != null) {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>      throw new IOException(keeperEx);<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span><a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>  /**<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>   * Convert a {@link DeserializationException} to a more palatable {@link KeeperException}.<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>   * Used when can't let a {@link DeserializationException} out w/o changing public API.<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>   * @param e Exception to convert<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>   * @return Converted exception<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>   */<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>  public static KeeperException convert(final DeserializationException e) {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    KeeperException ke = new KeeperException.DataInconsistencyException();<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>    ke.initCause(e);<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>    return ke;<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>  }<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span><a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>  /**<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>   * Recursively print the current state of ZK (non-transactional)<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>   * @param root name of the root directory in zk to print<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>   */<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>  public static void logZKTree(ZKWatcher zkw, String root) {<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    if (!LOG.isDebugEnabled()) {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      return;<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    }<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span><a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>    LOG.debug("Current zk system:");<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>    String prefix = "|-";<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>    LOG.debug(prefix + root);<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    try {<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      logZKTree(zkw, root, prefix);<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>    } catch (KeeperException e) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      throw new RuntimeException(e);<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    }<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>  }<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span><a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>  /**<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>   * Helper method to print the current state of the ZK tree.<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * @see #logZKTree(ZKWatcher, String)<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * @throws KeeperException if an unexpected exception occurs<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   */<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>  protected static void logZKTree(ZKWatcher zkw, String root, String prefix)<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      throws KeeperException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, root);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span><a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>    if (children == null) {<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      return;<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>    }<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span><a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    for (String child : children) {<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>      LOG.debug(prefix + child);<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      String node = ZNodePaths.joinZNode(root.equals("/") ? "" : root, child);<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      logZKTree(zkw, node, prefix + "---");<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span><a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  /**<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>   * @param position the position to serialize<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>   * @return Serialized protobuf of &lt;code&gt;position&lt;/code&gt; with pb magic prefix prepended suitable<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>   *         for use as content of an wal position in a replication queue.<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>   */<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>  public static byte[] positionToByteArray(final long position) {<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>    byte[] bytes = ReplicationProtos.ReplicationHLogPosition.newBuilder().setPosition(position)<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>        .build().toByteArray();<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    return ProtobufUtil.prependPBMagic(bytes);<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>  }<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span><a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  /**<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>   * @param bytes - Content of a WAL position znode.<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>   * @return long - The current WAL position.<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>   * @throws DeserializationException if the WAL position cannot be parsed<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>   */<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>  public static long parseWALPositionFrom(final byte[] bytes) throws DeserializationException {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>    if (bytes == null) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      throw new DeserializationException("Unable to parse null WAL position.");<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>    }<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    if (ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      ReplicationProtos.ReplicationHLogPosition.Builder builder =<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          ReplicationProtos.ReplicationHLogPosition.newBuilder();<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>      ReplicationProtos.ReplicationHLogPosition position;<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>      try {<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        position = builder.build();<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      } catch (IOException e) {<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>        throw new DeserializationException(e);<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      return position.getPosition();<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    } else {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>      if (bytes.length &gt; 0) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>        return Bytes.toLong(bytes);<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>      return 0;<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  }<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>}<a name="line.2139"></a>
+<span class="sourceLineNo">1746</span>      for (String child : listChildrenNoWatch(zkw,<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>              zkw.getZNodePaths().backupMasterAddressesZNode)) {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        sb.append("\n ").append(child);<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>      }<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        + new MetaTableLocator().getMetaRegionLocation(zkw));<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>                    + new MetaTableLocator().getMetaRegionLocation(zkw, i));<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      }<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      sb.append("\nRegion servers:");<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      for (String child : listChildrenNoWatch(zkw, zkw.getZNodePaths().rsZNode)) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>        sb.append("\n ").append(child);<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>      }<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>      try {<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      } catch (KeeperException ke) {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>      for (String server : servers) {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>        sb.append("\n ").append(server);<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        try {<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>          if (stat == null) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>            break;<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>          }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span><a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          for (String s : stat) {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>            sb.append("\n  ").append(s);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          }<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>        } catch (Exception e) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        }<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>      }<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    } catch (KeeperException ke) {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      sb.append("\n" + ke.getMessage());<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>    }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    return sb.toString();<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  /**<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>   *<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>   */<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      throws KeeperException {<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>    String replicationZnode = zkw.getZNodePaths().replicationZNode;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span><a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>      return;<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    }<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span><a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // do a ls -r on this znode<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>    for (String child : children) {<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      String znode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>      if (znode.equals(zkw.getZNodePaths().peersZNode)) {<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>        appendPeersZnodes(zkw, znode, sb);<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>      } else if (znode.equals(zkw.getZNodePaths().queuesZNode)) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        appendRSZnodes(zkw, znode, sb);<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      } else if (znode.equals(zkw.getZNodePaths().hfileRefsZNode)) {<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>        appendHFileRefsZnodes(zkw, znode, sb);<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      }<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>    }<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>  }<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span><a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>  private static void appendHFileRefsZnodes(ZKWatcher zkw, String hfileRefsZnode,<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>    sb.append("\n").append(hfileRefsZnode).append(": ");<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, hfileRefsZnode)) {<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      String znodeToProcess = ZNodePaths.joinZNode(hfileRefsZnode, peerIdZnode);<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>      List&lt;String&gt; peerHFileRefsZnodes = ZKUtil.listChildrenNoWatch(zkw, znodeToProcess);<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>      int size = peerHFileRefsZnodes.size();<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>      for (int i = 0; i &lt; size; i++) {<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>        sb.append(peerHFileRefsZnodes.get(i));<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (i != size - 1) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          sb.append(", ");<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>      }<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    }<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>  }<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span><a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>  /**<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>   * @return aq string of replication znodes and log positions<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>   */<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>    StringBuilder sb = new StringBuilder();<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    return sb.toString();<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>  }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span><a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>      throws KeeperException {<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    stack.add(znode);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>    do {<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      byte[] data;<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      try {<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      } catch (InterruptedException e) {<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>        zkw.interruptedException(e);<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>        return;<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      }<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>        long position = 0;<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>        try {<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>          sb.append(position);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        } catch (DeserializationException ignored) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        } catch (InterruptedException e) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>          zkw.interruptedException(e);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>          return;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      }<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    } while (stack.size() &gt; 0);<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>  }<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span><a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>      byte[] data;<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>      try {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>      } catch (InterruptedException e) {<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>        zkw.interruptedException(e);<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>        return;<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>      }<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // parse the data of the above peer znode.<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      try {<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>        String clusterKey = builder.getClusterkey();<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        // add the peer-state.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>      } catch (IOException ipbe) {<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>      }<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>    }<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>  }<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span><a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      "peer-state");<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (!child.equals(peerState)) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        continue;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span><a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>      byte[] peerStateData;<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>      try {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        sb.append(builder.getState().name());<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>      } catch (IOException ipbe) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      } catch (InterruptedException e) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>        zkw.interruptedException(e);<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>    }<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>  }<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span><a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>  /**<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>   * Gets the statistics from the given server.<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>   *<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>   * @param server  The server to get the statistics from.<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>   * @param timeout  The socket timeout to use.<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>   * @return The array of response strings.<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>   * @throws IOException When the socket communication fails.<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   */<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>  public static String[] getServerStats(String server, int timeout)<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>    throws IOException {<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>    String[] sp = server.split(":");<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>    if (sp == null || sp.length == 0) {<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>      return null;<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>    }<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span><a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    String host = sp[0];<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span><a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    try (Socket socket = new Socket()) {<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>      socket.connect(sockAddr, timeout);<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span><a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>      socket.setSoTimeout(timeout);<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>          BufferedReader in = new BufferedReader(<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        out.println("stat");<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>        out.flush();<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>        while (true) {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>          String line = in.readLine();<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>          if (line != null) {<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            res.add(line);<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          } else {<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>            break;<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>          }<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>        }<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>        return res.toArray(new String[res.size()]);<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>      }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    }<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>  }<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>    if (!LOG.isTraceEnabled()) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      return;<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>    }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span><a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>      " byte(s) of data from znode " + znode +<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>          znode.startsWith(zkw.getZNodePaths().metaZNodePrefix)?<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>            getServerNameOrEmptyString(data):<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>          znode.startsWith(zkw.getZNodePaths().backupMasterAddressesZNode)?<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>            getServerNameOrEmptyString(data):<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>  }<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span><a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    try {<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>    } catch (DeserializationException e) {<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>      return "";<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    }<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>  }<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span><a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>  /**<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html
index 80259dd..ec465b9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html
@@ -130,629 +130,631 @@
 <span class="sourceLineNo">122</span>  public int remainingTasksInCoordination() {<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    int count = 0;<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    try {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      List&lt;String&gt; tasks = ZKUtil.listChildrenNoWatch(watcher, watcher.znodePaths.splitLogZNode);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      if (tasks != null) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        int listSize = tasks.size();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        for (int i = 0; i &lt; listSize; i++) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>          if (!ZKSplitLog.isRescanNode(tasks.get(i))) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>            count++;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>          }<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    } catch (KeeperException ke) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      LOG.warn("Failed to check remaining tasks", ke);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      count = -1;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    return count;<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>   * It is possible for a task to stay in UNASSIGNED state indefinitely - say SplitLogManager wants<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * to resubmit a task. It forces the task to UNASSIGNED state but it dies before it could create<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * the RESCAN task node to signal the SplitLogWorkers to pick up the task. To prevent this<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * scenario the SplitLogManager resubmits all orphan and UNASSIGNED tasks at startup.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @param path<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private void handleUnassignedTask(String path) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      return;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    Task task = findOrCreateOrphanTask(path);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    if (task.isOrphan() &amp;&amp; (task.incarnation.get() == 0)) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      LOG.info("Resubmitting unassigned orphan task " + path);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      // ignore failure to resubmit. The timeout-monitor will handle it later<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      // albeit in a more crude fashion<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      resubmitTask(path, task, FORCE);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void deleteTask(String path) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    deleteNode(path, zkretries);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public boolean resubmitTask(String path, Task task, ResubmitDirective directive) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    // its ok if this thread misses the update to task.deleted. It will fail later<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    if (task.status != IN_PROGRESS) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      return false;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    int version;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    if (directive != FORCE) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      // We're going to resubmit:<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      // 1) immediately if the worker server is now marked as dead<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      // 2) after a configurable timeout if the server is not marked as dead but has still not<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      // finished the task. This allows to continue if the worker cannot actually handle it,<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      // for any reason.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      final long time = EnvironmentEdgeManager.currentTime() - task.last_update;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      final boolean alive =<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          details.getMaster().getServerManager() != null ? details.getMaster().getServerManager()<a name="line.181"></a>
-<span class="sourceLineNo">182</span>              .isServerOnline(task.cur_worker_name) : true;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      if (alive &amp;&amp; time &lt; timeout) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        LOG.trace("Skipping the resubmit of " + task.toString() + "  because the server "<a name="line.184"></a>
-<span class="sourceLineNo">185</span>            + task.cur_worker_name + " is not marked as dead, we waited for " + time<a name="line.185"></a>
-<span class="sourceLineNo">186</span>            + " while the timeout is " + timeout);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return false;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      if (task.unforcedResubmits.get() &gt;= resubmitThreshold) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        if (!task.resubmitThresholdReached) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          task.resubmitThresholdReached = true;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          SplitLogCounters.tot_mgr_resubmit_threshold_reached.increment();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>          LOG.info("Skipping resubmissions of task " + path + " because threshold "<a name="line.194"></a>
-<span class="sourceLineNo">195</span>              + resubmitThreshold + " reached");<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        return false;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // race with heartbeat() that might be changing last_version<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      version = task.last_version;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    } else {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      SplitLogCounters.tot_mgr_resubmit_force.increment();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      version = -1;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    LOG.info("Resubmitting task " + path);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    task.incarnation.incrementAndGet();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    boolean result = resubmit(path, version);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    if (!result) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return false;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    // don't count forced resubmits<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    if (directive != FORCE) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      task.unforcedResubmits.incrementAndGet();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    task.setUnassigned();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    rescan(Long.MAX_VALUE);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    SplitLogCounters.tot_mgr_resubmit.increment();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    return true;<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">125</span>      List&lt;String&gt; tasks = ZKUtil.listChildrenNoWatch(watcher,<a name="line.125"></a>
+<span class="sourceLineNo">126</span>              watcher.getZNodePaths().splitLogZNode);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      if (tasks != null) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        int listSize = tasks.size();<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        for (int i = 0; i &lt; listSize; i++) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>          if (!ZKSplitLog.isRescanNode(tasks.get(i))) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>            count++;<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>      }<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    } catch (KeeperException ke) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      LOG.warn("Failed to check remaining tasks", ke);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      count = -1;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    return count;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * It is possible for a task to stay in UNASSIGNED state indefinitely - say SplitLogManager wants<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * to resubmit a task. It forces the task to UNASSIGNED state but it dies before it could create<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * the RESCAN task node to signal the SplitLogWorkers to pick up the task. To prevent this<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * scenario the SplitLogManager resubmits all orphan and UNASSIGNED tasks at startup.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * @param path<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private void handleUnassignedTask(String path) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    Task task = findOrCreateOrphanTask(path);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    if (task.isOrphan() &amp;&amp; (task.incarnation.get() == 0)) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      LOG.info("Resubmitting unassigned orphan task " + path);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // ignore failure to resubmit. The timeout-monitor will handle it later<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // albeit in a more crude fashion<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      resubmitTask(path, task, FORCE);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void deleteTask(String path) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    deleteNode(path, zkretries);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  public boolean resubmitTask(String path, Task task, ResubmitDirective directive) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    // its ok if this thread misses the update to task.deleted. It will fail later<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    if (task.status != IN_PROGRESS) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      return false;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    int version;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    if (directive != FORCE) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      // We're going to resubmit:<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      // 1) immediately if the worker server is now marked as dead<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      // 2) after a configurable timeout if the server is not marked as dead but has still not<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      // finished the task. This allows to continue if the worker cannot actually handle it,<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      // for any reason.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      final long time = EnvironmentEdgeManager.currentTime() - task.last_update;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      final boolean alive =<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          details.getMaster().getServerManager() != null ? details.getMaster().getServerManager()<a name="line.182"></a>
+<span class="sourceLineNo">183</span>              .isServerOnline(task.cur_worker_name) : true;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      if (alive &amp;&amp; time &lt; timeout) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        LOG.trace("Skipping the resubmit of " + task.toString() + "  because the server "<a name="line.185"></a>
+<span class="sourceLineNo">186</span>            + task.cur_worker_name + " is not marked as dead, we waited for " + time<a name="line.186"></a>
+<span class="sourceLineNo">187</span>            + " while the timeout is " + timeout);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        return false;<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>      if (task.unforcedResubmits.get() &gt;= resubmitThreshold) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        if (!task.resubmitThresholdReached) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          task.resubmitThresholdReached = true;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          SplitLogCounters.tot_mgr_resubmit_threshold_reached.increment();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          LOG.info("Skipping resubmissions of task " + path + " because threshold "<a name="line.195"></a>
+<span class="sourceLineNo">196</span>              + resubmitThreshold + " reached");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        }<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>      // race with heartbeat() that might be changing last_version<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      version = task.last_version;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } else {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      SplitLogCounters.tot_mgr_resubmit_force.increment();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      version = -1;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    LOG.info("Resubmitting task " + path);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    task.incarnation.incrementAndGet();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    boolean result = resubmit(path, version);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    if (!result) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return false;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // don't count forced resubmits<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    if (directive != FORCE) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      task.unforcedResubmits.incrementAndGet();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    task.setUnassigned();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    rescan(Long.MAX_VALUE);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    SplitLogCounters.tot_mgr_resubmit.increment();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    return true;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
 <span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  @Override<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  public void checkTasks() {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    rescan(Long.MAX_VALUE);<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>   * signal the workers that a task was resubmitted by creating the RESCAN node.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  private void rescan(long retries) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    // The RESCAN node will be deleted almost immediately by the<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    // SplitLogManager as soon as it is created because it is being<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    // created in the DONE state. This behavior prevents a buildup<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    // of RESCAN nodes. But there is also a chance that a SplitLogWorker<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    // might miss the watch-trigger that creation of RESCAN node provides.<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    // Since the TimeoutMonitor will keep resubmitting UNASSIGNED tasks<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    // therefore this behavior is safe.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    SplitLogTask slt = new SplitLogTask.Done(this.details.getServerName());<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    this.watcher<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        .getRecoverableZooKeeper()<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        .getZooKeeper()<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        .create(ZKSplitLog.getRescanNode(watcher), slt.toByteArray(), Ids.OPEN_ACL_UNSAFE,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          CreateMode.EPHEMERAL_SEQUENTIAL, new CreateRescanAsyncCallback(), Long.valueOf(retries));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  @Override<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public void submitTask(String path) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    createNode(path, zkretries);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  }<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>  @Override<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void checkTaskStillAvailable(String path) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // A negative retry count will lead to ignoring all error processing.<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    this.watcher<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        .getRecoverableZooKeeper()<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        .getZooKeeper()<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        .getData(path, this.watcher, new GetDataAsyncCallback(),<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          Long.valueOf(-1) /* retry count */);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private void deleteNode(String path, Long retries) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    SplitLogCounters.tot_mgr_node_delete_queued.increment();<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // Once a task znode is ready for delete, that is it is in the TASK_DONE<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    // state, then no one should be writing to it anymore. That is no one<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    // will be updating the znode version any more.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        .delete(path, -1, new DeleteAsyncCallback(), retries);<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>  private void deleteNodeSuccess(String path) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (ignoreZKDeleteForTesting) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    Task task;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    task = details.getTasks().remove(path);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    if (task == null) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        SplitLogCounters.tot_mgr_rescan_deleted.increment();<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      SplitLogCounters.tot_mgr_missing_state_in_delete.increment();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      LOG.debug("Deleted task without in memory state " + path);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      return;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    synchronized (task) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      task.status = DELETED;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      task.notify();<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    SplitLogCounters.tot_mgr_task_deleted.increment();<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>  private void deleteNodeFailure(String path) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    LOG.info("Failed to delete node " + path + " and will retry soon.");<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  private void createRescanSuccess(String path) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    SplitLogCounters.tot_mgr_rescan.increment();<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    getDataSetWatch(path, zkretries);<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>  private void createRescanFailure() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    LOG.error(HBaseMarkers.FATAL, "logic failure, rescan failure must not happen");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>  /**<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * Helper function to check whether to abandon retries in ZooKeeper AsyncCallback functions<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * @param statusCode integer value of a ZooKeeper exception code<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * @param action description message about the retried action<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return true when need to abandon retries otherwise false<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  private boolean needAbandonRetries(int statusCode, String action) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    if (statusCode == KeeperException.Code.SESSIONEXPIRED.intValue()) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      LOG.error("ZK session expired. Master is expected to shut down. Abandoning retries for "<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          + "action=" + action);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return true;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return false;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private void createNode(String path, Long retry_count) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    SplitLogTask slt = new SplitLogTask.Unassigned(details.getServerName());<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    ZKUtil.asyncCreate(this.watcher, path, slt.toByteArray(), new CreateAsyncCallback(),<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      retry_count);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    SplitLogCounters.tot_mgr_node_create_queued.increment();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private void createNodeSuccess(String path) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    LOG.debug("Put up splitlog task at znode " + path);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    getDataSetWatch(path, zkretries);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  private void createNodeFailure(String path) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    // TODO the Manager should split the log locally instead of giving up<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    LOG.warn("Failed to create task node " + path);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    setDone(path, FAILURE);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  private void getDataSetWatch(String path, Long retry_count) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        .getData(path, this.watcher, new GetDataAsyncCallback(), retry_count);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  private void getDataSetWatchSuccess(String path, byte[] data, int version)<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      throws DeserializationException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    if (data == null) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      if (version == Integer.MIN_VALUE) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        // assume all done. The task znode suddenly disappeared.<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        setDone(path, SUCCESS);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        return;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      SplitLogCounters.tot_mgr_null_data.increment();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      LOG.error(HBaseMarkers.FATAL, "logic error - got null data " + path);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      setDone(path, FAILURE);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      return;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    data = ZKMetadata.removeMetaData(data);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    SplitLogTask slt = SplitLogTask.parseFrom(data);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    if (slt.isUnassigned()) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      LOG.debug("Task not yet acquired " + path + ", ver=" + version);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      handleUnassignedTask(path);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    } else if (slt.isOwned()) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      heartbeat(path, version, slt.getServerName());<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    } else if (slt.isResigned()) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      resubmitOrFail(path, FORCE);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    } else if (slt.isDone()) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      if (taskFinisher != null &amp;&amp; !ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        if (taskFinisher.finish(slt.getServerName(), ZKSplitLog.getFileName(path)) == Status.DONE) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          setDone(path, SUCCESS);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        } else {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          resubmitOrFail(path, CHECK);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      } else {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        setDone(path, SUCCESS);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } else if (slt.isErr()) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      resubmitOrFail(path, CHECK);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } else {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.error(HBaseMarkers.FATAL, "logic error - unexpected zk state for path = "<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          + path + " data = " + slt.toString());<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      setDone(path, FAILURE);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  private void resubmitOrFail(String path, ResubmitDirective directive) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    if (resubmitTask(path, findOrCreateOrphanTask(path), directive) == false) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      setDone(path, FAILURE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  private void getDataSetWatchFailure(String path) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    LOG.warn("Failed to set data watch " + path);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    setDone(path, FAILURE);<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>  private void setDone(String path, TerminationStatus status) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    Task task = details.getTasks().get(path);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    if (task == null) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      if (!ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        SplitLogCounters.tot_mgr_unacquired_orphan_done.increment();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.debug("Unacquired orphan task is done " + path);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    } else {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      synchronized (task) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        if (task.status == IN_PROGRESS) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          if (status == SUCCESS) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            SplitLogCounters.tot_mgr_log_split_success.increment();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            LOG.info("Done splitting " + path);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>          } else {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            SplitLogCounters.tot_mgr_log_split_err.increment();<a name="line.416"></a>
-<span class="sourceLineNo">417</span>            LOG.warn("Error splitting " + path);<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          }<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          task.status = status;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          if (task.batch != null) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>            synchronized (task.batch) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>              if (status == SUCCESS) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>                task.batch.done++;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>              } else {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>                task.batch.error++;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>              }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>              task.batch.notify();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>            }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    // delete the task node in zk. It's an async<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // call and no one is blocked waiting for this node to be deleted. All<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    // task names are unique (log.&lt;timestamp&gt;) there is no risk of deleting<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    // a future task.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    // if a deletion fails, TimeoutMonitor will retry the same deletion later<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    deleteNode(path, zkretries);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    return;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>  }<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  private Task findOrCreateOrphanTask(String path) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return computeIfAbsent(details.getTasks(), path, Task::new, () -&gt; {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      LOG.info("Creating orphan task " + path);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      SplitLogCounters.tot_mgr_orphan_task_acquired.increment();<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    });<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private void heartbeat(String path, int new_version, ServerName workerName) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Task task = findOrCreateOrphanTask(path);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (new_version != task.last_version) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      if (task.isUnassigned()) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        LOG.info("Task " + path + " acquired by " + workerName);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      task.heartbeat(EnvironmentEdgeManager.currentTime(), new_version, workerName);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      SplitLogCounters.tot_mgr_heartbeat.increment();<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    } else {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // duplicate heartbeats - heartbeats w/o zk node version<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      // changing - are possible. The timeout thread does<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // getDataSetWatch() just to check whether a node still<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // exists or not<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private void lookForOrphans() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    List&lt;String&gt; orphans;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    try {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      orphans = ZKUtil.listChildrenNoWatch(this.watcher, this.watcher.znodePaths.splitLogZNode);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      if (orphans == null) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        LOG.warn("Could not get children of " + this.watcher.znodePaths.splitLogZNode);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        return;<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    } catch (KeeperException e) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      LOG.warn("Could not get children of " + this.watcher.znodePaths.splitLogZNode + " "<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          + StringUtils.stringifyException(e));<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    int rescan_nodes = 0;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    int listSize = orphans.size();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    for (int i = 0; i &lt; listSize; i++) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      String path = orphans.get(i);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      String nodepath = ZNodePaths.joinZNode(watcher.znodePaths.splitLogZNode, path);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      if (ZKSplitLog.isRescanNode(watcher, nodepath)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        rescan_nodes++;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        LOG.debug("Found orphan rescan node " + path);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        LOG.info("Found orphan task " + path);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      getDataSetWatch(nodepath, zkretries);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    LOG.info("Found " + (orphans.size() - rescan_nodes) + " orphan tasks and " + rescan_nodes<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        + " rescan nodes");<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  @Override<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public void nodeDataChanged(String path) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Task task;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    task = details.getTasks().get(path);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (task != null || ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      if (task != null) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        task.heartbeatNoDetails(EnvironmentEdgeManager.currentTime());<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      getDataSetWatch(path, zkretries);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>  }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>  private boolean resubmit(String path, int version) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    try {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      // blocking zk call but this is done from the timeout thread<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      SplitLogTask slt =<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          new SplitLogTask.Unassigned(this.details.getServerName());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (ZKUtil.setData(this.watcher, path, slt.toByteArray(), version) == false) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        LOG.debug("Failed to resubmit task " + path + " version changed");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return false;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    } catch (NoNodeException e) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.warn("Failed to resubmit because znode doesn't exist " + path<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          + " task done (or forced done by removing the znode)");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      try {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        getDataSetWatchSuccess(path, null, Integer.MIN_VALUE);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      } catch (DeserializationException e1) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        LOG.debug("Failed to re-resubmit task " + path + " because of deserialization issue", e1);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        return false;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      return false;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    } catch (KeeperException.BadVersionException e) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      LOG.debug("Failed to resubmit task " + path + " version changed");<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return false;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    } catch (KeeperException e) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      SplitLogCounters.tot_mgr_resubmit_failed.increment();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      LOG.warn("Failed to resubmit " + path, e);<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      return false;<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    return true;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * {@link org.apache.hadoop.hbase.master.SplitLogManager} can use objects implementing this<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   * interface to finish off a partially done task by<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * {@link org.apache.hadoop.hbase.regionserver.SplitLogWorker}. This provides a<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * serialization point at the end of the task processing. Must be restartable and idempotent.<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   */<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public interface TaskFinisher {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>     * status that can be returned finish()<a name="line.547"></a>
-<span class="sourceLineNo">548</span>     */<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    enum Status {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span>       * task completed successfully<a name="line.551"></a>
-<span class="sourceLineNo">552</span>       */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      DONE(),<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>       * task completed with error<a name="line.555"></a>
-<span class="sourceLineNo">556</span>       */<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      ERR()<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    /**<a name="line.560"></a>
-<span class="sourceLineNo">561</span>     * finish the partially done task. workername provides clue to where the partial results of the<a name="line.561"></a>
-<span class="sourceLineNo">562</span>     * partially done tasks are present. taskname is the name of the task that was put up in<a name="line.562"></a>
-<span class="sourceLineNo">563</span>     * zookeeper.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>     * &lt;p&gt;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>     * @param workerName<a name="line.565"></a>
-<span class="sourceLineNo">566</span>     * @param taskname<a name="line.566"></a>
-<span class="sourceLineNo">567</span>     * @return DONE if task completed successfully, ERR otherwise<a name="line.567"></a>
-<span class="sourceLineNo">568</span>     */<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    Status finish(ServerName workerName, String taskname);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>  /**<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   * Asynchronous handler for zk create node results. Retries on failures.<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   */<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  public class CreateAsyncCallback implements AsyncCallback.StringCallback {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    private final Logger LOG = LoggerFactory.getLogger(CreateAsyncCallback.class);<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    public void processResult(int rc, String path, Object ctx, String name) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      SplitLogCounters.tot_mgr_node_create_result.increment();<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      if (rc != 0) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        if (needAbandonRetries(rc, "Create znode " + path)) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>          createNodeFailure(path);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>          return;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>        if (rc == KeeperException.Code.NODEEXISTS.intValue()) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>          // What if there is a delete pending against this pre-existing<a name="line.587"></a>
-<span class="sourceLineNo">588</span>          // znode? Then this soon-to-be-deleted task znode must be in TASK_DONE<a name="line.588"></a>
-<span class="sourceLineNo">589</span>          // state. Only operations that will be carried out on this node by<a name="line.589"></a>
-<span class="sourceLineNo">590</span>          // this manager are get-znode-data, task-finisher and delete-znode.<a name="line.590"></a>
-<span class="sourceLineNo">591</span>          // And all code pieces correctly handle the case of suddenly<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          // disappearing task-znode.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>          LOG.debug("Found pre-existing znode " + path);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>          SplitLogCounters.tot_mgr_node_already_exists.increment();<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        } else {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>          Long retry_count = (Long) ctx;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          LOG.warn("Create rc=" + KeeperException.Code.get(rc) + " for " + path<a name="line.597"></a>
-<span class="sourceLineNo">598</span>              + " remaining retries=" + retry_count);<a name="line.598"></a>
-<span class="sourceLineNo">599</span>          if (retry_count == 0) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>            SplitLogCounters.tot_mgr_node_create_err.increment();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>            createNodeFailure(path);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>          } else {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            SplitLogCounters.tot_mgr_node_create_retry.increment();<a name="line.603"></a>
-<span class="sourceLineNo">604</span>            createNode(path, retry_count - 1);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>          return;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      createNodeSuccess(path);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Asynchronous handler for zk get-data-set-watch on node results. Retries on failures.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   */<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  public class GetDataAsyncCallback implements AsyncCallback.DataCallback {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    private final Logger LOG = LoggerFactory.getLogger(GetDataAsyncCallback.class);<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>    @Override<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    public void processResult(int rc, String path, Object ctx, byte[] data, Stat stat) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      SplitLogCounters.tot_mgr_get_data_result.increment();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      if (rc != 0) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        if (needAbandonRetries(rc, "GetData from znode " + path)) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          return;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        }<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        if (rc == KeeperException.Code.NONODE.intValue()) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>          SplitLogCounters.tot_mgr_get_data_nonode.increment();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>          LOG.warn("Task znode " + path + " vanished or not created yet.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>          // ignore since we should not end up in a case where there is in-memory task,<a name="line.629"></a>
-<span class="sourceLineNo">630</span>          // but no znode. The only case is between the time task is created in-memory<a name="line.630"></a>
-<span class="sourceLineNo">631</span>          // and the znode is created. See HBASE-11217.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          return;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>        Long retry_count = (Long) ctx;<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>        if (retry_count &lt; 0) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          LOG.warn("Getdata rc=" + KeeperException.Code.get(rc) + " " + path<a name="line.637"></a>
-<span class="sourceLineNo">638</span>              + ". Ignoring error. No error handling. No retrying.");<a name="line.638"></a>
-<span class="sourceLineNo">639</span>          return;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        LOG.warn("Getdata rc=" + KeeperException.Code.get(rc) + " " + path<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            + " remaining retries=" + retry_count);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        if (retry_count == 0) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>          SplitLogCounters.tot_mgr_get_data_err.increment();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>          getDataSetWatchFailure(path);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        } else {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          SplitLogCounters.tot_mgr_get_data_retry.increment();<a name="line.647"></a>
-<span class="sourceLineNo">648</span>          getDataSetWatch(path, retry_count - 1);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        }<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        return;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      }<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      try {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        getDataSetWatchSuccess(path, data, stat.getVersion());<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      } catch (DeserializationException e) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        LOG.warn("Deserialization problem", e);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      return;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span>  /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * Asynchronous handler for zk delete node results. Retries on failures.<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  public class DeleteAsyncCallback implements AsyncCallback.VoidCallback {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    private final Logger LOG = LoggerFactory.getLogger(DeleteAsyncCallback.class);<a name="line.665"></a>
-<span class="sourceLineNo">666</span><a name="line.666"></a>
-<span class="sourceLineNo">667</span>    @Override<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    public void processResult(int rc, String path, Object ctx) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      SplitLogCounters.tot_mgr_node_delete_result.increment();<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      if (rc != 0) {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        if (needAbandonRetries(rc, "Delete znode " + path)) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>          details.getFailedDeletions().add(path);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          return;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
-<span class="sourceLineNo">675</span>        if (rc != KeeperException.Code.NONODE.intValue()) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>          SplitLogCounters.tot_mgr_node_delete_err.increment();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>          Long retry_count = (Long) ctx;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          LOG.warn("Delete rc=" + KeeperException.Code.get(rc) + " for " + path<a name="line.678"></a>
-<span class="sourceLineNo">679</span>              + " remaining retries=" + retry_count);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>          if (retry_count == 0) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>            LOG.warn("Delete failed " + path);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>            details.getFailedDeletions().add(path);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>            deleteNodeFailure(path);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          } else {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>            deleteNode(path, retry_count - 1);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>          }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          return;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>        } else {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>          LOG.info(path + " does not exist. Either was created but deleted behind our"<a name="line.689"></a>
-<span class="sourceLineNo">690</span>              + " back by another pending delete OR was deleted"<a name="line.690"></a>
-<span class="sourceLineNo">691</span>              + " in earlier retry rounds. zkretries = " + ctx);<a name="line.691"></a>
-<span class="sourceLineNo">692</span>        }<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      } else {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>        LOG.debug("Deleted " + path);<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      }<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      deleteNodeSuccess(path);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  }<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>  /**<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * Asynchronous handler for zk create RESCAN-node results. Retries on failures.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   * &lt;p&gt;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   * A RESCAN node is created using PERSISTENT_SEQUENTIAL flag. It is a signal for all the<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * {@link org.apache.hadoop.hbase.regionserver.SplitLogWorker}s to rescan for new tasks.<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   */<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  public class CreateRescanAsyncCallback implements AsyncCallback.StringCallback {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    private final Logger LOG = LoggerFactory.getLogger(CreateRescanAsyncCallback.class);<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>    @Override<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    public void processResult(int rc, String path, Object ctx, String name) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      if (rc != 0) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>        if (needAbandonRetries(rc, "CreateRescan znode " + path)) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>          return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        }<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        Long retry_count = (Long) ctx;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        LOG.warn("rc=" + KeeperException.Code.get(rc) + " for " + path + " remaining retries="<a name="line.716"></a>
-<span class="sourceLineNo">717</span>            + retry_count);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        if (retry_count == 0) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          createRescanFailure();<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        } else {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          rescan(retry_count - 1);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        return;<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      }<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      // path is the original arg, name is the actual name that was created<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      createRescanSuccess(name);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  @Override<a name="line.730"></a>
-<span class="sourceLineNo">731</span>  public void setDetails(SplitLogManagerDetails details) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    this.details = details;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>  @Override<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  public SplitLogManagerDetails getDetails() {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return details;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Temporary function that is used by unit tests only<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   */<a name="line.742"></a>
-<span class="sourceLineNo">743</span>  @VisibleForTesting<a name="line.743"></a>
-<span class="sourceLineNo">744</span>  public void setIgnoreDeleteForTesting(boolean b) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    ignoreZKDeleteForTesting = b;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span>}<a name="line.747"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  @Override<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  public void checkTasks() {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    rescan(Long.MAX_VALUE);<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>   * signal the workers that a task was resubmitted by creating the RESCAN node.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  private void rescan(long retries) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    // The RESCAN node will be deleted almost immediately by the<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    // SplitLogManager as soon as it is created because it is being<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    // created in the DONE state. This behavior prevents a buildup<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    // of RESCAN nodes. But there is also a chance that a SplitLogWorker<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    // might miss the watch-trigger that creation of RESCAN node provides.<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    // Since the TimeoutMonitor will keep resubmitting UNASSIGNED tasks<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    // therefore this behavior is safe.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    SplitLogTask slt = new SplitLogTask.Done(this.details.getServerName());<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    this.watcher<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        .getRecoverableZooKeeper()<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        .getZooKeeper()<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        .create(ZKSplitLog.getRescanNode(watcher), slt.toByteArray(), Ids.OPEN_ACL_UNSAFE,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          CreateMode.EPHEMERAL_SEQUENTIAL, new CreateRescanAsyncCallback(), Long.valueOf(retries));<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  @Override<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  public void submitTask(String path) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    createNode(path, zkretries);<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>  public void checkTaskStillAvailable(String path) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    // A negative retry count will lead to ignoring all error processing.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    this.watcher<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .getRecoverableZooKeeper()<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        .getZooKeeper()<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        .getData(path, this.watcher, new GetDataAsyncCallback(),<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          Long.valueOf(-1) /* retry count */);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<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>  private void deleteNode(String path, Long retries) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    SplitLogCounters.tot_mgr_node_delete_queued.increment();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    // Once a task znode is ready for delete, that is it is in the TASK_DONE<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    // state, then no one should be writing to it anymore. That is no one<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    // will be updating the znode version any more.<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        .delete(path, -1, new DeleteAsyncCallback(), retries);<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>  private void deleteNodeSuccess(String path) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    if (ignoreZKDeleteForTesting) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      return;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Task task;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    task = details.getTasks().remove(path);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    if (task == null) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      if (ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        SplitLogCounters.tot_mgr_rescan_deleted.increment();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      SplitLogCounters.tot_mgr_missing_state_in_delete.increment();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      LOG.debug("Deleted task without in memory state " + path);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      return;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    synchronized (task) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      task.status = DELETED;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      task.notify();<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    SplitLogCounters.tot_mgr_task_deleted.increment();<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>  private void deleteNodeFailure(String path) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    LOG.info("Failed to delete node " + path + " and will retry soon.");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return;<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>  private void createRescanSuccess(String path) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    SplitLogCounters.tot_mgr_rescan.increment();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    getDataSetWatch(path, zkretries);<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>  private void createRescanFailure() {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    LOG.error(HBaseMarkers.FATAL, "logic failure, rescan failure must not happen");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  /**<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * Helper function to check whether to abandon retries in ZooKeeper AsyncCallback functions<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * @param statusCode integer value of a ZooKeeper exception code<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * @param action description message about the retried action<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * @return true when need to abandon retries otherwise false<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  private boolean needAbandonRetries(int statusCode, String action) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    if (statusCode == KeeperException.Code.SESSIONEXPIRED.intValue()) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      LOG.error("ZK session expired. Master is expected to shut down. Abandoning retries for "<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          + "action=" + action);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      return true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    return false;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  private void createNode(String path, Long retry_count) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    SplitLogTask slt = new SplitLogTask.Unassigned(details.getServerName());<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    ZKUtil.asyncCreate(this.watcher, path, slt.toByteArray(), new CreateAsyncCallback(),<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      retry_count);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    SplitLogCounters.tot_mgr_node_create_queued.increment();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    return;<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>  private void createNodeSuccess(String path) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    LOG.debug("Put up splitlog task at znode " + path);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    getDataSetWatch(path, zkretries);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private void createNodeFailure(String path) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    // TODO the Manager should split the log locally instead of giving up<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    LOG.warn("Failed to create task node " + path);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    setDone(path, FAILURE);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>  }<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>  private void getDataSetWatch(String path, Long retry_count) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    this.watcher.getRecoverableZooKeeper().getZooKeeper()<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        .getData(path, this.watcher, new GetDataAsyncCallback(), retry_count);<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    SplitLogCounters.tot_mgr_get_data_queued.increment();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>  private void getDataSetWatchSuccess(String path, byte[] data, int version)<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throws DeserializationException {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    if (data == null) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      if (version == Integer.MIN_VALUE) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        // assume all done. The task znode suddenly disappeared.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        setDone(path, SUCCESS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        return;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      SplitLogCounters.tot_mgr_null_data.increment();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      LOG.error(HBaseMarkers.FATAL, "logic error - got null data " + path);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      setDone(path, FAILURE);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      return;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    data = ZKMetadata.removeMetaData(data);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    SplitLogTask slt = SplitLogTask.parseFrom(data);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    if (slt.isUnassigned()) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      LOG.debug("Task not yet acquired " + path + ", ver=" + version);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      handleUnassignedTask(path);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    } else if (slt.isOwned()) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      heartbeat(path, version, slt.getServerName());<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    } else if (slt.isResigned()) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      resubmitOrFail(path, FORCE);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    } else if (slt.isDone()) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      if (taskFinisher != null &amp;&amp; !ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        if (taskFinisher.finish(slt.getServerName(), ZKSplitLog.getFileName(path)) == Status.DONE) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>          setDone(path, SUCCESS);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        } else {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          resubmitOrFail(path, CHECK);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      } else {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        setDone(path, SUCCESS);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } else if (slt.isErr()) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.info("Task " + path + " entered state=" + slt.toString());<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      resubmitOrFail(path, CHECK);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    } else {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      LOG.error(HBaseMarkers.FATAL, "logic error - unexpected zk state for path = "<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          + path + " data = " + slt.toString());<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      setDone(path, FAILURE);<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>  private void resubmitOrFail(String path, ResubmitDirective directive) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    if (resubmitTask(path, findOrCreateOrphanTask(path), directive) == false) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      setDone(path, FAILURE);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private void getDataSetWatchFailure(String path) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    LOG.warn("Failed to set data watch " + path);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    setDone(path, FAILURE);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>  private void setDone(String path, TerminationStatus status) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    Task task = details.getTasks().get(path);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (task == null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (!ZKSplitLog.isRescanNode(watcher, path)) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        SplitLogCounters.tot_mgr_unacquired_orphan_done.increment();<a name="line.407

<TRUNCATED>

[13/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html
index 6d59738..61e3cd8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html
@@ -116,20 +116,20 @@
 <span class="sourceLineNo">108</span>   * @throws IOException if unable to connect to zk or config problem<a name="line.108"></a>
 <span class="sourceLineNo">109</span>   */<a name="line.109"></a>
 <span class="sourceLineNo">110</span>  public static RecoverableZooKeeper connect(Configuration conf, Watcher watcher)<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  throws IOException {<a name="line.111"></a>
+<span class="sourceLineNo">111</span>    throws IOException {<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    String ensemble = ZKConfig.getZKQuorumServersString(conf);<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    return connect(conf, ensemble, watcher);<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>  public static RecoverableZooKeeper connect(Configuration conf, String ensemble,<a name="line.116"></a>
 <span class="sourceLineNo">117</span>      Watcher watcher)<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  throws IOException {<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    throws IOException {<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    return connect(conf, ensemble, watcher, null);<a name="line.119"></a>
 <span class="sourceLineNo">120</span>  }<a name="line.120"></a>
 <span class="sourceLineNo">121</span><a name="line.121"></a>
 <span class="sourceLineNo">122</span>  public static RecoverableZooKeeper connect(Configuration conf, String ensemble,<a name="line.122"></a>
 <span class="sourceLineNo">123</span>      Watcher watcher, final String identifier)<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  throws IOException {<a name="line.124"></a>
+<span class="sourceLineNo">124</span>    throws IOException {<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    if(ensemble == null) {<a name="line.125"></a>
 <span class="sourceLineNo">126</span>      throw new IOException("Unable to determine ZooKeeper ensemble");<a name="line.126"></a>
 <span class="sourceLineNo">127</span>    }<a name="line.127"></a>
@@ -355,7 +355,7 @@
 <span class="sourceLineNo">347</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.347"></a>
 <span class="sourceLineNo">348</span>   */<a name="line.348"></a>
 <span class="sourceLineNo">349</span>  public static boolean watchAndCheckExists(ZKWatcher zkw, String znode)<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  throws KeeperException {<a name="line.350"></a>
+<span class="sourceLineNo">350</span>    throws KeeperException {<a name="line.350"></a>
 <span class="sourceLineNo">351</span>    try {<a name="line.351"></a>
 <span class="sourceLineNo">352</span>      Stat s = zkw.getRecoverableZooKeeper().exists(znode, zkw);<a name="line.352"></a>
 <span class="sourceLineNo">353</span>      boolean exists = s != null ? true : false;<a name="line.353"></a>
@@ -409,7 +409,7 @@
 <span class="sourceLineNo">401</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.401"></a>
 <span class="sourceLineNo">402</span>   */<a name="line.402"></a>
 <span class="sourceLineNo">403</span>  public static int checkExists(ZKWatcher zkw, String znode)<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  throws KeeperException {<a name="line.404"></a>
+<span class="sourceLineNo">404</span>    throws KeeperException {<a name="line.404"></a>
 <span class="sourceLineNo">405</span>    try {<a name="line.405"></a>
 <span class="sourceLineNo">406</span>      Stat s = zkw.getRecoverableZooKeeper().exists(znode, null);<a name="line.406"></a>
 <span class="sourceLineNo">407</span>      return s != null ? s.getVersion() : -1;<a name="line.407"></a>
@@ -446,7 +446,7 @@
 <span class="sourceLineNo">438</span>   */<a name="line.438"></a>
 <span class="sourceLineNo">439</span>  public static List&lt;String&gt; listChildrenAndWatchForNewChildren(<a name="line.439"></a>
 <span class="sourceLineNo">440</span>          ZKWatcher zkw, String znode)<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  throws KeeperException {<a name="line.441"></a>
+<span class="sourceLineNo">441</span>    throws KeeperException {<a name="line.441"></a>
 <span class="sourceLineNo">442</span>    try {<a name="line.442"></a>
 <span class="sourceLineNo">443</span>      List&lt;String&gt; children = zkw.getRecoverableZooKeeper().getChildren(znode, zkw);<a name="line.443"></a>
 <span class="sourceLineNo">444</span>      return children;<a name="line.444"></a>
@@ -501,7 +501,7 @@
 <span class="sourceLineNo">493</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.493"></a>
 <span class="sourceLineNo">494</span>   */<a name="line.494"></a>
 <span class="sourceLineNo">495</span>  public static List&lt;String&gt; listChildrenNoWatch(ZKWatcher zkw, String znode)<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  throws KeeperException {<a name="line.496"></a>
+<span class="sourceLineNo">496</span>    throws KeeperException {<a name="line.496"></a>
 <span class="sourceLineNo">497</span>    List&lt;String&gt; children = null;<a name="line.497"></a>
 <span class="sourceLineNo">498</span>    try {<a name="line.498"></a>
 <span class="sourceLineNo">499</span>      // List the children without watching<a name="line.499"></a>
@@ -558,7 +558,7 @@
 <span class="sourceLineNo">550</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.550"></a>
 <span class="sourceLineNo">551</span>   */<a name="line.551"></a>
 <span class="sourceLineNo">552</span>  public static boolean nodeHasChildren(ZKWatcher zkw, String znode)<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  throws KeeperException {<a name="line.553"></a>
+<span class="sourceLineNo">553</span>    throws KeeperException {<a name="line.553"></a>
 <span class="sourceLineNo">554</span>    try {<a name="line.554"></a>
 <span class="sourceLineNo">555</span>      return !zkw.getRecoverableZooKeeper().getChildren(znode, null).isEmpty();<a name="line.555"></a>
 <span class="sourceLineNo">556</span>    } catch(KeeperException.NoNodeException ke) {<a name="line.556"></a>
@@ -590,7 +590,7 @@
 <span class="sourceLineNo">582</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.582"></a>
 <span class="sourceLineNo">583</span>   */<a name="line.583"></a>
 <span class="sourceLineNo">584</span>  public static int getNumberOfChildren(ZKWatcher zkw, String znode)<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  throws KeeperException {<a name="line.585"></a>
+<span class="sourceLineNo">585</span>    throws KeeperException {<a name="line.585"></a>
 <span class="sourceLineNo">586</span>    try {<a name="line.586"></a>
 <span class="sourceLineNo">587</span>      Stat stat = zkw.getRecoverableZooKeeper().exists(znode, null);<a name="line.587"></a>
 <span class="sourceLineNo">588</span>      return stat == null ? 0 : stat.getNumChildren();<a name="line.588"></a>
@@ -641,7 +641,7 @@
 <span class="sourceLineNo">633</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.633"></a>
 <span class="sourceLineNo">634</span>   */<a name="line.634"></a>
 <span class="sourceLineNo">635</span>  public static byte [] getDataAndWatch(ZKWatcher zkw, String znode)<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  throws KeeperException {<a name="line.636"></a>
+<span class="sourceLineNo">636</span>    throws KeeperException {<a name="line.636"></a>
 <span class="sourceLineNo">637</span>    return getDataInternal(zkw, znode, null, true);<a name="line.637"></a>
 <span class="sourceLineNo">638</span>  }<a name="line.638"></a>
 <span class="sourceLineNo">639</span><a name="line.639"></a>
@@ -703,7 +703,7 @@
 <span class="sourceLineNo">695</span>   */<a name="line.695"></a>
 <span class="sourceLineNo">696</span>  public static byte [] getDataNoWatch(ZKWatcher zkw, String znode,<a name="line.696"></a>
 <span class="sourceLineNo">697</span>                                       Stat stat)<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  throws KeeperException {<a name="line.698"></a>
+<span class="sourceLineNo">698</span>    throws KeeperException {<a name="line.698"></a>
 <span class="sourceLineNo">699</span>    try {<a name="line.699"></a>
 <span class="sourceLineNo">700</span>      byte [] data = zkw.getRecoverableZooKeeper().getData(znode, null, stat);<a name="line.700"></a>
 <span class="sourceLineNo">701</span>      logRetrievedMsg(zkw, znode, data, false);<a name="line.701"></a>
@@ -809,7 +809,7 @@
 <span class="sourceLineNo">801</span>   */<a name="line.801"></a>
 <span class="sourceLineNo">802</span>  public static boolean setData(ZKWatcher zkw, String znode,<a name="line.802"></a>
 <span class="sourceLineNo">803</span>                                byte [] data, int expectedVersion)<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.804"></a>
+<span class="sourceLineNo">804</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.804"></a>
 <span class="sourceLineNo">805</span>    try {<a name="line.805"></a>
 <span class="sourceLineNo">806</span>      return zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion) != null;<a name="line.806"></a>
 <span class="sourceLineNo">807</span>    } catch (InterruptedException e) {<a name="line.807"></a>
@@ -853,12 +853,12 @@
 <span class="sourceLineNo">845</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.845"></a>
 <span class="sourceLineNo">846</span>   */<a name="line.846"></a>
 <span class="sourceLineNo">847</span>  public static void setData(ZKWatcher zkw, String znode, byte [] data)<a name="line.847"></a>
-<span class="sourceLineNo">848</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.848"></a>
+<span class="sourceLineNo">848</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.848"></a>
 <span class="sourceLineNo">849</span>    setData(zkw, (SetData)ZKUtilOp.setData(znode, data));<a name="line.849"></a>
 <span class="sourceLineNo">850</span>  }<a name="line.850"></a>
 <span class="sourceLineNo">851</span><a name="line.851"></a>
 <span class="sourceLineNo">852</span>  private static void setData(ZKWatcher zkw, SetData setData)<a name="line.852"></a>
-<span class="sourceLineNo">853</span>  throws KeeperException, KeeperException.NoNodeException {<a name="line.853"></a>
+<span class="sourceLineNo">853</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.853"></a>
 <span class="sourceLineNo">854</span>    SetDataRequest sd = (SetDataRequest)toZooKeeperOp(zkw, setData).toRequestRecord();<a name="line.854"></a>
 <span class="sourceLineNo">855</span>    setData(zkw, sd.getPath(), sd.getData(), sd.getVersion());<a name="line.855"></a>
 <span class="sourceLineNo">856</span>  }<a name="line.856"></a>
@@ -899,7 +899,7 @@
 <span class="sourceLineNo">891</span><a name="line.891"></a>
 <span class="sourceLineNo">892</span>  public static ArrayList&lt;ACL&gt; createACL(ZKWatcher zkw, String node,<a name="line.892"></a>
 <span class="sourceLineNo">893</span>                                         boolean isSecureZooKeeper) {<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    if (!node.startsWith(zkw.znodePaths.baseZNode)) {<a name="line.894"></a>
+<span class="sourceLineNo">894</span>    if (!node.startsWith(zkw.getZNodePaths().baseZNode)) {<a name="line.894"></a>
 <span class="sourceLineNo">895</span>      return Ids.OPEN_ACL_UNSAFE;<a name="line.895"></a>
 <span class="sourceLineNo">896</span>    }<a name="line.896"></a>
 <span class="sourceLineNo">897</span>    if (isSecureZooKeeper) {<a name="line.897"></a>
@@ -931,7 +931,7 @@
 <span class="sourceLineNo">923</span>      }<a name="line.923"></a>
 <span class="sourceLineNo">924</span>      // Certain znodes are accessed directly by the client,<a name="line.924"></a>
 <span class="sourceLineNo">925</span>      // so they must be readable by non-authenticated clients<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      if (zkw.znodePaths.isClientReadable(node)) {<a name="line.926"></a>
+<span class="sourceLineNo">926</span>      if (zkw.getZNodePaths().isClientReadable(node)) {<a name="line.926"></a>
 <span class="sourceLineNo">927</span>        acls.addAll(Ids.CREATOR_ALL_ACL);<a name="line.927"></a>
 <span class="sourceLineNo">928</span>        acls.addAll(Ids.READ_ACL_UNSAFE);<a name="line.928"></a>
 <span class="sourceLineNo">929</span>      } else {<a name="line.929"></a>
@@ -967,7 +967,7 @@
 <span class="sourceLineNo">959</span>   */<a name="line.959"></a>
 <span class="sourceLineNo">960</span>  public static boolean createEphemeralNodeAndWatch(ZKWatcher zkw,<a name="line.960"></a>
 <span class="sourceLineNo">961</span>      String znode, byte [] data)<a name="line.961"></a>
-<span class="sourceLineNo">962</span>  throws KeeperException {<a name="line.962"></a>
+<span class="sourceLineNo">962</span>    throws KeeperException {<a name="line.962"></a>
 <span class="sourceLineNo">963</span>    boolean ret = true;<a name="line.963"></a>
 <span class="sourceLineNo">964</span>    try {<a name="line.964"></a>
 <span class="sourceLineNo">965</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.965"></a>
@@ -1007,7 +1007,7 @@
 <span class="sourceLineNo">999</span>   */<a name="line.999"></a>
 <span class="sourceLineNo">1000</span>  public static boolean createNodeIfNotExistsAndWatch(<a name="line.1000"></a>
 <span class="sourceLineNo">1001</span>          ZKWatcher zkw, String znode, byte [] data)<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>  throws KeeperException {<a name="line.1002"></a>
+<span class="sourceLineNo">1002</span>    throws KeeperException {<a name="line.1002"></a>
 <span class="sourceLineNo">1003</span>    boolean ret = true;<a name="line.1003"></a>
 <span class="sourceLineNo">1004</span>    try {<a name="line.1004"></a>
 <span class="sourceLineNo">1005</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1005"></a>
@@ -1074,7 +1074,7 @@
 <span class="sourceLineNo">1066</span>   */<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>  public static int createAndWatch(ZKWatcher zkw,<a name="line.1067"></a>
 <span class="sourceLineNo">1068</span>      String znode, byte [] data)<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>  throws KeeperException, KeeperException.NodeExistsException {<a name="line.1069"></a>
+<span class="sourceLineNo">1069</span>    throws KeeperException, KeeperException.NodeExistsException {<a name="line.1069"></a>
 <span class="sourceLineNo">1070</span>    try {<a name="line.1070"></a>
 <span class="sourceLineNo">1071</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1071"></a>
 <span class="sourceLineNo">1072</span>          CreateMode.PERSISTENT);<a name="line.1072"></a>
@@ -1140,13 +1140,13 @@
 <span class="sourceLineNo">1132</span>   */<a name="line.1132"></a>
 <span class="sourceLineNo">1133</span>  public static void createAndFailSilent(ZKWatcher zkw,<a name="line.1133"></a>
 <span class="sourceLineNo">1134</span>      String znode, byte[] data)<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>  throws KeeperException {<a name="line.1135"></a>
+<span class="sourceLineNo">1135</span>    throws KeeperException {<a name="line.1135"></a>
 <span class="sourceLineNo">1136</span>    createAndFailSilent(zkw,<a name="line.1136"></a>
 <span class="sourceLineNo">1137</span>        (CreateAndFailSilent)ZKUtilOp.createAndFailSilent(znode, data));<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>  }<a name="line.1138"></a>
 <span class="sourceLineNo">1139</span><a name="line.1139"></a>
 <span class="sourceLineNo">1140</span>  private static void createAndFailSilent(ZKWatcher zkw, CreateAndFailSilent cafs)<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>  throws KeeperException {<a name="line.1141"></a>
+<span class="sourceLineNo">1141</span>    throws KeeperException {<a name="line.1141"></a>
 <span class="sourceLineNo">1142</span>    CreateRequest create = (CreateRequest)toZooKeeperOp(zkw, cafs).toRequestRecord();<a name="line.1142"></a>
 <span class="sourceLineNo">1143</span>    String znode = create.getPath();<a name="line.1143"></a>
 <span class="sourceLineNo">1144</span>    try {<a name="line.1144"></a>
@@ -1181,7 +1181,7 @@
 <span class="sourceLineNo">1173</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1173"></a>
 <span class="sourceLineNo">1174</span>   */<a name="line.1174"></a>
 <span class="sourceLineNo">1175</span>  public static void createWithParents(ZKWatcher zkw, String znode)<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>  throws KeeperException {<a name="line.1176"></a>
+<span class="sourceLineNo">1176</span>    throws KeeperException {<a name="line.1176"></a>
 <span class="sourceLineNo">1177</span>    createWithParents(zkw, znode, new byte[0]);<a name="line.1177"></a>
 <span class="sourceLineNo">1178</span>  }<a name="line.1178"></a>
 <span class="sourceLineNo">1179</span><a name="line.1179"></a>
@@ -1199,7 +1199,7 @@
 <span class="sourceLineNo">1191</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1191"></a>
 <span class="sourceLineNo">1192</span>   */<a name="line.1192"></a>
 <span class="sourceLineNo">1193</span>  public static void createWithParents(ZKWatcher zkw, String znode, byte[] data)<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>  throws KeeperException {<a name="line.1194"></a>
+<span class="sourceLineNo">1194</span>    throws KeeperException {<a name="line.1194"></a>
 <span class="sourceLineNo">1195</span>    try {<a name="line.1195"></a>
 <span class="sourceLineNo">1196</span>      if(znode == null) {<a name="line.1196"></a>
 <span class="sourceLineNo">1197</span>        return;<a name="line.1197"></a>
@@ -1224,7 +1224,7 @@
 <span class="sourceLineNo">1216</span>   * Delete the specified node.  Sets no watches.  Throws all exceptions.<a name="line.1216"></a>
 <span class="sourceLineNo">1217</span>   */<a name="line.1217"></a>
 <span class="sourceLineNo">1218</span>  public static void deleteNode(ZKWatcher zkw, String node)<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  throws KeeperException {<a name="line.1219"></a>
+<span class="sourceLineNo">1219</span>    throws KeeperException {<a name="line.1219"></a>
 <span class="sourceLineNo">1220</span>    deleteNode(zkw, node, -1);<a name="line.1220"></a>
 <span class="sourceLineNo">1221</span>  }<a name="line.1221"></a>
 <span class="sourceLineNo">1222</span><a name="line.1222"></a>
@@ -1234,7 +1234,7 @@
 <span class="sourceLineNo">1226</span>   */<a name="line.1226"></a>
 <span class="sourceLineNo">1227</span>  public static boolean deleteNode(ZKWatcher zkw, String node,<a name="line.1227"></a>
 <span class="sourceLineNo">1228</span>                                   int version)<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>  throws KeeperException {<a name="line.1229"></a>
+<span class="sourceLineNo">1229</span>    throws KeeperException {<a name="line.1229"></a>
 <span class="sourceLineNo">1230</span>    try {<a name="line.1230"></a>
 <span class="sourceLineNo">1231</span>      zkw.getRecoverableZooKeeper().delete(node, version);<a name="line.1231"></a>
 <span class="sourceLineNo">1232</span>      return true;<a name="line.1232"></a>
@@ -1254,7 +1254,7 @@
 <span class="sourceLineNo">1246</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1246"></a>
 <span class="sourceLineNo">1247</span>   */<a name="line.1247"></a>
 <span class="sourceLineNo">1248</span>  public static void deleteNodeFailSilent(ZKWatcher zkw, String node)<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>  throws KeeperException {<a name="line.1249"></a>
+<span class="sourceLineNo">1249</span>    throws KeeperException {<a name="line.1249"></a>
 <span class="sourceLineNo">1250</span>    deleteNodeFailSilent(zkw,<a name="line.1250"></a>
 <span class="sourceLineNo">1251</span>      (DeleteNodeFailSilent)ZKUtilOp.deleteNodeFailSilent(node));<a name="line.1251"></a>
 <span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
@@ -1280,7 +1280,7 @@
 <span class="sourceLineNo">1272</span>   * children.<a name="line.1272"></a>
 <span class="sourceLineNo">1273</span>   */<a name="line.1273"></a>
 <span class="sourceLineNo">1274</span>  public static void deleteNodeRecursively(ZKWatcher zkw, String node)<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>  throws KeeperException {<a name="line.1275"></a>
+<span class="sourceLineNo">1275</span>    throws KeeperException {<a name="line.1275"></a>
 <span class="sourceLineNo">1276</span>    deleteNodeRecursivelyMultiOrSequential(zkw, true, node);<a name="line.1276"></a>
 <span class="sourceLineNo">1277</span>  }<a name="line.1277"></a>
 <span class="sourceLineNo">1278</span><a name="line.1278"></a>
@@ -1743,7 +1743,7 @@
 <span class="sourceLineNo">1735</span>  public static String dump(ZKWatcher zkw) {<a name="line.1735"></a>
 <span class="sourceLineNo">1736</span>    StringBuilder sb = new StringBuilder();<a name="line.1736"></a>
 <span class="sourceLineNo">1737</span>    try {<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>      sb.append("HBase is rooted at ").append(zkw.znodePaths.baseZNode);<a name="line.1738"></a>
+<span class="sourceLineNo">1738</span>      sb.append("HBase is rooted at ").append(zkw.getZNodePaths().baseZNode);<a name="line.1738"></a>
 <span class="sourceLineNo">1739</span>      sb.append("\nActive master address: ");<a name="line.1739"></a>
 <span class="sourceLineNo">1740</span>      try {<a name="line.1740"></a>
 <span class="sourceLineNo">1741</span>        sb.append(MasterAddressTracker.getMasterAddress(zkw));<a name="line.1741"></a>
@@ -1751,400 +1751,401 @@
 <span class="sourceLineNo">1743</span>        sb.append("&lt;&lt;FAILED LOOKUP: " + e.getMessage() + "&gt;&gt;");<a name="line.1743"></a>
 <span class="sourceLineNo">1744</span>      }<a name="line.1744"></a>
 <span class="sourceLineNo">1745</span>      sb.append("\nBackup master addresses:");<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      for (String child : listChildrenNoWatch(zkw, zkw.znodePaths.backupMasterAddressesZNode)) {<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        sb.append("\n ").append(child);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      }<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        + new MetaTableLocator().getMetaRegionLocation(zkw));<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>                    + new MetaTableLocator().getMetaRegionLocation(zkw, i));<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      }<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      sb.append("\nRegion servers:");<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>      for (String child : listChildrenNoWatch(zkw, zkw.znodePaths.rsZNode)) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        sb.append("\n ").append(child);<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      try {<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      } catch (KeeperException ke) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>      }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>      for (String server : servers) {<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>        sb.append("\n ").append(server);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        try {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          if (stat == null) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>            break;<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>          }<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span><a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>          for (String s : stat) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            sb.append("\n  ").append(s);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>          }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>        } catch (Exception e) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>        }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    } catch (KeeperException ke) {<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      sb.append("\n" + ke.getMessage());<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    return sb.toString();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>  }<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span><a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>  /**<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>   *<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>   */<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>      throws KeeperException {<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    String replicationZnode = zkw.znodePaths.replicationZNode;<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span><a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>      return;<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>    }<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span><a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>    // do a ls -r on this znode<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    for (String child : children) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      String znode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (znode.equals(zkw.znodePaths.peersZNode)) {<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>        appendPeersZnodes(zkw, znode, sb);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      } else if (znode.equals(zkw.znodePaths.queuesZNode)) {<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        appendRSZnodes(zkw, znode, sb);<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      } else if (znode.equals(zkw.znodePaths.hfileRefsZNode)) {<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>        appendHFileRefsZnodes(zkw, znode, sb);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>      }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>    }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>  }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span><a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>  private static void appendHFileRefsZnodes(ZKWatcher zkw, String hfileRefsZnode,<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    sb.append("\n").append(hfileRefsZnode).append(": ");<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, hfileRefsZnode)) {<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      String znodeToProcess = ZNodePaths.joinZNode(hfileRefsZnode, peerIdZnode);<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>      List&lt;String&gt; peerHFileRefsZnodes = ZKUtil.listChildrenNoWatch(zkw, znodeToProcess);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      int size = peerHFileRefsZnodes.size();<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      for (int i = 0; i &lt; size; i++) {<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        sb.append(peerHFileRefsZnodes.get(i));<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        if (i != size - 1) {<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          sb.append(", ");<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>        }<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>      }<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    }<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>  }<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span><a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>  /**<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>   * @return aq string of replication znodes and log positions<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>   */<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>    StringBuilder sb = new StringBuilder();<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>    return sb.toString();<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>  }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span><a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>      throws KeeperException {<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>    stack.add(znode);<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>    do {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      byte[] data;<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      try {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      } catch (InterruptedException e) {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>        zkw.interruptedException(e);<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>        return;<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      }<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        long position = 0;<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        try {<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>          sb.append(position);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        } catch (DeserializationException ignored) {<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>        } catch (InterruptedException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>          zkw.interruptedException(e);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>          return;<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>        }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>      }<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>    } while (stack.size() &gt; 0);<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>  }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span><a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      byte[] data;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>      try {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      } catch (InterruptedException e) {<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>        zkw.interruptedException(e);<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        return;<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>      }<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>      // parse the data of the above peer znode.<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      try {<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>        String clusterKey = builder.getClusterkey();<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        // add the peer-state.<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>      } catch (IOException ipbe) {<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>  }<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span><a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      "peer-state");<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>      if (!child.equals(peerState)) {<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>        continue;<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span><a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      byte[] peerStateData;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>      try {<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>        sb.append(builder.getState().name());<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      } catch (IOException ipbe) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      } catch (InterruptedException e) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>        zkw.interruptedException(e);<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>        return;<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  }<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span><a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>  /**<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>   * Gets the statistics from the given server.<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>   *<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * @param server  The server to get the statistics from.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param timeout  The socket timeout to use.<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @return The array of response strings.<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   * @throws IOException When the socket communication fails.<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>   */<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>  public static String[] getServerStats(String server, int timeout)<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>  throws IOException {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    String[] sp = server.split(":");<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    if (sp == null || sp.length == 0) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>      return null;<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    }<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span><a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>    String host = sp[0];<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span><a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    try (Socket socket = new Socket()) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      socket.connect(sockAddr, timeout);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span><a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      socket.setSoTimeout(timeout);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          BufferedReader in = new BufferedReader(<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>        out.println("stat");<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>        out.flush();<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>        while (true) {<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>          String line = in.readLine();<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>          if (line != null) {<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>            res.add(line);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>          } else {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>            break;<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        }<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        return res.toArray(new String[res.size()]);<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>      }<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    }<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>  }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    if (!LOG.isTraceEnabled()) {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>      return;<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    }<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span><a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      " byte(s) of data from znode " + znode +<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>          znode.startsWith(zkw.znodePaths.metaZNodePrefix)?<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>            getServerNameOrEmptyString(data):<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>          znode.startsWith(zkw.znodePaths.backupMasterAddressesZNode)?<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>            getServerNameOrEmptyString(data):<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>  }<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    try {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    } catch (DeserializationException e) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>      return "";<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    }<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>  }<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span><a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>  /**<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>   * @throws IOException on ZK errors<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>   */<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>  public static void waitForBaseZNode(Configuration conf) throws IOException {<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    LOG.info("Waiting until the base znode is available");<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>    String parentZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>        HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>    ZooKeeper zk = new ZooKeeper(ZKConfig.getZKQuorumServersString(conf),<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>        conf.getInt(HConstants.ZK_SESSION_TIMEOUT,<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>        HConstants.DEFAULT_ZK_SESSION_TIMEOUT), EmptyWatcher.instance);<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span><a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final int maxTimeMs = 10000;<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span><a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>    KeeperException keeperEx = null;<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    try {<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      try {<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>        for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>          try {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>            if (zk.exists(parentZNode, false) != null) {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>              LOG.info("Parent znode exists: " + parentZNode);<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>              keeperEx = null;<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>              break;<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>            }<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          } catch (KeeperException e) {<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>            keeperEx = e;<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          }<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>          Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>        }<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>      } finally {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>        zk.close();<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>      }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    } catch (InterruptedException ex) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>      Thread.currentThread().interrupt();<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    if (keeperEx != null) {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>      throw new IOException(keeperEx);<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span><a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>  /**<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>   * Convert a {@link DeserializationException} to a more palatable {@link KeeperException}.<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>   * Used when can't let a {@link DeserializationException} out w/o changing public API.<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>   * @param e Exception to convert<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>   * @return Converted exception<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>   */<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>  public static KeeperException convert(final DeserializationException e) {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    KeeperException ke = new KeeperException.DataInconsistencyException();<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>    ke.initCause(e);<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>    return ke;<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>  }<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span><a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>  /**<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>   * Recursively print the current state of ZK (non-transactional)<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>   * @param root name of the root directory in zk to print<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>   */<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>  public static void logZKTree(ZKWatcher zkw, String root) {<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    if (!LOG.isDebugEnabled()) {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      return;<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    }<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span><a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>    LOG.debug("Current zk system:");<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>    String prefix = "|-";<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>    LOG.debug(prefix + root);<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    try {<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      logZKTree(zkw, root, prefix);<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>    } catch (KeeperException e) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      throw new RuntimeException(e);<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    }<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>  }<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span><a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>  /**<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>   * Helper method to print the current state of the ZK tree.<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * @see #logZKTree(ZKWatcher, String)<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * @throws KeeperException if an unexpected exception occurs<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   */<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>  protected static void logZKTree(ZKWatcher zkw, String root, String prefix)<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      throws KeeperException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, root);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span><a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>    if (children == null) {<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      return;<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>    }<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span><a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    for (String child : children) {<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>      LOG.debug(prefix + child);<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      String node = ZNodePaths.joinZNode(root.equals("/") ? "" : root, child);<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      logZKTree(zkw, node, prefix + "---");<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span><a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  /**<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>   * @param position the position to serialize<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>   * @return Serialized protobuf of &lt;code&gt;position&lt;/code&gt; with pb magic prefix prepended suitable<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>   *         for use as content of an wal position in a replication queue.<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>   */<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>  public static byte[] positionToByteArray(final long position) {<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>    byte[] bytes = ReplicationProtos.ReplicationHLogPosition.newBuilder().setPosition(position)<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>        .build().toByteArray();<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    return ProtobufUtil.prependPBMagic(bytes);<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>  }<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span><a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  /**<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>   * @param bytes - Content of a WAL position znode.<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>   * @return long - The current WAL position.<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>   * @throws DeserializationException if the WAL position cannot be parsed<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>   */<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>  public static long parseWALPositionFrom(final byte[] bytes) throws DeserializationException {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>    if (bytes == null) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      throw new DeserializationException("Unable to parse null WAL position.");<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>    }<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    if (ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      ReplicationProtos.ReplicationHLogPosition.Builder builder =<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          ReplicationProtos.ReplicationHLogPosition.newBuilder();<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>      ReplicationProtos.ReplicationHLogPosition position;<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>      try {<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>        position = builder.build();<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      } catch (IOException e) {<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>        throw new DeserializationException(e);<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      return position.getPosition();<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    } else {<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>      if (bytes.length &gt; 0) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>        return Bytes.toLong(bytes);<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>      return 0;<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    }<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  }<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>}<a name="line.2139"></a>
+<span class="sourceLineNo">1746</span>      for (String child : listChildrenNoWatch(zkw,<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>              zkw.getZNodePaths().backupMasterAddressesZNode)) {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        sb.append("\n ").append(child);<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>      }<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        + new MetaTableLocator().getMetaRegionLocation(zkw));<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>                    + new MetaTableLocator().getMetaRegionLocation(zkw, i));<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      }<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      sb.append("\nRegion servers:");<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      for (String child : listChildrenNoWatch(zkw, zkw.getZNodePaths().rsZNode)) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>        sb.append("\n ").append(child);<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>      }<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>      try {<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      } catch (KeeperException ke) {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>      for (String server : servers) {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>        sb.append("\n ").append(server);<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        try {<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>          if (stat == null) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>            break;<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>          }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span><a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          for (String s : stat) {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>            sb.append("\n  ").append(s);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          }<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>        } catch (Exception e) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        }<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>      }<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    } catch (KeeperException ke) {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      sb.append("\n" + ke.getMessage());<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>    }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    return sb.toString();<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  /**<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>   *<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>   */<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      throws KeeperException {<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>    String replicationZnode = zkw.getZNodePaths().replicationZNode;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span><a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>      return;<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    }<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span><a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // do a ls -r on this znode<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>    for (String child : children) {<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      String znode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>      if (znode.equals(zkw.getZNodePaths().peersZNode)) {<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>        appendPeersZnodes(zkw, znode, sb);<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>      } else if (znode.equals(zkw.getZNodePaths().queuesZNode)) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        appendRSZnodes(zkw, znode, sb);<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      } else if (znode.equals(zkw.getZNodePaths().hfileRefsZNode)) {<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>        appendHFileRefsZnodes(zkw, znode, sb);<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      }<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>    }<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>  }<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span><a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>  private static void appendHFileRefsZnodes(ZKWatcher zkw, String hfileRefsZnode,<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>    sb.append("\n").append(hfileRefsZnode).append(": ");<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, hfileRefsZnode)) {<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      String znodeToProcess = ZNodePaths.joinZNode(hfileRefsZnode, peerIdZnode);<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>      List&lt;String&gt; peerHFileRefsZnodes = ZKUtil.listChildrenNoWatch(zkw, znodeToProcess);<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>      int size = peerHFileRefsZnodes.size();<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>      for (int i = 0; i &lt; size; i++) {<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>        sb.append(peerHFileRefsZnodes.get(i));<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (i != size - 1) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          sb.append(", ");<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>      }<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    }<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>  }<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span><a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>  /**<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>   * @return aq string of replication znodes and log positions<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>   */<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>    StringBuilder sb = new StringBuilder();<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    return sb.toString();<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>  }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span><a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>      throws KeeperException {<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    stack.add(znode);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>    do {<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      byte[] data;<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      try {<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      } catch (InterruptedException e) {<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>        zkw.interruptedException(e);<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>        return;<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      }<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>        long position = 0;<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>        try {<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>          sb.append(position);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        } catch (DeserializationException ignored) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        } catch (InterruptedException e) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>          zkw.interruptedException(e);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>          return;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      }<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    } while (stack.size() &gt; 0);<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>  }<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span><a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>      byte[] data;<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>      try {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>      } catch (InterruptedException e) {<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>        zkw.interruptedException(e);<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>        return;<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>      }<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // parse the data of the above peer znode.<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      try {<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>        String clusterKey = builder.getClusterkey();<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        // add the peer-state.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>      } catch (IOException ipbe) {<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>      }<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>    }<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>  }<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span><a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      "peer-state");<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (!child.equals(peerState)) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        continue;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span><a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>      byte[] peerStateData;<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>      try {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        sb.append(builder.getState().name());<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>      } catch (IOException ipbe) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      } catch (InterruptedException e) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>        zkw.interruptedException(e);<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>    }<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>  }<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span><a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>  /**<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>   * Gets the statistics from the given server.<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>   *<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>   * @param server  The server to get the statistics from.<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>   * @param timeout  The socket timeout to use.<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>   * @return The array of response strings.<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>   * @throws IOException When the socket communication fails.<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   */<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>  public static String[] getServerStats(String server, int timeout)<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>    throws IOException {<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>    String[] sp = server.split(":");<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>    if (sp == null || sp.length == 0) {<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>      return null;<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>    }<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span><a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    String host = sp[0];<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span><a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    try (Socket socket = new Socket()) {<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>      socket.connect(sockAddr, timeout);<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span><a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>      socket.setSoTimeout(timeout);<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>          BufferedReader in = new BufferedReader(<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        out.println("stat");<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>        out.flush();<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>        while (true) {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>          String line = in.readLine();<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>          if (line != null) {<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            res.add(line);<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          } else {<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>            break;<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>          }<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>        }<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>        return res.toArray(new String[res.size()]);<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>      }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    }<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>  }<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>    if (!LOG.isTraceEnabled()) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      return;<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>    }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span><a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>      " byte(s) of data from znode " + znode +<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>          znode.startsWith(zkw.getZNodePaths().metaZNodePrefix)?<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>            getServerNameOrEmptyString(data):<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>          znode.startsWith(zkw.getZNodePaths().backupMasterAddressesZNode)?<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>            getServerNameOrEmptyString(data):<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>  }<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span><a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    try {<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>    } catch (DeserializationException e) {<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>      return "";<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    }<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>  }<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span><a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>  /**<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>   * @throws IOException on ZK errors<a name="line.2010"></a>
+<span class="sourceLineNo">2011

<TRUNCATED>

[25/44] hbase-site git commit: Published site at 8377873d22c25185127bc07ea055412d8e302a1a.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html
index 976c263..dbf1493 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html
@@ -44,371 +44,383 @@
 <span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.36"></a>
 <span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.37"></a>
 <span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.slf4j.Logger;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.slf4j.LoggerFactory;<a name="line.42"></a>
-<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.StoreDescriptor;<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> * Reads and filters WAL entries, groups the filtered entries into batches, and puts the batches<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * onto a queue<a name="line.49"></a>
-<span class="sourceLineNo">050</span> */<a name="line.50"></a>
-<span class="sourceLineNo">051</span>@InterfaceAudience.Private<a name="line.51"></a>
-<span class="sourceLineNo">052</span>@InterfaceStability.Evolving<a name="line.52"></a>
-<span class="sourceLineNo">053</span>class ReplicationSourceWALReader extends Thread {<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSourceWALReader.class);<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private final PriorityBlockingQueue&lt;Path&gt; logQueue;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private final FileSystem fs;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private final Configuration conf;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private final WALEntryFilter filter;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  private final ReplicationSource source;<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private final BlockingQueue&lt;WALEntryBatch&gt; entryBatchQueue;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  // max (heap) size of each batch - multiply by number of batches in queue to get total<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private final long replicationBatchSizeCapacity;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  // max count of each batch - multiply by number of batches in queue to get total<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private final int replicationBatchCountCapacity;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  // position in the WAL to start reading at<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private long currentPosition;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private final long sleepForRetries;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private final int maxRetriesMultiplier;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private final boolean eofAutoRecovery;<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  //Indicates whether this particular worker is running<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private boolean isReaderRunning = true;<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private AtomicLong totalBufferUsed;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private long totalBufferQuota;<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * Creates a reader worker for a given WAL queue. Reads WAL entries off a given queue, batches the<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * entries, and puts them on a batch queue.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * @param fs the files system to use<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @param conf configuration to use<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * @param logQueue The WAL queue to read off of<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * @param startPosition position in the first WAL to start reading from<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * @param filter The filter to use while reading<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * @param source replication source<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   */<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  public ReplicationSourceWALReader(FileSystem fs, Configuration conf,<a name="line.89"></a>
-<span class="sourceLineNo">090</span>      PriorityBlockingQueue&lt;Path&gt; logQueue, long startPosition, WALEntryFilter filter,<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      ReplicationSource source) {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    this.logQueue = logQueue;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    this.currentPosition = startPosition;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    this.fs = fs;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    this.conf = conf;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    this.filter = filter;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    this.source = source;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    this.replicationBatchSizeCapacity =<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        this.conf.getLong("replication.source.size.capacity", 1024 * 1024 * 64);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    this.replicationBatchCountCapacity = this.conf.getInt("replication.source.nb.capacity", 25000);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    // memory used will be batchSizeCapacity * (nb.batches + 1)<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    // the +1 is for the current thread reading before placing onto the queue<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    int batchCount = conf.getInt("replication.source.nb.batches", 1);<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    this.totalBufferUsed = source.getSourceManager().getTotalBufferUsed();<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    this.totalBufferQuota = conf.getLong(HConstants.REPLICATION_SOURCE_TOTAL_BUFFER_KEY,<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      HConstants.REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    this.sleepForRetries =<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        this.conf.getLong("replication.source.sleepforretries", 1000);    // 1 second<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    this.maxRetriesMultiplier =<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        this.conf.getInt("replication.source.maxretriesmultiplier", 300); // 5 minutes @ 1 sec per<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    this.eofAutoRecovery = conf.getBoolean("replication.source.eof.autorecovery", false);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    this.entryBatchQueue = new LinkedBlockingQueue&lt;&gt;(batchCount);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    LOG.info("peerClusterZnode=" + source.getQueueId()<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        + ", ReplicationSourceWALReaderThread : " + source.getPeerId()<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        + " inited, replicationBatchSizeCapacity=" + replicationBatchSizeCapacity<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        + ", replicationBatchCountCapacity=" + replicationBatchCountCapacity<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        + ", replicationBatchQueueCapacity=" + batchCount);<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  @Override<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  public void run() {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    int sleepMultiplier = 1;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    while (isReaderRunning()) { // we only loop back here if something fatal happened to our stream<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      try (WALEntryStream entryStream =<a name="line.124"></a>
-<span class="sourceLineNo">125</span>          new WALEntryStream(logQueue, fs, conf, currentPosition,<a name="line.125"></a>
-<span class="sourceLineNo">126</span>              source.getWALFileLengthProvider(), source.getServerWALsBelongTo(),<a name="line.126"></a>
-<span class="sourceLineNo">127</span>              source.getSourceMetrics())) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        while (isReaderRunning()) { // loop here to keep reusing stream while we can<a name="line.128"></a>
-<span class="sourceLineNo">129</span>          if (!source.isPeerEnabled()) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>            Threads.sleep(sleepForRetries);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>            continue;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>          }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>          if (!checkQuota()) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>            continue;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>          }<a name="line.135"></a>
-<span class="sourceLineNo">136</span>          WALEntryBatch batch = readWALEntries(entryStream);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>          currentPosition = entryStream.getPosition();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>          if (batch != null) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>            // need to propagate the batch even it has no entries since it may carry the last<a name="line.139"></a>
-<span class="sourceLineNo">140</span>            // sequence id information for serial replication.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>            LOG.trace("Read {} WAL entries eligible for replication", batch.getNbEntries());<a name="line.141"></a>
-<span class="sourceLineNo">142</span>            entryBatchQueue.put(batch);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>            sleepMultiplier = 1;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>          } else { // got no entries and didn't advance position in WAL<a name="line.144"></a>
-<span class="sourceLineNo">145</span>            handleEmptyWALEntryBatch(entryStream.getCurrentPath());<a name="line.145"></a>
-<span class="sourceLineNo">146</span>            entryStream.reset(); // reuse stream<a name="line.146"></a>
-<span class="sourceLineNo">147</span>          }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        }<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      } catch (IOException e) { // stream related<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        if (sleepMultiplier &lt; maxRetriesMultiplier) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>          LOG.debug("Failed to read stream of replication entries: " + e);<a name="line.151"></a>
-<span class="sourceLineNo">152</span>          sleepMultiplier++;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        } else {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>          LOG.error("Failed to read stream of replication entries", e);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          handleEofException(e);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        }<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        Threads.sleep(sleepForRetries * sleepMultiplier);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      } catch (InterruptedException e) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        LOG.trace("Interrupted while sleeping between WAL reads");<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        Thread.currentThread().interrupt();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  // returns true if we reach the size limit for batch, i.e, we need to finish the batch and return.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  protected final boolean addEntryToBatch(WALEntryBatch batch, Entry entry) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    WALEdit edit = entry.getEdit();<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    if (edit == null || edit.isEmpty()) {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return false;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    long entrySize = getEntrySize(entry);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    batch.addEntry(entry);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    updateBatchStats(batch, entry, entrySize);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    boolean totalBufferTooLarge = acquireBufferQuota(entrySize);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    // Stop if too many entries or too big<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    return totalBufferTooLarge || batch.getHeapSize() &gt;= replicationBatchSizeCapacity ||<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      batch.getNbEntries() &gt;= replicationBatchCountCapacity;<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>  protected static final boolean switched(WALEntryStream entryStream, Path path) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    Path newPath = entryStream.getCurrentPath();<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    return newPath == null || !path.getName().equals(newPath.getName());<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>  protected WALEntryBatch readWALEntries(WALEntryStream entryStream)<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      throws IOException, InterruptedException {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    Path currentPath = entryStream.getCurrentPath();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    if (!entryStream.hasNext()) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      // check whether we have switched a file<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      if (currentPath != null &amp;&amp; switched(entryStream, currentPath)) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        return WALEntryBatch.endOfFile(currentPath);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      } else {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        return null;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    if (currentPath != null) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      if (switched(entryStream, currentPath)) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        return WALEntryBatch.endOfFile(currentPath);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    } else {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      // when reading from the entry stream first time we will enter here<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      currentPath = entryStream.getCurrentPath();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    WALEntryBatch batch = createBatch(entryStream);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    for (;;) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      Entry entry = entryStream.next();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      batch.setLastWalPosition(entryStream.getPosition());<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      entry = filterEntry(entry);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      if (entry != null) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        if (addEntryToBatch(batch, entry)) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>          break;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        }<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      boolean hasNext = entryStream.hasNext();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      // always return if we have switched to a new file<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      if (switched(entryStream, currentPath)) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        batch.setEndOfFile(true);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        break;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      if (!hasNext) {<a name="line.220"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.yetus.audience.InterfaceStability;<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>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.StoreDescriptor;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>/**<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * Reads and filters WAL entries, groups the filtered entries into batches, and puts the batches<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * onto a queue<a name="line.50"></a>
+<span class="sourceLineNo">051</span> */<a name="line.51"></a>
+<span class="sourceLineNo">052</span>@InterfaceAudience.Private<a name="line.52"></a>
+<span class="sourceLineNo">053</span>@InterfaceStability.Evolving<a name="line.53"></a>
+<span class="sourceLineNo">054</span>class ReplicationSourceWALReader extends Thread {<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSourceWALReader.class);<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private final PriorityBlockingQueue&lt;Path&gt; logQueue;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private final FileSystem fs;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private final Configuration conf;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private final WALEntryFilter filter;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private final ReplicationSource source;<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private final BlockingQueue&lt;WALEntryBatch&gt; entryBatchQueue;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  // max (heap) size of each batch - multiply by number of batches in queue to get total<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private final long replicationBatchSizeCapacity;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  // max count of each batch - multiply by number of batches in queue to get total<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private final int replicationBatchCountCapacity;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  // position in the WAL to start reading at<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private long currentPosition;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private final long sleepForRetries;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private final int maxRetriesMultiplier;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private final boolean eofAutoRecovery;<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  //Indicates whether this particular worker is running<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  private boolean isReaderRunning = true;<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private AtomicLong totalBufferUsed;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private long totalBufferQuota;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * Creates a reader worker for a given WAL queue. Reads WAL entries off a given queue, batches the<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * entries, and puts them on a batch queue.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   * @param fs the files system to use<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * @param conf configuration to use<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * @param logQueue The WAL queue to read off of<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * @param startPosition position in the first WAL to start reading from<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * @param filter The filter to use while reading<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   * @param source replication source<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   */<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public ReplicationSourceWALReader(FileSystem fs, Configuration conf,<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      PriorityBlockingQueue&lt;Path&gt; logQueue, long startPosition, WALEntryFilter filter,<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      ReplicationSource source) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    this.logQueue = logQueue;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    this.currentPosition = startPosition;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    this.fs = fs;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    this.conf = conf;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    this.filter = filter;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    this.source = source;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    this.replicationBatchSizeCapacity =<a name="line.99"></a>
+<span class="sourceLineNo">100</span>        this.conf.getLong("replication.source.size.capacity", 1024 * 1024 * 64);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    this.replicationBatchCountCapacity = this.conf.getInt("replication.source.nb.capacity", 25000);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    // memory used will be batchSizeCapacity * (nb.batches + 1)<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    // the +1 is for the current thread reading before placing onto the queue<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    int batchCount = conf.getInt("replication.source.nb.batches", 1);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    this.totalBufferUsed = source.getSourceManager().getTotalBufferUsed();<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    this.totalBufferQuota = conf.getLong(HConstants.REPLICATION_SOURCE_TOTAL_BUFFER_KEY,<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      HConstants.REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    this.sleepForRetries =<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        this.conf.getLong("replication.source.sleepforretries", 1000);    // 1 second<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    this.maxRetriesMultiplier =<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        this.conf.getInt("replication.source.maxretriesmultiplier", 300); // 5 minutes @ 1 sec per<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    this.eofAutoRecovery = conf.getBoolean("replication.source.eof.autorecovery", false);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    this.entryBatchQueue = new LinkedBlockingQueue&lt;&gt;(batchCount);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    LOG.info("peerClusterZnode=" + source.getQueueId()<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        + ", ReplicationSourceWALReaderThread : " + source.getPeerId()<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        + " inited, replicationBatchSizeCapacity=" + replicationBatchSizeCapacity<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        + ", replicationBatchCountCapacity=" + replicationBatchCountCapacity<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        + ", replicationBatchQueueCapacity=" + batchCount);<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 void run() {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    int sleepMultiplier = 1;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    while (isReaderRunning()) { // we only loop back here if something fatal happened to our stream<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      try (WALEntryStream entryStream =<a name="line.125"></a>
+<span class="sourceLineNo">126</span>          new WALEntryStream(logQueue, fs, conf, currentPosition,<a name="line.126"></a>
+<span class="sourceLineNo">127</span>              source.getWALFileLengthProvider(), source.getServerWALsBelongTo(),<a name="line.127"></a>
+<span class="sourceLineNo">128</span>              source.getSourceMetrics())) {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        while (isReaderRunning()) { // loop here to keep reusing stream while we can<a name="line.129"></a>
+<span class="sourceLineNo">130</span>          if (!source.isPeerEnabled()) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>            Threads.sleep(sleepForRetries);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>            continue;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>          }<a name="line.133"></a>
+<span class="sourceLineNo">134</span>          if (!checkQuota()) {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>            continue;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>          }<a name="line.136"></a>
+<span class="sourceLineNo">137</span>          WALEntryBatch batch = readWALEntries(entryStream);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>          currentPosition = entryStream.getPosition();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>          if (batch != null) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>            // need to propagate the batch even it has no entries since it may carry the last<a name="line.140"></a>
+<span class="sourceLineNo">141</span>            // sequence id information for serial replication.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>            LOG.trace("Read {} WAL entries eligible for replication", batch.getNbEntries());<a name="line.142"></a>
+<span class="sourceLineNo">143</span>            entryBatchQueue.put(batch);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>            sleepMultiplier = 1;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>          } else { // got no entries and didn't advance position in WAL<a name="line.145"></a>
+<span class="sourceLineNo">146</span>            handleEmptyWALEntryBatch(entryStream.getCurrentPath());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>            entryStream.reset(); // reuse stream<a name="line.147"></a>
+<span class="sourceLineNo">148</span>          }<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        }<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      } catch (IOException e) { // stream related<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        if (sleepMultiplier &lt; maxRetriesMultiplier) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>          LOG.debug("Failed to read stream of replication entries: " + e);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>          sleepMultiplier++;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>        } else {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>          LOG.error("Failed to read stream of replication entries", e);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>          handleEofException(e);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        }<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        Threads.sleep(sleepForRetries * sleepMultiplier);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      } catch (InterruptedException e) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        LOG.trace("Interrupted while sleeping between WAL reads");<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        Thread.currentThread().interrupt();<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>  }<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  // returns true if we reach the size limit for batch, i.e, we need to finish the batch and return.<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  protected final boolean addEntryToBatch(WALEntryBatch batch, Entry entry) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    WALEdit edit = entry.getEdit();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    if (edit == null || edit.isEmpty()) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      return false;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    long entrySize = getEntrySizeIncludeBulkLoad(entry);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    long entrySizeExcludeBulkLoad = getEntrySizeExcludeBulkLoad(entry);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    batch.addEntry(entry);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    updateBatchStats(batch, entry, entrySize);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    boolean totalBufferTooLarge = acquireBufferQuota(entrySizeExcludeBulkLoad);<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    // Stop if too many entries or too big<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    return totalBufferTooLarge || batch.getHeapSize() &gt;= replicationBatchSizeCapacity ||<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      batch.getNbEntries() &gt;= replicationBatchCountCapacity;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
+<span class="sourceLineNo">182</span><a name="line.182"></a>
+<span class="sourceLineNo">183</span>  protected static final boolean switched(WALEntryStream entryStream, Path path) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    Path newPath = entryStream.getCurrentPath();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    return newPath == null || !path.getName().equals(newPath.getName());<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span>  protected WALEntryBatch readWALEntries(WALEntryStream entryStream)<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      throws IOException, InterruptedException {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    Path currentPath = entryStream.getCurrentPath();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    if (!entryStream.hasNext()) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      // check whether we have switched a file<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      if (currentPath != null &amp;&amp; switched(entryStream, currentPath)) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        return WALEntryBatch.endOfFile(currentPath);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      } else {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        return null;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    if (currentPath != null) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      if (switched(entryStream, currentPath)) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        return WALEntryBatch.endOfFile(currentPath);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    } else {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      // when reading from the entry stream first time we will enter here<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      currentPath = entryStream.getCurrentPath();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    WALEntryBatch batch = createBatch(entryStream);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    for (;;) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      Entry entry = entryStream.next();<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      batch.setLastWalPosition(entryStream.getPosition());<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      entry = filterEntry(entry);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      if (entry != null) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        if (addEntryToBatch(batch, entry)) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>          break;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      boolean hasNext = entryStream.hasNext();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      // always return if we have switched to a new file<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      if (switched(entryStream, currentPath)) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        batch.setEndOfFile(true);<a name="line.220"></a>
 <span class="sourceLineNo">221</span>        break;<a name="line.221"></a>
 <span class="sourceLineNo">222</span>      }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    return batch;<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>  private void handleEmptyWALEntryBatch(Path currentPath) throws InterruptedException {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    LOG.trace("Didn't read any new entries from WAL");<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    if (source.isRecovered()) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      // we're done with queue recovery, shut ourself down<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      setReaderRunning(false);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      // shuts down shipper thread immediately<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      entryBatchQueue.put(WALEntryBatch.NO_MORE_DATA);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    } else {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      Thread.sleep(sleepForRetries);<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><a name="line.238"></a>
-<span class="sourceLineNo">239</span>  // if we get an EOF due to a zero-length log, and there are other logs in queue<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // (highly likely we've closed the current log), we've hit the max retries, and autorecovery is<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // enabled, then dump the log<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  private void handleEofException(IOException e) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    if ((e instanceof EOFException || e.getCause() instanceof EOFException) &amp;&amp;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      logQueue.size() &gt; 1 &amp;&amp; this.eofAutoRecovery) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      try {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        if (fs.getFileStatus(logQueue.peek()).getLen() == 0) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          LOG.warn("Forcing removal of 0 length log in queue: " + logQueue.peek());<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          logQueue.remove();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          currentPosition = 0;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      } catch (IOException ioe) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        LOG.warn("Couldn't get file length information about log " + logQueue.peek());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  public Path getCurrentPath() {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    // if we've read some WAL entries, get the Path we read from<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    WALEntryBatch batchQueueHead = entryBatchQueue.peek();<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (batchQueueHead != null) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return batchQueueHead.getLastWalPath();<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    // otherwise, we must be currently reading from the head of the log queue<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    return logQueue.peek();<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>  //returns false if we've already exceeded the global quota<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  private boolean checkQuota() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // try not to go over total quota<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    if (totalBufferUsed.get() &gt; totalBufferQuota) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      Threads.sleep(sleepForRetries);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      return false;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    return true;<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>  protected final WALEntryBatch createBatch(WALEntryStream entryStream) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    return new WALEntryBatch(replicationBatchCountCapacity, entryStream.getCurrentPath());<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>  protected final Entry filterEntry(Entry entry) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    Entry filtered = filter.filter(entry);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    if (entry != null &amp;&amp; filtered == null) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      source.getSourceMetrics().incrLogEditsFiltered();<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    return filtered;<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>  /**<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * Retrieves the next batch of WAL entries from the queue, waiting up to the specified time for a<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * batch to become available<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * @return A batch of entries, along with the position in the log after reading the batch<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * @throws InterruptedException if interrupted while waiting<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  public WALEntryBatch take() throws InterruptedException {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    return entryBatchQueue.take();<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>  private long getEntrySize(Entry entry) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    WALEdit edit = entry.getEdit();<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    return edit.heapSize() + calculateTotalSizeOfStoreFiles(edit);<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>  private void updateBatchStats(WALEntryBatch batch, Entry entry, long entrySize) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    WALEdit edit = entry.getEdit();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    batch.incrementHeapSize(entrySize);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    Pair&lt;Integer, Integer&gt; nbRowsAndHFiles = countDistinctRowKeysAndHFiles(edit);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    batch.incrementNbRowKeys(nbRowsAndHFiles.getFirst());<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    batch.incrementNbHFiles(nbRowsAndHFiles.getSecond());<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  /**<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * Count the number of different row keys in the given edit because of mini-batching. We assume<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * that there's at least one Cell in the WALEdit.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * @param edit edit to count row keys from<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * @return number of different row keys and HFiles<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  private Pair&lt;Integer, Integer&gt; countDistinctRowKeysAndHFiles(WALEdit edit) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    int distinctRowKeys = 1;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    int totalHFileEntries = 0;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    Cell lastCell = cells.get(0);<a name="line.322"></a>
+<span class="sourceLineNo">223</span>      if (!hasNext) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        break;<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>    return batch;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>  private void handleEmptyWALEntryBatch(Path currentPath) throws InterruptedException {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    LOG.trace("Didn't read any new entries from WAL");<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    if (source.isRecovered()) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      // we're done with queue recovery, shut ourself down<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      setReaderRunning(false);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      // shuts down shipper thread immediately<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      entryBatchQueue.put(WALEntryBatch.NO_MORE_DATA);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    } else {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      Thread.sleep(sleepForRetries);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  }<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>  // if we get an EOF due to a zero-length log, and there are other logs in queue<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  // (highly likely we've closed the current log), we've hit the max retries, and autorecovery is<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // enabled, then dump the log<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  private void handleEofException(IOException e) {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    if ((e instanceof EOFException || e.getCause() instanceof EOFException) &amp;&amp;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      logQueue.size() &gt; 1 &amp;&amp; this.eofAutoRecovery) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      try {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        if (fs.getFileStatus(logQueue.peek()).getLen() == 0) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          LOG.warn("Forcing removal of 0 length log in queue: " + logQueue.peek());<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          logQueue.remove();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>          currentPosition = 0;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      } catch (IOException ioe) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>        LOG.warn("Couldn't get file length information about log " + logQueue.peek());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  }<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>  public Path getCurrentPath() {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    // if we've read some WAL entries, get the Path we read from<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    WALEntryBatch batchQueueHead = entryBatchQueue.peek();<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    if (batchQueueHead != null) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      return batchQueueHead.getLastWalPath();<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    // otherwise, we must be currently reading from the head of the log queue<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return logQueue.peek();<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>  //returns false if we've already exceeded the global quota<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private boolean checkQuota() {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    // try not to go over total quota<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    if (totalBufferUsed.get() &gt; totalBufferQuota) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      Threads.sleep(sleepForRetries);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      return false;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    return true;<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>  protected final WALEntryBatch createBatch(WALEntryStream entryStream) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    return new WALEntryBatch(replicationBatchCountCapacity, entryStream.getCurrentPath());<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>  protected final Entry filterEntry(Entry entry) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    Entry filtered = filter.filter(entry);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    if (entry != null &amp;&amp; filtered == null) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      source.getSourceMetrics().incrLogEditsFiltered();<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    return filtered;<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>
+<span class="sourceLineNo">292</span>  /**<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   * Retrieves the next batch of WAL entries from the queue, waiting up to the specified time for a<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   * batch to become available<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   * @return A batch of entries, along with the position in the log after reading the batch<a name="line.295"></a>
+<span class="sourceLineNo">296</span>   * @throws InterruptedException if interrupted while waiting<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   */<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  public WALEntryBatch take() throws InterruptedException {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    return entryBatchQueue.take();<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  private long getEntrySizeIncludeBulkLoad(Entry entry) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    WALEdit edit = entry.getEdit();<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    WALKey key = entry.getKey();<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    return edit.heapSize() + sizeOfStoreFilesIncludeBulkLoad(edit) +<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        key.estimatedSerializedSizeOf();<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>  public static long getEntrySizeExcludeBulkLoad(Entry entry) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    WALEdit edit = entry.getEdit();<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    WALKey key = entry.getKey();<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    return edit.heapSize() + key.estimatedSerializedSizeOf();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  }<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span>  private void updateBatchStats(WALEntryBatch batch, Entry entry, long entrySize) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    WALEdit edit = entry.getEdit();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    batch.incrementHeapSize(entrySize);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    Pair&lt;Integer, Integer&gt; nbRowsAndHFiles = countDistinctRowKeysAndHFiles(edit);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    batch.incrementNbRowKeys(nbRowsAndHFiles.getFirst());<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    batch.incrementNbHFiles(nbRowsAndHFiles.getSecond());<a name="line.321"></a>
+<span class="sourceLineNo">322</span>  }<a name="line.322"></a>
 <span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    int totalCells = edit.size();<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      // Count HFiles to be replicated<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      if (CellUtil.matchingQualifier(cells.get(i), WALEdit.BULK_LOAD)) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        try {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>          BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cells.get(i));<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.330"></a>
-<span class="sourceLineNo">331</span>          int totalStores = stores.size();<a name="line.331"></a>
-<span class="sourceLineNo">332</span>          for (int j = 0; j &lt; totalStores; j++) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>            totalHFileEntries += stores.get(j).getStoreFileList().size();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>          }<a name="line.334"></a>
-<span class="sourceLineNo">335</span>        } catch (IOException e) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>          LOG.error("Failed to deserialize bulk load entry from wal edit. "<a name="line.336"></a>
-<span class="sourceLineNo">337</span>              + "Then its hfiles count will not be added into metric.");<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        }<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>      if (!CellUtil.matchingRows(cells.get(i), lastCell)) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        distinctRowKeys++;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      lastCell = cells.get(i);<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>    Pair&lt;Integer, Integer&gt; result = new Pair&lt;&gt;(distinctRowKeys, totalHFileEntries);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    return result;<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>  /**<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * Calculate the total size of all the store files<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * @param edit edit to count row keys from<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * @return the total size of the store files<a name="line.354"></a>
-<span class="sourceLineNo">355</span>   */<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  private int calculateTotalSizeOfStoreFiles(WALEdit edit) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    int totalStoreFilesSize = 0;<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    int totalCells = edit.size();<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      if (CellUtil.matchingQualifier(cells.get(i), WALEdit.BULK_LOAD)) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        try {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cells.get(i));<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          int totalStores = stores.size();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>          for (int j = 0; j &lt; totalStores; j++) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            totalStoreFilesSize =<a name="line.368"></a>
-<span class="sourceLineNo">369</span>                (int) (totalStoreFilesSize + stores.get(j).getStoreFileSizeBytes());<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        } catch (IOException e) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          LOG.error("Failed to deserialize bulk load entry from wal edit. "<a name="line.372"></a>
-<span class="sourceLineNo">373</span>              + "Size of HFiles part of cell will not be considered in replication "<a name="line.373"></a>
-<span class="sourceLineNo">374</span>              + "request size calculation.",<a name="line.374"></a>
-<span class="sourceLineNo">375</span>            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>    return totalStoreFilesSize;<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>  /**<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * @param size delta size for grown buffer<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * @return true if we should clear buffer and push all<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   */<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  private boolean acquireBufferQuota(long size) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    return totalBufferUsed.addAndGet(size) &gt;= totalBufferQuota;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * @return whether the reader thread is running<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   */<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public boolean isReaderRunning() {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return isReaderRunning &amp;&amp; !isInterrupted();<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  /**<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * @param readerRunning the readerRunning to set<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  public void setReaderRunning(boolean readerRunning) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    this.isReaderRunning = readerRunning;<a name="line.401"></a>
-<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
-<span class="sourceLineNo">403</span>}<a name="line.403"></a>
+<span class="sourceLineNo">324</span>  /**<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * Count the number of different row keys in the given edit because of mini-batching. We assume<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * that there's at least one Cell in the WALEdit.<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * @param edit edit to count row keys from<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   * @return number of different row keys and HFiles<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   */<a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Pair&lt;Integer, Integer&gt; countDistinctRowKeysAndHFiles(WALEdit edit) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    int distinctRowKeys = 1;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    int totalHFileEntries = 0;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    Cell lastCell = cells.get(0);<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>    int totalCells = edit.size();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      // Count HFiles to be replicated<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      if (CellUtil.matchingQualifier(cells.get(i), WALEdit.BULK_LOAD)) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        try {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>          BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cells.get(i));<a name="line.341"></a>
+<span class="sourceLineNo">342</span>          List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>          int totalStores = stores.size();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>          for (int j = 0; j &lt; totalStores; j++) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>            totalHFileEntries += stores.get(j).getStoreFileList().size();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>          }<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        } catch (IOException e) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>          LOG.error("Failed to deserialize bulk load entry from wal edit. "<a name="line.348"></a>
+<span class="sourceLineNo">349</span>              + "Then its hfiles count will not be added into metric.");<a name="line.349"></a>
+<span class="sourceLineNo">350</span>        }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>      if (!CellUtil.matchingRows(cells.get(i), lastCell)) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        distinctRowKeys++;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      lastCell = cells.get(i);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>    Pair&lt;Integer, Integer&gt; result = new Pair&lt;&gt;(distinctRowKeys, totalHFileEntries);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    return result;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span>  /**<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   * Calculate the total size of all the store files<a name="line.364"></a>
+<span class="sourceLineNo">365</span>   * @param edit edit to count row keys from<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * @return the total size of the store files<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   */<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  private int sizeOfStoreFilesIncludeBulkLoad(WALEdit edit) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    int totalStoreFilesSize = 0;<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    int totalCells = edit.size();<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      if (CellUtil.matchingQualifier(cells.get(i), WALEdit.BULK_LOAD)) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        try {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>          BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cells.get(i));<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          int totalStores = stores.size();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          for (int j = 0; j &lt; totalStores; j++) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>            totalStoreFilesSize =<a name="line.380"></a>
+<span class="sourceLineNo">381</span>                (int) (totalStoreFilesSize + stores.get(j).getStoreFileSizeBytes());<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        } catch (IOException e) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          LOG.error("Failed to deserialize bulk load entry from wal edit. "<a name="line.384"></a>
+<span class="sourceLineNo">385</span>              + "Size of HFiles part of cell will not be considered in replication "<a name="line.385"></a>
+<span class="sourceLineNo">386</span>              + "request size calculation.",<a name="line.386"></a>
+<span class="sourceLineNo">387</span>            e);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        }<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    return totalStoreFilesSize;<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>  /**<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * @param size delta size for grown buffer<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @return true if we should clear buffer and push all<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private boolean acquireBufferQuota(long size) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    return totalBufferUsed.addAndGet(size) &gt;= totalBufferQuota;<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>  /**<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * @return whether the reader thread is running<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  public boolean isReaderRunning() {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    return isReaderRunning &amp;&amp; !isInterrupted();<a name="line.406"></a>
+<span class="sourceLineNo">407</span>  }<a name="line.407"></a>
+<span class="sourceLineNo">408</span><a name="line.408"></a>
+<span class="sourceLineNo">409</span>  /**<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   * @param readerRunning the readerRunning to set<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   */<a name="line.411"></a>
+<span class="sourceLineNo">412</span>  public void setReaderRunning(boolean readerRunning) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    this.isReaderRunning = readerRunning;<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html
index ed95cbf..ec4de62 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html
@@ -355,7 +355,7 @@
 <span class="sourceLineNo">347</span>  }<a name="line.347"></a>
 <span class="sourceLineNo">348</span><a name="line.348"></a>
 <span class="sourceLineNo">349</span>  List&lt;RSGroupInfo&gt; retrieveGroupListFromZookeeper() throws IOException {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode);<a name="line.350"></a>
+<span class="sourceLineNo">350</span>    String groupBasePath = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, rsGroupZNode);<a name="line.350"></a>
 <span class="sourceLineNo">351</span>    List&lt;RSGroupInfo&gt; RSGroupInfoList = Lists.newArrayList();<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    //Overwrite any info stored by table, this takes precedence<a name="line.352"></a>
 <span class="sourceLineNo">353</span>    try {<a name="line.353"></a>
@@ -496,7 +496,7 @@
 <span class="sourceLineNo">488</span>    resetRSGroupAndTableMaps(newGroupMap, newTableMap);<a name="line.488"></a>
 <span class="sourceLineNo">489</span><a name="line.489"></a>
 <span class="sourceLineNo">490</span>    try {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode);<a name="line.491"></a>
+<span class="sourceLineNo">491</span>      String groupBasePath = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, rsGroupZNode);<a name="line.491"></a>
 <span class="sourceLineNo">492</span>      ZKUtil.createAndFailSilent(watcher, groupBasePath, ProtobufMagic.PB_MAGIC);<a name="line.492"></a>
 <span class="sourceLineNo">493</span><a name="line.493"></a>
 <span class="sourceLineNo">494</span>      List&lt;ZKUtil.ZKUtilOp&gt; zkOps = new ArrayList&lt;&gt;(newGroupMap.size());<a name="line.494"></a>
@@ -557,7 +557,7 @@
 <span class="sourceLineNo">549</span>    LOG.debug("Reading online RS from zookeeper");<a name="line.549"></a>
 <span class="sourceLineNo">550</span>    List&lt;ServerName&gt; servers = new LinkedList&lt;&gt;();<a name="line.550"></a>
 <span class="sourceLineNo">551</span>    try {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      for (String el: ZKUtil.listChildrenNoWatch(watcher, watcher.znodePaths.rsZNode)) {<a name="line.552"></a>
+<span class="sourceLineNo">552</span>      for (String el: ZKUtil.listChildrenNoWatch(watcher, watcher.getZNodePaths().rsZNode)) {<a name="line.552"></a>
 <span class="sourceLineNo">553</span>        servers.add(ServerName.parseServerName(el));<a name="line.553"></a>
 <span class="sourceLineNo">554</span>      }<a name="line.554"></a>
 <span class="sourceLineNo">555</span>    } catch (KeeperException e) {<a name="line.555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
index ed95cbf..ec4de62 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
@@ -355,7 +355,7 @@
 <span class="sourceLineNo">347</span>  }<a name="line.347"></a>
 <span class="sourceLineNo">348</span><a name="line.348"></a>
 <span class="sourceLineNo">349</span>  List&lt;RSGroupInfo&gt; retrieveGroupListFromZookeeper() throws IOException {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode);<a name="line.350"></a>
+<span class="sourceLineNo">350</span>    String groupBasePath = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, rsGroupZNode);<a name="line.350"></a>
 <span class="sourceLineNo">351</span>    List&lt;RSGroupInfo&gt; RSGroupInfoList = Lists.newArrayList();<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    //Overwrite any info stored by table, this takes precedence<a name="line.352"></a>
 <span class="sourceLineNo">353</span>    try {<a name="line.353"></a>
@@ -496,7 +496,7 @@
 <span class="sourceLineNo">488</span>    resetRSGroupAndTableMaps(newGroupMap, newTableMap);<a name="line.488"></a>
 <span class="sourceLineNo">489</span><a name="line.489"></a>
 <span class="sourceLineNo">490</span>    try {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode);<a name="line.491"></a>
+<span class="sourceLineNo">491</span>      String groupBasePath = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, rsGroupZNode);<a name="line.491"></a>
 <span class="sourceLineNo">492</span>      ZKUtil.createAndFailSilent(watcher, groupBasePath, ProtobufMagic.PB_MAGIC);<a name="line.492"></a>
 <span class="sourceLineNo">493</span><a name="line.493"></a>
 <span class="sourceLineNo">494</span>      List&lt;ZKUtil.ZKUtilOp&gt; zkOps = new ArrayList&lt;&gt;(newGroupMap.size());<a name="line.494"></a>
@@ -557,7 +557,7 @@
 <span class="sourceLineNo">549</span>    LOG.debug("Reading online RS from zookeeper");<a name="line.549"></a>
 <span class="sourceLineNo">550</span>    List&lt;ServerName&gt; servers = new LinkedList&lt;&gt;();<a name="line.550"></a>
 <span class="sourceLineNo">551</span>    try {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      for (String el: ZKUtil.listChildrenNoWatch(watcher, watcher.znodePaths.rsZNode)) {<a name="line.552"></a>
+<span class="sourceLineNo">552</span>      for (String el: ZKUtil.listChildrenNoWatch(watcher, watcher.getZNodePaths().rsZNode)) {<a name="line.552"></a>
 <span class="sourceLineNo">553</span>        servers.add(ServerName.parseServerName(el));<a name="line.553"></a>
 <span class="sourceLineNo">554</span>      }<a name="line.554"></a>
 <span class="sourceLineNo">555</span>    } catch (KeeperException e) {<a name="line.555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
index ed95cbf..ec4de62 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
@@ -355,7 +355,7 @@
 <span class="sourceLineNo">347</span>  }<a name="line.347"></a>
 <span class="sourceLineNo">348</span><a name="line.348"></a>
 <span class="sourceLineNo">349</span>  List&lt;RSGroupInfo&gt; retrieveGroupListFromZookeeper() throws IOException {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode);<a name="line.350"></a>
+<span class="sourceLineNo">350</span>    String groupBasePath = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, rsGroupZNode);<a name="line.350"></a>
 <span class="sourceLineNo">351</span>    List&lt;RSGroupInfo&gt; RSGroupInfoList = Lists.newArrayList();<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    //Overwrite any info stored by table, this takes precedence<a name="line.352"></a>
 <span class="sourceLineNo">353</span>    try {<a name="line.353"></a>
@@ -496,7 +496,7 @@
 <span class="sourceLineNo">488</span>    resetRSGroupAndTableMaps(newGroupMap, newTableMap);<a name="line.488"></a>
 <span class="sourceLineNo">489</span><a name="line.489"></a>
 <span class="sourceLineNo">490</span>    try {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode);<a name="line.491"></a>
+<span class="sourceLineNo">491</span>      String groupBasePath = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, rsGroupZNode);<a name="line.491"></a>
 <span class="sourceLineNo">492</span>      ZKUtil.createAndFailSilent(watcher, groupBasePath, ProtobufMagic.PB_MAGIC);<a name="line.492"></a>
 <span class="sourceLineNo">493</span><a name="line.493"></a>
 <span class="sourceLineNo">494</span>      List&lt;ZKUtil.ZKUtilOp&gt; zkOps = new ArrayList&lt;&gt;(newGroupMap.size());<a name="line.494"></a>
@@ -557,7 +557,7 @@
 <span class="sourceLineNo">549</span>    LOG.debug("Reading online RS from zookeeper");<a name="line.549"></a>
 <span class="sourceLineNo">550</span>    List&lt;ServerName&gt; servers = new LinkedList&lt;&gt;();<a name="line.550"></a>
 <span class="sourceLineNo">551</span>    try {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      for (String el: ZKUtil.listChildrenNoWatch(watcher, watcher.znodePaths.rsZNode)) {<a name="line.552"></a>
+<span class="sourceLineNo">552</span>      for (String el: ZKUtil.listChildrenNoWatch(watcher, watcher.getZNodePaths().rsZNode)) {<a name="line.552"></a>
 <span class="sourceLineNo">553</span>        servers.add(ServerName.parseServerName(el));<a name="line.553"></a>
 <span class="sourceLineNo">554</span>      }<a name="line.554"></a>
 <span class="sourceLineNo">555</span>    } catch (KeeperException e) {<a name="line.555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3797f0e6/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html
index ed95cbf..ec4de62 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html
@@ -355,7 +355,7 @@
 <span class="sourceLineNo">347</span>  }<a name="line.347"></a>
 <span class="sourceLineNo">348</span><a name="line.348"></a>
 <span class="sourceLineNo">349</span>  List&lt;RSGroupInfo&gt; retrieveGroupListFromZookeeper() throws IOException {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode);<a name="line.350"></a>
+<span class="sourceLineNo">350</span>    String groupBasePath = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, rsGroupZNode);<a name="line.350"></a>
 <span class="sourceLineNo">351</span>    List&lt;RSGroupInfo&gt; RSGroupInfoList = Lists.newArrayList();<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    //Overwrite any info stored by table, this takes precedence<a name="line.352"></a>
 <span class="sourceLineNo">353</span>    try {<a name="line.353"></a>
@@ -496,7 +496,7 @@
 <span class="sourceLineNo">488</span>    resetRSGroupAndTableMaps(newGroupMap, newTableMap);<a name="line.488"></a>
 <span class="sourceLineNo">489</span><a name="line.489"></a>
 <span class="sourceLineNo">490</span>    try {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode);<a name="line.491"></a>
+<span class="sourceLineNo">491</span>      String groupBasePath = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, rsGroupZNode);<a name="line.491"></a>
 <span class="sourceLineNo">492</span>      ZKUtil.createAndFailSilent(watcher, groupBasePath, ProtobufMagic.PB_MAGIC);<a name="line.492"></a>
 <span class="sourceLineNo">493</span><a name="line.493"></a>
 <span class="sourceLineNo">494</span>      List&lt;ZKUtil.ZKUtilOp&gt; zkOps = new ArrayList&lt;&gt;(newGroupMap.size());<a name="line.494"></a>
@@ -557,7 +557,7 @@
 <span class="sourceLineNo">549</span>    LOG.debug("Reading online RS from zookeeper");<a name="line.549"></a>
 <span class="sourceLineNo">550</span>    List&lt;ServerName&gt; servers = new LinkedList&lt;&gt;();<a name="line.550"></a>
 <span class="sourceLineNo">551</span>    try {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      for (String el: ZKUtil.listChildrenNoWatch(watcher, watcher.znodePaths.rsZNode)) {<a name="line.552"></a>
+<span class="sourceLineNo">552</span>      for (String el: ZKUtil.listChildrenNoWatch(watcher, watcher.getZNodePaths().rsZNode)) {<a name="line.552"></a>
 <span class="sourceLineNo">553</span>        servers.add(ServerName.parseServerName(el));<a name="line.553"></a>
 <span class="sourceLineNo">554</span>      }<a name="line.554"></a>
 <span class="sourceLineNo">555</span>    } catch (KeeperException e) {<a name="line.555"></a>