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/04/27 14:47:20 UTC

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

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site a837f1d6b -> d0a210805


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html
index 47f2aac..268cf07 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html
@@ -127,138 +127,139 @@
 <span class="sourceLineNo">119</span>  public static void setUpBeforeClass() throws Exception {<a name="line.119"></a>
 <span class="sourceLineNo">120</span>    UTIL.getConfiguration().setInt("replication.source.nb.capacity", 10);<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    UTIL.getConfiguration().setLong("replication.sleep.before.failover", 1000);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    UTIL.startMiniCluster(3);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // disable balancer<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    UTIL.getAdmin().balancerSwitch(false, true);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    LOG_DIR = UTIL.getDataTestDirOnTestFS("replicated");<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    FS = UTIL.getTestFileSystem();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    FS.mkdirs(LOG_DIR);<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>  @AfterClass<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public static void tearDownAfterClass() throws Exception {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    UTIL.shutdownMiniCluster();<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>  @After<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  public void tearDown() throws Exception {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    Admin admin = UTIL.getAdmin();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    for (ReplicationPeerDescription pd : admin.listReplicationPeers()) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      admin.removeReplicationPeer(pd.getPeerId());<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    rollAllWALs();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    if (WRITER != null) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      WRITER.close();<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      WRITER = null;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  protected static void moveRegion(RegionInfo region, HRegionServer rs) throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    UTIL.getAdmin().move(region.getEncodedNameAsBytes(),<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      Bytes.toBytes(rs.getServerName().getServerName()));<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    UTIL.waitFor(30000, new ExplainingPredicate&lt;Exception&gt;() {<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>      @Override<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      public boolean evaluate() throws Exception {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        return rs.getRegion(region.getEncodedName()) != null;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      }<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>      @Override<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      public String explainFailure() throws Exception {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        return region + " is still not on " + rs;<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>  protected static void rollAllWALs() throws Exception {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    for (RegionServerThread t : UTIL.getMiniHBaseCluster().getLiveRegionServerThreads()) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      t.getRegionServer().getWalRoller().requestRollAll();<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    UTIL.waitFor(30000, new ExplainingPredicate&lt;Exception&gt;() {<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>      @Override<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      public boolean evaluate() throws Exception {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        return UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().stream()<a name="line.173"></a>
-<span class="sourceLineNo">174</span>          .map(t -&gt; t.getRegionServer()).allMatch(HRegionServer::walRollRequestFinished);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>      @Override<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      public String explainFailure() throws Exception {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        return "Log roll has not finished yet";<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      }<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    });<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  protected final void setupWALWriter() throws IOException {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    logPath = new Path(LOG_DIR, name.getMethodName());<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    WRITER = WALFactory.createWALWriter(FS, logPath, UTIL.getConfiguration());<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>  protected final void waitUntilReplicationDone(int expectedEntries) throws Exception {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    UTIL.waitFor(30000, new ExplainingPredicate&lt;Exception&gt;() {<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>      @Override<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      public boolean evaluate() throws Exception {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        try (WAL.Reader reader = WALFactory.createReader(FS, logPath, UTIL.getConfiguration())) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          int count = 0;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          while (reader.next() != null) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>            count++;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>          }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>          return count &gt;= expectedEntries;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>        } catch (IOException e) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>          return false;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      }<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span>      @Override<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      public String explainFailure() throws Exception {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        return "Not enough entries replicated";<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    });<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  protected final void enablePeerAndWaitUntilReplicationDone(int expectedEntries) throws Exception {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    UTIL.getAdmin().enableReplicationPeer(PEER_ID);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    waitUntilReplicationDone(expectedEntries);<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>  protected final void addPeer(boolean enabled) throws IOException {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    UTIL.getAdmin().addReplicationPeer(PEER_ID,<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      ReplicationPeerConfig.newBuilder().setClusterKey("127.0.0.1:2181:/hbase")<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        .setReplicationEndpointImpl(LocalReplicationEndpoint.class.getName()).setSerial(true)<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        .build(),<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      enabled);<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>  protected final void checkOrder(int expectedEntries) throws IOException {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    try (WAL.Reader reader =<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      WALFactory.createReader(UTIL.getTestFileSystem(), logPath, UTIL.getConfiguration())) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      long seqId = -1L;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      int count = 0;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      for (Entry entry;;) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        entry = reader.next();<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        if (entry == null) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          break;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        }<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        assertTrue(<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          "Sequence id go backwards from " + seqId + " to " + entry.getKey().getSequenceId(),<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          entry.getKey().getSequenceId() &gt;= seqId);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        seqId = entry.getKey().getSequenceId();<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        count++;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      assertEquals(expectedEntries, count);<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><a name="line.244"></a>
-<span class="sourceLineNo">245</span>  protected final TableName createTable() throws IOException, InterruptedException {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    UTIL.getAdmin().createTable(<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      TableDescriptorBuilder.newBuilder(tableName).setColumnFamily(ColumnFamilyDescriptorBuilder<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        .newBuilder(CF).setScope(HConstants.REPLICATION_SCOPE_GLOBAL).build()).build());<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    UTIL.waitTableAvailable(tableName);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    return tableName;<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">122</span>    UTIL.getConfiguration().setLong("hbase.serial.replication.waiting.ms", 100);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    UTIL.startMiniCluster(3);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    // disable balancer<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    UTIL.getAdmin().balancerSwitch(false, true);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    LOG_DIR = UTIL.getDataTestDirOnTestFS("replicated");<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    FS = UTIL.getTestFileSystem();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    FS.mkdirs(LOG_DIR);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  @AfterClass<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  public static void tearDownAfterClass() throws Exception {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    UTIL.shutdownMiniCluster();<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>  @After<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public void tearDown() throws Exception {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    Admin admin = UTIL.getAdmin();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    for (ReplicationPeerDescription pd : admin.listReplicationPeers()) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      admin.removeReplicationPeer(pd.getPeerId());<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    rollAllWALs();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    if (WRITER != null) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      WRITER.close();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      WRITER = null;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  }<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  protected static void moveRegion(RegionInfo region, HRegionServer rs) throws Exception {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    UTIL.getAdmin().move(region.getEncodedNameAsBytes(),<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      Bytes.toBytes(rs.getServerName().getServerName()));<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    UTIL.waitFor(30000, new ExplainingPredicate&lt;Exception&gt;() {<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>      @Override<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      public boolean evaluate() throws Exception {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        return rs.getRegion(region.getEncodedName()) != null;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>      @Override<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      public String explainFailure() throws Exception {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        return region + " is still not on " + rs;<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>  protected static void rollAllWALs() throws Exception {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    for (RegionServerThread t : UTIL.getMiniHBaseCluster().getLiveRegionServerThreads()) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      t.getRegionServer().getWalRoller().requestRollAll();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    UTIL.waitFor(30000, new ExplainingPredicate&lt;Exception&gt;() {<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>      @Override<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      public boolean evaluate() throws Exception {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        return UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().stream()<a name="line.174"></a>
+<span class="sourceLineNo">175</span>          .map(t -&gt; t.getRegionServer()).allMatch(HRegionServer::walRollRequestFinished);<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 String explainFailure() throws Exception {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        return "Log roll has not finished yet";<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      }<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    });<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  protected final void setupWALWriter() throws IOException {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    logPath = new Path(LOG_DIR, name.getMethodName());<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    WRITER = WALFactory.createWALWriter(FS, logPath, UTIL.getConfiguration());<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>  protected final void waitUntilReplicationDone(int expectedEntries) throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    UTIL.waitFor(30000, new ExplainingPredicate&lt;Exception&gt;() {<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 boolean evaluate() throws Exception {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        try (WAL.Reader reader = WALFactory.createReader(FS, logPath, UTIL.getConfiguration())) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>          int count = 0;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>          while (reader.next() != null) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>            count++;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          return count &gt;= expectedEntries;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        } catch (IOException e) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          return false;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      }<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>      @Override<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      public String explainFailure() throws Exception {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        return "Not enough entries replicated";<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    });<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  protected final void enablePeerAndWaitUntilReplicationDone(int expectedEntries) throws Exception {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    UTIL.getAdmin().enableReplicationPeer(PEER_ID);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    waitUntilReplicationDone(expectedEntries);<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>  protected final void addPeer(boolean enabled) throws IOException {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    UTIL.getAdmin().addReplicationPeer(PEER_ID,<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      ReplicationPeerConfig.newBuilder().setClusterKey("127.0.0.1:2181:/hbase")<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        .setReplicationEndpointImpl(LocalReplicationEndpoint.class.getName()).setSerial(true)<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        .build(),<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      enabled);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>  protected final void checkOrder(int expectedEntries) throws IOException {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    try (WAL.Reader reader =<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      WALFactory.createReader(UTIL.getTestFileSystem(), logPath, UTIL.getConfiguration())) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      long seqId = -1L;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      int count = 0;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      for (Entry entry;;) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        entry = reader.next();<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        if (entry == null) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          break;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        assertTrue(<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          "Sequence id go backwards from " + seqId + " to " + entry.getKey().getSequenceId(),<a name="line.237"></a>
+<span class="sourceLineNo">238</span>          entry.getKey().getSequenceId() &gt;= seqId);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        seqId = entry.getKey().getSequenceId();<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        count++;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      }<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      assertEquals(expectedEntries, count);<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><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  protected final TableName createTable() throws IOException, InterruptedException {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    UTIL.getAdmin().createTable(<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      TableDescriptorBuilder.newBuilder(tableName).setColumnFamily(ColumnFamilyDescriptorBuilder<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        .newBuilder(CF).setScope(HConstants.REPLICATION_SCOPE_GLOBAL).build()).build());<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    UTIL.waitTableAvailable(tableName);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    return tableName;<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html
index eb0b0ab..6320d79 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html
@@ -95,7 +95,7 @@
 <span class="sourceLineNo">087</span>  protected static final int NB_ROWS_IN_BIG_BATCH =<a name="line.87"></a>
 <span class="sourceLineNo">088</span>      NB_ROWS_IN_BATCH * 10;<a name="line.88"></a>
 <span class="sourceLineNo">089</span>  protected static final long SLEEP_TIME = 500;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  protected static final int NB_RETRIES = 10;<a name="line.90"></a>
+<span class="sourceLineNo">090</span>  protected static final int NB_RETRIES = 50;<a name="line.90"></a>
 <span class="sourceLineNo">091</span><a name="line.91"></a>
 <span class="sourceLineNo">092</span>  protected static final TableName tableName = TableName.valueOf("test");<a name="line.92"></a>
 <span class="sourceLineNo">093</span>  protected static final byte[] famName = Bytes.toBytes("f");<a name="line.93"></a>
@@ -193,141 +193,142 @@
 <span class="sourceLineNo">185</span>    conf1.setInt("replication.source.maxretriesmultiplier", 10);<a name="line.185"></a>
 <span class="sourceLineNo">186</span>    conf1.setFloat("replication.source.ratio", 1.0f);<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    conf1.setBoolean("replication.source.eof.autorecovery", true);<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    utility1 = new HBaseTestingUtility(conf1);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    utility1.startMiniZKCluster();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    MiniZooKeeperCluster miniZK = utility1.getZkCluster();<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    // Have to reget conf1 in case zk cluster location different<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    // than default<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    conf1 = utility1.getConfiguration();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    zkw1 = new ZKWatcher(conf1, "cluster1", null, true);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    admin = new ReplicationAdmin(conf1);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    LOG.info("Setup first Zk");<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    // Base conf2 on conf1 so it gets the right zk cluster.<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    conf2 = HBaseConfiguration.create(conf1);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    conf2.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/2");<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    conf2.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 6);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    conf2.setBoolean("hbase.tests.use.shortcircuit.reads", false);<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span>    utility2 = new HBaseTestingUtility(conf2);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    utility2.setZkCluster(miniZK);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    zkw2 = new ZKWatcher(conf2, "cluster2", null, true);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    LOG.info("Setup second Zk");<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    CONF_WITH_LOCALFS = HBaseConfiguration.create(conf1);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    utility1.startMiniCluster(2);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    // Have a bunch of slave servers, because inter-cluster shipping logic uses number of sinks<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // as a component in deciding maximum number of parallel batches to send to the peer cluster.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    utility2.startMiniCluster(4);<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>    hbaseAdmin = ConnectionFactory.createConnection(conf1).getAdmin();<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    TableDescriptor table = TableDescriptorBuilder.newBuilder(tableName)<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(famName).setMaxVersions(100)<a name="line.219"></a>
-<span class="sourceLineNo">220</span>            .setScope(HConstants.REPLICATION_SCOPE_GLOBAL).build())<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.of(noRepfamName)).build();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    scopes = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    for (ColumnFamilyDescriptor f : table.getColumnFamilies()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      scopes.put(f.getName(), f.getScope());<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    Connection connection1 = ConnectionFactory.createConnection(conf1);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    Connection connection2 = ConnectionFactory.createConnection(conf2);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    try (Admin admin1 = connection1.getAdmin()) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      admin1.createTable(table, HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    try (Admin admin2 = connection2.getAdmin()) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      admin2.createTable(table, HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    utility1.waitUntilAllRegionsAssigned(tableName);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    utility2.waitUntilAllRegionsAssigned(tableName);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    htable1 = connection1.getTable(tableName);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    htable2 = connection2.getTable(tableName);<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 peerExist(String peerId) throws IOException {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    return hbaseAdmin.listReplicationPeers().stream().anyMatch(p -&gt; peerId.equals(p.getPeerId()));<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>  @Before<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  public void setUpBase() throws IOException {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    if (!peerExist(PEER_ID2)) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      ReplicationPeerConfig rpc = ReplicationPeerConfig.newBuilder()<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          .setClusterKey(utility2.getClusterKey()).setSerial(isSerialPeer()).build();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      hbaseAdmin.addReplicationPeer(PEER_ID2, rpc);<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>  @After<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  public void tearDownBase() throws IOException {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    if (peerExist(PEER_ID2)) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      hbaseAdmin.removeReplicationPeer(PEER_ID2);<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>  protected static void runSimplePutDeleteTest() throws IOException, InterruptedException {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    Put put = new Put(row);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    put.addColumn(famName, row, row);<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>    htable1 = utility1.getConnection().getTable(tableName);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    htable1.put(put);<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>    Get get = new Get(row);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    for (int i = 0; i &lt; NB_RETRIES; i++) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      if (i == NB_RETRIES - 1) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        fail("Waited too much time for put replication");<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      Result res = htable2.get(get);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      if (res.isEmpty()) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        LOG.info("Row not available");<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        Thread.sleep(SLEEP_TIME);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      } else {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        assertArrayEquals(row, res.value());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        break;<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><a name="line.281"></a>
-<span class="sourceLineNo">282</span>    Delete del = new Delete(row);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    htable1.delete(del);<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>    get = new Get(row);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    for (int i = 0; i &lt; NB_RETRIES; i++) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      if (i == NB_RETRIES - 1) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        fail("Waited too much time for del replication");<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      Result res = htable2.get(get);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      if (res.size() &gt;= 1) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>        LOG.info("Row not deleted");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        Thread.sleep(SLEEP_TIME);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      } else {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        break;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  }<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span>  protected static void runSmallBatchTest() throws IOException, InterruptedException {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    // normal Batch tests<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    loadData("", row);<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>    Scan scan = new Scan();<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>    ResultScanner scanner1 = htable1.getScanner(scan);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    Result[] res1 = scanner1.next(NB_ROWS_IN_BATCH);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    scanner1.close();<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    assertEquals(NB_ROWS_IN_BATCH, res1.length);<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    waitForReplication(NB_ROWS_IN_BATCH, NB_RETRIES);<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>  @AfterClass<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  public static void tearDownAfterClass() throws Exception {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    htable2.close();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    htable1.close();<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    admin.close();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    utility2.shutdownMiniCluster();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    utility1.shutdownMiniCluster();<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">188</span>    conf1.setLong("hbase.serial.replication.waiting.ms", 100);<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>    utility1 = new HBaseTestingUtility(conf1);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    utility1.startMiniZKCluster();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    MiniZooKeeperCluster miniZK = utility1.getZkCluster();<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // Have to reget conf1 in case zk cluster location different<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    // than default<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    conf1 = utility1.getConfiguration();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    zkw1 = new ZKWatcher(conf1, "cluster1", null, true);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    admin = new ReplicationAdmin(conf1);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    LOG.info("Setup first Zk");<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>    // Base conf2 on conf1 so it gets the right zk cluster.<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    conf2 = HBaseConfiguration.create(conf1);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    conf2.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/2");<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    conf2.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 6);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    conf2.setBoolean("hbase.tests.use.shortcircuit.reads", false);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    utility2 = new HBaseTestingUtility(conf2);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    utility2.setZkCluster(miniZK);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    zkw2 = new ZKWatcher(conf2, "cluster2", null, true);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    LOG.info("Setup second Zk");<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>    CONF_WITH_LOCALFS = HBaseConfiguration.create(conf1);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    utility1.startMiniCluster(2);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // Have a bunch of slave servers, because inter-cluster shipping logic uses number of sinks<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    // as a component in deciding maximum number of parallel batches to send to the peer cluster.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    utility2.startMiniCluster(4);<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    hbaseAdmin = ConnectionFactory.createConnection(conf1).getAdmin();<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>    TableDescriptor table = TableDescriptorBuilder.newBuilder(tableName)<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(famName).setMaxVersions(100)<a name="line.220"></a>
+<span class="sourceLineNo">221</span>            .setScope(HConstants.REPLICATION_SCOPE_GLOBAL).build())<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.of(noRepfamName)).build();<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    scopes = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    for (ColumnFamilyDescriptor f : table.getColumnFamilies()) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      scopes.put(f.getName(), f.getScope());<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    Connection connection1 = ConnectionFactory.createConnection(conf1);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    Connection connection2 = ConnectionFactory.createConnection(conf2);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    try (Admin admin1 = connection1.getAdmin()) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      admin1.createTable(table, HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    try (Admin admin2 = connection2.getAdmin()) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      admin2.createTable(table, HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    }<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    utility1.waitUntilAllRegionsAssigned(tableName);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    utility2.waitUntilAllRegionsAssigned(tableName);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    htable1 = connection1.getTable(tableName);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    htable2 = connection2.getTable(tableName);<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>  private boolean peerExist(String peerId) throws IOException {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return hbaseAdmin.listReplicationPeers().stream().anyMatch(p -&gt; peerId.equals(p.getPeerId()));<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>  @Before<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  public void setUpBase() throws IOException {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    if (!peerExist(PEER_ID2)) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      ReplicationPeerConfig rpc = ReplicationPeerConfig.newBuilder()<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          .setClusterKey(utility2.getClusterKey()).setSerial(isSerialPeer()).build();<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      hbaseAdmin.addReplicationPeer(PEER_ID2, rpc);<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>  @After<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  public void tearDownBase() throws IOException {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    if (peerExist(PEER_ID2)) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      hbaseAdmin.removeReplicationPeer(PEER_ID2);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>  protected static void runSimplePutDeleteTest() throws IOException, InterruptedException {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    Put put = new Put(row);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    put.addColumn(famName, row, row);<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>    htable1 = utility1.getConnection().getTable(tableName);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    htable1.put(put);<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>    Get get = new Get(row);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    for (int i = 0; i &lt; NB_RETRIES; i++) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      if (i == NB_RETRIES - 1) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        fail("Waited too much time for put replication");<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      Result res = htable2.get(get);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      if (res.isEmpty()) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        LOG.info("Row not available");<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        Thread.sleep(SLEEP_TIME);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        assertArrayEquals(row, res.value());<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        break;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Delete del = new Delete(row);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    htable1.delete(del);<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    get = new Get(row);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    for (int i = 0; i &lt; NB_RETRIES; i++) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      if (i == NB_RETRIES - 1) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        fail("Waited too much time for del replication");<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      Result res = htable2.get(get);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      if (res.size() &gt;= 1) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        LOG.info("Row not deleted");<a name="line.293"></a>
+<span class="sourceLineNo">294</span>        Thread.sleep(SLEEP_TIME);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      } else {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        break;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      }<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    }<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  }<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>  protected static void runSmallBatchTest() throws IOException, InterruptedException {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    // normal Batch tests<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    loadData("", row);<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>    Scan scan = new Scan();<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>    ResultScanner scanner1 = htable1.getScanner(scan);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    Result[] res1 = scanner1.next(NB_ROWS_IN_BATCH);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    scanner1.close();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    assertEquals(NB_ROWS_IN_BATCH, res1.length);<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>    waitForReplication(NB_ROWS_IN_BATCH, NB_RETRIES);<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>  @AfterClass<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  public static void tearDownAfterClass() throws Exception {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    htable2.close();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    htable1.close();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    admin.close();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    utility2.shutdownMiniCluster();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    utility1.shutdownMiniCluster();<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>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
index edb4a3d..d6cc71d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
@@ -238,127 +238,130 @@
 <span class="sourceLineNo">230</span>    ReplicationQueueStorage queueStorage = env.getReplicationPeerManager().getQueueStorage();<a name="line.230"></a>
 <span class="sourceLineNo">231</span>    Connection conn = env.getMasterServices().getConnection();<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    if (!needSetLastPushedSequenceId(tsm, tableName)) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      return;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    }<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    for (Pair&lt;String, Long&gt; name2Barrier : MetaTableAccessor<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      .getTableEncodedRegionNameAndLastBarrier(conn, tableName)) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      addToMap(lastSeqIds, name2Barrier.getFirst(), name2Barrier.getSecond().longValue() - 1,<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        queueStorage);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>  @Override<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  protected Flow executeFromState(MasterProcedureEnv env, PeerModificationState state)<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    switch (state) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      case PRE_PEER_MODIFICATION:<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        try {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          prePeerModification(env);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        } catch (IOException e) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          LOG.warn("{} failed to call pre CP hook or the pre check is failed for peer {}, " +<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            "mark the procedure as failure and give up", getClass().getName(), peerId, e);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          setFailure("master-" + getPeerOperationType().name().toLowerCase() + "-peer", e);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          releaseLatch();<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          return Flow.NO_MORE_STATE;<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        } catch (ReplicationException e) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          LOG.warn("{} failed to call prePeerModification for peer {}, retry", getClass().getName(),<a name="line.256"></a>
-<span class="sourceLineNo">257</span>            peerId, e);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>          throw new ProcedureYieldException();<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        setNextState(PeerModificationState.UPDATE_PEER_STORAGE);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        return Flow.HAS_MORE_STATE;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      case UPDATE_PEER_STORAGE:<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        try {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          updatePeerStorage(env);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        } catch (ReplicationException e) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          LOG.warn("{} update peer storage for peer {} failed, retry", getClass().getName(), peerId,<a name="line.266"></a>
-<span class="sourceLineNo">267</span>            e);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>          throw new ProcedureYieldException();<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        setNextState(PeerModificationState.REFRESH_PEER_ON_RS);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        return Flow.HAS_MORE_STATE;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      case REFRESH_PEER_ON_RS:<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        refreshPeer(env, getPeerOperationType());<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        setNextState(nextStateAfterRefresh());<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        return Flow.HAS_MORE_STATE;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      case SERIAL_PEER_REOPEN_REGIONS:<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        try {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          reopenRegions(env);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        } catch (Exception e) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          LOG.warn("{} reopen regions for peer {} failed, retry", getClass().getName(), peerId, e);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>          throw new ProcedureYieldException();<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>        setNextState(PeerModificationState.SERIAL_PEER_UPDATE_LAST_PUSHED_SEQ_ID);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        return Flow.HAS_MORE_STATE;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      case SERIAL_PEER_UPDATE_LAST_PUSHED_SEQ_ID:<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        try {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>          updateLastPushedSequenceIdForSerialPeer(env);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        } catch (Exception e) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          LOG.warn("{} set last sequence id for peer {} failed, retry", getClass().getName(),<a name="line.289"></a>
-<span class="sourceLineNo">290</span>            peerId, e);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>          throw new ProcedureYieldException();<a name="line.291"></a>
-<span class="sourceLineNo">292</span>        }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        setNextState(enablePeerBeforeFinish() ? PeerModificationState.SERIAL_PEER_SET_PEER_ENABLED<a name="line.293"></a>
-<span class="sourceLineNo">294</span>          : PeerModificationState.POST_PEER_MODIFICATION);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        return Flow.HAS_MORE_STATE;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      case SERIAL_PEER_SET_PEER_ENABLED:<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        try {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>          env.getReplicationPeerManager().enablePeer(peerId);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        } catch (ReplicationException e) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>          LOG.warn("{} enable peer before finish for peer {} failed, retry", getClass().getName(),<a name="line.300"></a>
-<span class="sourceLineNo">301</span>            peerId, e);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>          throw new ProcedureYieldException();<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        setNextState(PeerModificationState.SERIAL_PEER_ENABLE_PEER_REFRESH_PEER_ON_RS);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        return Flow.HAS_MORE_STATE;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      case SERIAL_PEER_ENABLE_PEER_REFRESH_PEER_ON_RS:<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        refreshPeer(env, PeerOperationType.ENABLE);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        setNextState(PeerModificationState.POST_PEER_MODIFICATION);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        return Flow.HAS_MORE_STATE;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      case POST_PEER_MODIFICATION:<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        try {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          postPeerModification(env);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        } catch (ReplicationException e) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          LOG.warn("{} failed to call postPeerModification for peer {}, retry",<a name="line.314"></a>
-<span class="sourceLineNo">315</span>            getClass().getName(), peerId, e);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          throw new ProcedureYieldException();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        } catch (IOException e) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          LOG.warn("{} failed to call post CP hook for peer {}, " +<a name="line.318"></a>
-<span class="sourceLineNo">319</span>            "ignore since the procedure has already done", getClass().getName(), peerId, e);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        }<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        releaseLatch();<a name="line.321"></a>
-<span class="sourceLineNo">322</span>        return Flow.NO_MORE_STATE;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      default:<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    }<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>  @Override<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  protected void rollbackState(MasterProcedureEnv env, PeerModificationState state)<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      throws IOException, InterruptedException {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    if (state == PeerModificationState.PRE_PEER_MODIFICATION) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      // actually the peer related operations has no rollback, but if we haven't done any<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      // modifications on the peer storage yet, we can just return.<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      return;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    throw new UnsupportedOperationException();<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  @Override<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  protected PeerModificationState getState(int stateId) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    return PeerModificationState.forNumber(stateId);<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>  protected int getStateId(PeerModificationState state) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    return state.getNumber();<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>  protected PeerModificationState getInitialState() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    return PeerModificationState.PRE_PEER_MODIFICATION;<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">233</span>      LOG.debug("Skip settting last pushed sequence id for {}", tableName);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      return;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    for (Pair&lt;String, Long&gt; name2Barrier : MetaTableAccessor<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      .getTableEncodedRegionNameAndLastBarrier(conn, tableName)) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      // XXX: for debug only, change to trace after find out the real issues<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      LOG.debug("Update last pushed sequence id for {}, {}", tableName, name2Barrier);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      addToMap(lastSeqIds, name2Barrier.getFirst(), name2Barrier.getSecond().longValue() - 1,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        queueStorage);<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><a name="line.244"></a>
+<span class="sourceLineNo">245</span>  @Override<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  protected Flow executeFromState(MasterProcedureEnv env, PeerModificationState state)<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    switch (state) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      case PRE_PEER_MODIFICATION:<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        try {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          prePeerModification(env);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        } catch (IOException e) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          LOG.warn("{} failed to call pre CP hook or the pre check is failed for peer {}, " +<a name="line.253"></a>
+<span class="sourceLineNo">254</span>            "mark the procedure as failure and give up", getClass().getName(), peerId, e);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          setFailure("master-" + getPeerOperationType().name().toLowerCase() + "-peer", e);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          releaseLatch();<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          return Flow.NO_MORE_STATE;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        } catch (ReplicationException e) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          LOG.warn("{} failed to call prePeerModification for peer {}, retry", getClass().getName(),<a name="line.259"></a>
+<span class="sourceLineNo">260</span>            peerId, e);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          throw new ProcedureYieldException();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>        setNextState(PeerModificationState.UPDATE_PEER_STORAGE);<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        return Flow.HAS_MORE_STATE;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      case UPDATE_PEER_STORAGE:<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        try {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>          updatePeerStorage(env);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        } catch (ReplicationException e) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>          LOG.warn("{} update peer storage for peer {} failed, retry", getClass().getName(), peerId,<a name="line.269"></a>
+<span class="sourceLineNo">270</span>            e);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          throw new ProcedureYieldException();<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        }<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        setNextState(PeerModificationState.REFRESH_PEER_ON_RS);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        return Flow.HAS_MORE_STATE;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      case REFRESH_PEER_ON_RS:<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        refreshPeer(env, getPeerOperationType());<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        setNextState(nextStateAfterRefresh());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        return Flow.HAS_MORE_STATE;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      case SERIAL_PEER_REOPEN_REGIONS:<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        try {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          reopenRegions(env);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>        } catch (Exception e) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          LOG.warn("{} reopen regions for peer {} failed, retry", getClass().getName(), peerId, e);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>          throw new ProcedureYieldException();<a name="line.284"></a>
+<span class="sourceLineNo">285</span>        }<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        setNextState(PeerModificationState.SERIAL_PEER_UPDATE_LAST_PUSHED_SEQ_ID);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        return Flow.HAS_MORE_STATE;<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      case SERIAL_PEER_UPDATE_LAST_PUSHED_SEQ_ID:<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        try {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          updateLastPushedSequenceIdForSerialPeer(env);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        } catch (Exception e) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          LOG.warn("{} set last sequence id for peer {} failed, retry", getClass().getName(),<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            peerId, e);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>          throw new ProcedureYieldException();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        }<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        setNextState(enablePeerBeforeFinish() ? PeerModificationState.SERIAL_PEER_SET_PEER_ENABLED<a name="line.296"></a>
+<span class="sourceLineNo">297</span>          : PeerModificationState.POST_PEER_MODIFICATION);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        return Flow.HAS_MORE_STATE;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      case SERIAL_PEER_SET_PEER_ENABLED:<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        try {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>          env.getReplicationPeerManager().enablePeer(peerId);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        } catch (ReplicationException e) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>          LOG.warn("{} enable peer before finish for peer {} failed, retry", getClass().getName(),<a name="line.303"></a>
+<span class="sourceLineNo">304</span>            peerId, e);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>          throw new ProcedureYieldException();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        }<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        setNextState(PeerModificationState.SERIAL_PEER_ENABLE_PEER_REFRESH_PEER_ON_RS);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        return Flow.HAS_MORE_STATE;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      case SERIAL_PEER_ENABLE_PEER_REFRESH_PEER_ON_RS:<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        refreshPeer(env, PeerOperationType.ENABLE);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        setNextState(PeerModificationState.POST_PEER_MODIFICATION);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        return Flow.HAS_MORE_STATE;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      case POST_PEER_MODIFICATION:<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        try {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          postPeerModification(env);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        } catch (ReplicationException e) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          LOG.warn("{} failed to call postPeerModification for peer {}, retry",<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            getClass().getName(), peerId, e);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          throw new ProcedureYieldException();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        } catch (IOException e) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          LOG.warn("{} failed to call post CP hook for peer {}, " +<a name="line.321"></a>
+<span class="sourceLineNo">322</span>            "ignore since the procedure has already done", getClass().getName(), peerId, e);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        }<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        releaseLatch();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        return Flow.NO_MORE_STATE;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      default:<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        throw new UnsupportedOperationException("unhandled state=" + state);<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><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  @Override<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  protected void rollbackState(MasterProcedureEnv env, PeerModificationState state)<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      throws IOException, InterruptedException {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    if (state == PeerModificationState.PRE_PEER_MODIFICATION) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      // actually the peer related operations has no rollback, but if we haven't done any<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      // modifications on the peer storage yet, we can just return.<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      return;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    throw new UnsupportedOperationException();<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>  @Override<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  protected PeerModificationState getState(int stateId) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    return PeerModificationState.forNumber(stateId);<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>  @Override<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  protected int getStateId(PeerModificationState state) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    return state.getNumber();<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>  @Override<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  protected PeerModificationState getInitialState() {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    return PeerModificationState.PRE_PEER_MODIFICATION;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>}<a name="line.356"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html
index 3f73771..66cb3af 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html
@@ -26,121 +26,126 @@
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.replication;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import java.util.Collections;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.util.Set;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.concurrent.ConcurrentMap;<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.replication.ReplicationPeer.PeerState;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.27"></a>
-<span class="sourceLineNo">028</span><a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
-<span class="sourceLineNo">032</span> * This provides an class for maintaining a set of peer clusters. These peers are remote slave<a name="line.32"></a>
-<span class="sourceLineNo">033</span> * clusters that data is replicated to.<a name="line.33"></a>
-<span class="sourceLineNo">034</span> */<a name="line.34"></a>
-<span class="sourceLineNo">035</span>@InterfaceAudience.Private<a name="line.35"></a>
-<span class="sourceLineNo">036</span>public class ReplicationPeers {<a name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span>  private final Configuration conf;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>  // Map of peer clusters keyed by their id<a name="line.40"></a>
-<span class="sourceLineNo">041</span>  private final ConcurrentMap&lt;String, ReplicationPeerImpl&gt; peerCache;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>  private final ReplicationPeerStorage peerStorage;<a name="line.42"></a>
-<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>  ReplicationPeers(ZKWatcher zookeeper, Configuration conf) {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>    this.conf = conf;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    this.peerCache = new ConcurrentHashMap&lt;&gt;();<a name="line.46"></a>
-<span class="sourceLineNo">047</span>    this.peerStorage = ReplicationStorageFactory.getReplicationPeerStorage(zookeeper, conf);<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  }<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>  public Configuration getConf() {<a name="line.50"></a>
-<span class="sourceLineNo">051</span>    return conf;<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>  public void init() throws ReplicationException {<a name="line.54"></a>
-<span class="sourceLineNo">055</span>    // Loading all existing peerIds into peer cache.<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    for (String peerId : this.peerStorage.listPeerIds()) {<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      addPeer(peerId);<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>  @VisibleForTesting<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  public ReplicationPeerStorage getPeerStorage() {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    return this.peerStorage;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  }<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  /**<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   * Method called after a peer has been connected. It will create a ReplicationPeer to track the<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * newly connected cluster.<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   * @param peerId a short that identifies the cluster<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   * @return whether a ReplicationPeer was successfully created<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * @throws ReplicationException if connecting to the peer fails<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public boolean addPeer(String peerId) throws ReplicationException {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    if (this.peerCache.containsKey(peerId)) {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      return false;<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>    peerCache.put(peerId, createPeer(peerId));<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    return true;<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>  public void removePeer(String peerId) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    peerCache.remove(peerId);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  /**<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * Returns the ReplicationPeerImpl for the specified cached peer. This ReplicationPeer will<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * continue to track changes to the Peer's state and config. This method returns null if no peer<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * has been cached with the given peerId.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * @param peerId id for the peer<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * @return ReplicationPeer object<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   */<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public ReplicationPeerImpl getPeer(String peerId) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    return peerCache.get(peerId);<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>  /**<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * Returns the set of peerIds of the clusters that have been connected and have an underlying<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * ReplicationPeer.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   * @return a Set of Strings for peerIds<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public Set&lt;String&gt; getAllPeerIds() {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    return Collections.unmodifiableSet(peerCache.keySet());<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>  public PeerState refreshPeerState(String peerId) throws ReplicationException {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    ReplicationPeerImpl peer = peerCache.get(peerId);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    if (peer == null) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      throw new ReplicationException("Peer with id=" + peerId + " is not cached.");<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    }<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    peer.setPeerState(peerStorage.isPeerEnabled(peerId));<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    return peer.getPeerState();<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>  public ReplicationPeerConfig refreshPeerConfig(String peerId) throws ReplicationException {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    ReplicationPeerImpl peer = peerCache.get(peerId);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    if (peer == null) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      throw new ReplicationException("Peer with id=" + peerId + " is not cached.");<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    peer.setPeerConfig(peerStorage.getPeerConfig(peerId));<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    return peer.getPeerConfig();<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  }<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>  /**<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * Helper method to connect to a peer<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @param peerId peer's identifier<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @return object representing the peer<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private ReplicationPeerImpl createPeer(String peerId) throws ReplicationException {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    ReplicationPeerConfig peerConfig = peerStorage.getPeerConfig(peerId);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    boolean enabled = peerStorage.isPeerEnabled(peerId);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    return new ReplicationPeerImpl(ReplicationUtils.getPeerClusterConfiguration(peerConfig, conf),<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        peerId, enabled, peerConfig);<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">021</span>import java.util.Map;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.Set;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.concurrent.ConcurrentMap;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.replication.ReplicationPeer.PeerState;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.28"></a>
+<span class="sourceLineNo">029</span><a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>/**<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * This provides an class for maintaining a set of peer clusters. These peers are remote slave<a name="line.33"></a>
+<span class="sourceLineNo">034</span> * clusters that data is replicated to.<a name="line.34"></a>
+<span class="sourceLineNo">035</span> */<a name="line.35"></a>
+<span class="sourceLineNo">036</span>@InterfaceAudience.Private<a name="line.36"></a>
+<span class="sourceLineNo">037</span>public class ReplicationPeers {<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>  private final Configuration conf;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>  // Map of peer clusters keyed by their id<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  private final ConcurrentMap&lt;String, ReplicationPeerImpl&gt; peerCache;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>  private final ReplicationPeerStorage peerStorage;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>  ReplicationPeers(ZKWatcher zookeeper, Configuration conf) {<a name="line.45"></a>
+<span class="sourceLineNo">046</span>    this.conf = conf;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>    this.peerCache = new ConcurrentHashMap&lt;&gt;();<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    this.peerStorage = ReplicationStorageFactory.getReplicationPeerStorage(zookeeper, conf);<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  }<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  public Configuration getConf() {<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    return conf;<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>
+<span class="sourceLineNo">055</span>  public void init() throws ReplicationException {<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    // Loading all existing peerIds into peer cache.<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    for (String peerId : this.peerStorage.listPeerIds()) {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      addPeer(peerId);<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    }<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  }<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  @VisibleForTesting<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  public ReplicationPeerStorage getPeerStorage() {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    return this.peerStorage;<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>  /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   * Method called after a peer has been connected. It will create a ReplicationPeer to track the<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * newly connected cluster.<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * @param peerId a short that identifies the cluster<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * @return whether a ReplicationPeer was successfully created<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * @throws ReplicationException if connecting to the peer fails<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   */<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  public boolean addPeer(String peerId) throws ReplicationException {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    if (this.peerCache.containsKey(peerId)) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      return false;<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>    peerCache.put(peerId, createPeer(peerId));<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    return true;<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>  public void removePeer(String peerId) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    peerCache.remove(peerId);<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>   * Returns the ReplicationPeerImpl for the specified cached peer. This ReplicationPeer will<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * continue to track changes to the Peer's state and config. This method returns null if no peer<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * has been cached with the given peerId.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * @param peerId id for the peer<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * @return ReplicationPeer object<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   */<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  public ReplicationPeerImpl getPeer(String peerId) {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    return peerCache.get(peerId);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  /**<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * Returns the set of peerIds of the clusters that have been connected and have an underlying<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * ReplicationPeer.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * @return a Set of Strings for peerIds<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  public Set&lt;String&gt; getAllPeerIds() {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    return Collections.unmodifiableSet(peerCache.keySet());<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>  public Map&lt;String, ReplicationPeerImpl&gt; getPeerCache() {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    return Collections.unmodifiableMap(peerCache);<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>  public PeerState refreshPeerState(String peerId) throws ReplicationException {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    ReplicationPeerImpl peer = peerCache.get(peerId);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    if (peer == null) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      throw new ReplicationException("Peer with id=" + peerId + " is not cached.");<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    peer.setPeerState(peerStorage.isPeerEnabled(peerId));<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    return peer.getPeerState();<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>  public ReplicationPeerConfig refreshPeerConfig(String peerId) throws ReplicationException {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    ReplicationPeerImpl peer = peerCache.get(peerId);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    if (peer == null) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      throw new ReplicationException("Peer with id=" + peerId + " is not cached.");<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    }<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    peer.setPeerConfig(peerStorage.getPeerConfig(peerId));<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    return peer.getPeerConfig();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  /**<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   * Helper method to connect to a peer<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   * @param peerId peer's identifier<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   * @return object representing the peer<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   */<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  private ReplicationPeerImpl createPeer(String peerId) throws ReplicationException {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    ReplicationPeerConfig peerConfig = peerStorage.getPeerConfig(peerId);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    boolean enabled = peerStorage.isPeerEnabled(peerId);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    return new ReplicationPeerImpl(ReplicationUtils.getPeerClusterConfiguration(peerConfig, conf),<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        peerId, enabled, peerConfig);<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>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
index 76a3857..7a257e4 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.114">ReplicationSourceManager</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.115">ReplicationSourceManager</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationListener.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationListener</a></pre>
 <div class="block">This class is responsible to manage all the replication sources. There are two classes of
@@ -566,7 +566,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <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/ReplicationSourceManager.html#line.115">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.116">LOG</a></pre>
 </li>
 </ul>
 <a name="sources">
@@ -575,7 +575,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>sources</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.117">sources</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.118">sources</a></pre>
 </li>
 </ul>
 <a name="oldsources">
@@ -584,7 +584,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>oldsources</h4>
-<pre>private final&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/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.119">oldsources</a></pre>
+<pre>private final&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/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.120">oldsources</a></pre>
 </li>
 </ul>
 <a name="queueStorage">
@@ -593,7 +593,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>queueStorage</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.120">queueStorage</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.121">queueStorage</a></pre>
 </li>
 </ul>
 <a name="replicationTracker">
@@ -602,7 +602,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationTracker</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationTracker.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationTracker</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.121">replicationTracker</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationTracker.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationTracker</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.122">replicationTracker</a></pre>
 </li>
 </ul>
 <a name="replicationPeers">
@@ -611,7 +611,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationPeers</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeers</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.122">replicationPeers</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeers</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.123">replicationPeers</a></pre>
 </li>
 </ul>
 <a name="clusterId">
@@ -620,7 +620,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterId</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.124">clusterId</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.125">clusterId</a></pre>
 </li>
 </ul>
 <a name="server">
@@ -629,7 +629,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>server</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.126">server</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.127">server</a></pre>
 </li>
 </ul>
 <a name="walsById">
@@ -638,7 +638,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>walsById</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbas
 e/replication/regionserver/ReplicationSourceManager.html#line.131">walsById</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbas
 e/replication/regionserver/ReplicationSourceManager.html#line.132">walsById</a></pre>
 </li>
 </ul>
 <a name="walsByIdRecoveredQueues">
@@ -647,7 +647,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>walsByIdRecoveredQueues</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbas
 e/replication/regionserver/ReplicationSourceManager.html#line.135">walsByIdRecoveredQueues</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbas
 e/replication/regionserver/ReplicationSourceManager.html#line.136">walsByIdRecoveredQueues</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -656,7 +656,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <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/ReplicationSourceManager.html#line.137">conf</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.138">conf</a></pre>
 </li>
 </ul>
 <a name="fs">
@@ -665,7 +665,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <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/ReplicationSourceManager.html#line.138">fs</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.139">fs</a></pre>
 </li>
 </ul>
 <a name="latestPaths">
@@ -674,7 +674,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>latestPaths</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;org.apache.hadoop.fs.Path&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.140">latestPaths</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;org.apache.hadoop.fs.Path&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.141">latestPaths</a></pre>
 </li>
 </ul>
 <a name="logDir">
@@ -683,7 +683,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>logDir</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.142">logDir</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.143">logDir</a></pre>
 </li>
 </ul>
 <a name="oldLogDir">
@@ -692,7 +692,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>oldLogDir</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.144">oldLogDir</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.145">oldLogDir</a></pre>
 </li>
 </ul>
 <a name="walFileLengthProvider">
@@ -701,7 +701,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>walFileLengthProvider</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALFileLengthProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.145">walFileLengthProvider</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALFileLengthProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.146">walFileLengthProvider</a></pre>
 </li>
 </ul>
 <a name="sleepBeforeFailover">
@@ -710,7 +710,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>sleepBeforeFailover</h4>
-<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.147">sleepBeforeFailover</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.148">sleepBeforeFailover</a></pre>
 </li>
 </ul>
 <a name="executor">
@@ -719,7 +719,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>executor</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.149">executor</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.150">executor</a></pre>
 </li>
 </ul>
 <a name="replicationForBulkLoadDataEnabled">
@@ -728,7 +728,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationForBulkLoadDataEnabled</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.151">replicationForBulkLoadDataEnabled</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.152">replicationForBulkLoadDataEnabled</a></pre>
 </li>
 </ul>
 <a name="totalBufferUsed">
@@ -737,7 +737,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockListLast">
 <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/ReplicationSourceManager.html#line.154">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/ReplicationSourceManager.html#line.155">totalBufferUsed</a></pre>
 </li>
 </ul>
 </li>
@@ -754,7 +754,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ReplicationSourceManager</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.168">ReplicationSourceManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a>&nbsp;queueStorage,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.169">ReplicationSourceManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a>&nbsp;queueStorage,
                                 <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeers</a>&nbsp;replicationPeers,
                                 <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationTracker.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationTracker</a>&nbsp;replicationTracker,
                                 org.apache.hadoop.conf.Configuration&nbsp;conf,
@@ -796,7 +796,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;?&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.213">init</a>()
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;?&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.214">init</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">Adds a normal source per registered peer cluster and tries to process all old region server wal
  queues
@@ -814,7 +814,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>adoptAbandonedQueues</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.225">adoptAbandonedQueues</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.226">adoptAbandonedQueues</a>()</pre>
 </li>
 </ul>
 <a name="addPeer-java.lang.String-">
@@ -823,7 +823,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>addPeer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.254">addPeer</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;peerId)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.255">addPeer</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;peerId)
              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">1. Add peer to replicationPeers 2. Add the normal source and related replication queue 3. Add
  HFile Refs</div>
@@ -841,7 +841,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>removePeer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.275">removePeer</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;peerId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.276">removePeer</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;peerId)</pre>
 <div class="block">1. Remove peer for replicationPeers 2. Remove all the recovered sources for the specified id
  and related replication queues 3. Remove the normal source and related replication queue 4.
  Remove HFile Refs</div>
@@ -857,7 +857,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>createSource</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.317">createSource</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;queueId,
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.318">createSource</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;queueId,
                                                 <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationPeer</a>&nbsp;replicationPeer)
                                          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">Factory method to create a replication source</div>
@@ -877,7 +877,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>addSource</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.336">addSource</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;peerId)
+<pre><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.337">addSource</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;peerId)
                               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">Add a normal source for the given peer on this region server. Meanwhile, add new replication
  queue to storage. For the newly added peer, we only need to enqueue the latest log of each wal
@@ -898,7 +898,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshSources</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.370">refreshSources</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;peerId)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.371">refreshSources</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;peerId)
                     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">Close the previous replication sources of this peer id and open new sources to trigger the new
  replication state changes or new replication config changes. Here we don't need to change
@@ -917,7 +917,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>removeRecoveredSource</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.418">removeRecoveredSource</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&nbsp;src)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.419">removeRecoveredSource</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&nbsp;src)</pre>
 <div class="block">Clear the metrics and related replication queue of the specified old source</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -931,7 +931,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>removeSource</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.431">removeSource</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&nbsp;src)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.432">removeSource</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&nbsp;src)</pre>
 <div class="block">Clear the metrics and related replication queue of the specified old source</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -945,7 +945,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteQueue</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.444">deleteQueue</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;queueId)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.445">deleteQueue</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;queueId)</pre>
 <div class="block">Delete a complete queue of wals associated with a replication source</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -959,7 +959,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>abortWhenFail</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.453">abortWhenFail</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.ReplicationQueueOperation</a>&nbsp;op)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.454">abortWhenFail</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.ReplicationQueueOperation</a>&nbsp;op)</pre>
 </li>
 </ul>
 <a name="throwIOExceptionWhenFail-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceManager.ReplicationQueueOperation-">
@@ -968,7 +968,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>throwIOExceptionWhenFail</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.461">throwIOExceptionWhenFail</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.ReplicationQueueOperation</a>&nbsp;op)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.462">throwIOExceptionWhenFail</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.ReplicationQueueOperation</a>&nbsp;op)
                                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>
@@ -982,7 +982,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>abortAndThrowIOExceptionWhenFail</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.469">abortAndThrowIOExceptionWhenFail</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.ReplicationQueueOperation</a>&nbsp;op)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.470">abortAndThrowIOExceptionWhenFail</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.ReplicationQueueOperation</a>&nbsp;op)
                                        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>
@@ -996,7 +996,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>logPositionAndCleanOldLogs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.485">logPositionAndCleanOldLogs</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;queueId,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.486">logPositionAndCleanOldLogs</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;queueId,
                                        boolean&nbsp;queueRecovered,
                                        <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">This method will log the current position to storage. And also clean old logs from the
@@ -1015,7 +1015,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanOldLogs</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.502">cleanOldLogs</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;log,
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.503">cleanOldLogs</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;log,
                   boolean&nbsp;inclusive,
                   <a href="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)</pre>
@@ -1036,7 +1036,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanOldLogs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.520">cleanOldLogs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;wals,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.521">cleanOldLogs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;wals,
                           <a href="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;key,
                           boolean&nbsp;inclusive,
                           <a href="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;id)</pre>
@@ -1048,7 +1048,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>preLogRoll</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.534">preLogRoll</a>(org.apache.hadoop.fs.Path&nbsp;newLog)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.535">preLogRoll</a>(org.apache.hadoop.fs.Path&nbsp;newLog)
                 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>
@@ -1062,7 +1062,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>postLogRoll</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.592">postLogRoll</a>(org.apache.hadoop.fs.Path&nbsp;newLog)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.593">postLogRoll</a>(org.apache.hadoop.fs.Path&nbsp;newLog)
                  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>
@@ -1076,7 +1076,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServerRemoved</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.600">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/regionserver/ReplicationSourceManager.html#line.601">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>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationListener.html#regionServerRemoved-java.lang.String-">ReplicationListener</a></code></span></div>
 <div class="block">A region server has been removed from the local cluster</div>
 <dl>
@@ -1093,7 +1093,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>transferQueues</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.610">transferQueues</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;deadRS)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.611">transferQueues</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;deadRS)</pre>
 <div class="block">Transfer all the queues of the specified to this region server. First it tries to grab a lock
  and if it works it will move the old queues and finally will delete the old queues.
  <p>
@@ -1106,7 +1106,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>join</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.746">join</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.762">join</a>()</pre>
 <div class="block">Terminate the replication on this region server</div>
 </li>
 </ul>
@@ -1116,7 +1116,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALs</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource
 Manager.html#line.758">getWALs</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource
 Manager.html#line.774">getWALs</a>()</pre>
 <div class="block">Get a copy of the wals of the normal sources on this rs</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1130,7 +1130,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>getWalsByIdRecoveredQueues</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
 #line.767">getWalsByIdRecoveredQueues</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
 #line.783">getWalsByIdRecoveredQueues</a>()</pre>
 <div class="block">Get a copy of the wals of the recovered sources on this rs</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1144,7 +1144,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>getSources</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/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.775">getSources</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/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.791">getSources</a>()</pre>
 <div class="block">Get a list of all the normal sources of this rs</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1158,7 +1158,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>getOldSources</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/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.783">getOldSources</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/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.799">getOldSources</a>()</pre>
 <div class="block">Get a list of all the recovered sources of this rs</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1172,7 +1172,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>getSource</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.792">getSource</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;peerId)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.808">getSource</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;peerId)</pre>
 <div class="block">Get the normal source for a given peer</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1186,7 +1186,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllQueues</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.797">getAllQueues</a>()
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.813">getAllQueues</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>
@@ -1200,7 +1200,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>getSizeOfLatestPath</h4>
-<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.808">getSizeOfLatestPath</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.824">getSizeOfLatestPath</a>()</pre>
 </li>
 </ul>
 <a name="getTotalBufferUsed--">
@@ -1209,7 +1209,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalBufferUsed</h4>
-<pre>public&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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.815">getTotalBufferUsed</a>()</pre>
+<pre>public&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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.831">getTotalBufferUsed</a>()</pre>
 </li>
 </ul>
 <a name="getOldLogDir--">
@@ -1218,7 +1218,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>getOldLogDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.823">getOldLogDir</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.839">getOldLogDir</a>()</pre>
 <div class="block">Get the directory where wals are archived</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1232,7 +1232,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.831">getLogDir</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.847">getLogDir</a>()</pre>
 <div class="block">Get the directory where wals are stored by their RSs</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1246,7 +1246,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>getFs</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.839">getFs</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.855">getFs</a>()</pre>
 <div class="block">Get the handle on the local file system</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1260,7 +1260,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationPeers</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeers</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.847">getReplicationPeers</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeers</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.863">getReplicationPeers</a>()</pre>
 <div class="block">Get the ReplicationPeers used by this ReplicationSourceManager</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1274,7 +1274,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>getStats</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.854">getStats</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.870">getStats</a>()</pre>
 <div class="block">Get a string representation of all the sources' metrics</div>
 </li>
 </ul>
@@ -1284,7 +1284,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>addHFileRefs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.867">addHFileRefs</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.883">addHFileRefs</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[]&nbsp;family,
                          <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/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path&gt;&gt;&nbsp;pairs)
                   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>
@@ -1300,7 +1300,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanUpHFileRefs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.874">cleanUpHFileRefs</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;peerId,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.890">cleanUpHFileRefs</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;peerId,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;files)</pre>
 </li>
 </ul>
@@ -1310,7 +1310,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockListLast">
 <li class="blockList">
 <h4>activeFailoverTaskCount</h4>
-<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.878">activeFailoverTaskCount</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.894">activeFailoverTaskCount</a>()</pre>
 </li>
 </ul>
 </li>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/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 6ef281d..67b7e3a 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/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/d0a21080/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 0ebeeb0..8e41b8e 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -198,9 +198,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.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>
 <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>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/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 75493ca..beb7208 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/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/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 c0e28b4..9ec5b35 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/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/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 b592ca1..427610c 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 = "d4768114e860eb03418e6b08e5de20950824327e";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "e9a278adc617a41ad3eefdd419e7618afee6b2b3";<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 = "Thu Apr 26 14:39:06 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Fri Apr 27 14:39:10 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 = "8854dca29afb389807a3902b26d793b6";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "caf1e1906ad0f6f6e7eeda39558516c5";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.RegionStateVisitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.RegionStateVisitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.RegionStateVisitor.html
index b442170..c546fc5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.RegionStateVisitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.RegionStateVisitor.html
@@ -174,178 +174,179 @@
 <span class="sourceLineNo">166</span>      if (regionInfo.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID &amp;&amp;<a name="line.166"></a>
 <span class="sourceLineNo">167</span>        hasGlobalReplicationScope(regionInfo.getTable())) {<a name="line.167"></a>
 <span class="sourceLineNo">168</span>        MetaTableAccessor.addReplicationBarrier(put, openSeqNum);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      info.append(", openSeqNum=").append(openSeqNum);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      info.append(", regionLocation=").append(regionLocation);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    } else if (regionLocation != null &amp;&amp; !regionLocation.equals(lastHost)) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      // Ideally, if no regionLocation, write null to the hbase:meta but this will confuse clients<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      // currently; they want a server to hit. TODO: Make clients wait if no location.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.175"></a>
-<span class="sourceLineNo">176</span>          .setRow(put.getRow())<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          .setFamily(HConstants.CATALOG_FAMILY)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          .setQualifier(getServerNameColumn(replicaId))<a name="line.178"></a>
-<span class="sourceLineNo">179</span>          .setTimestamp(put.getTimestamp())<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          .setType(Cell.Type.Put)<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          .setValue(Bytes.toBytes(regionLocation.getServerName()))<a name="line.181"></a>
-<span class="sourceLineNo">182</span>          .build());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      info.append(", regionLocation=").append(regionLocation);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        .setRow(put.getRow())<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        .setFamily(HConstants.CATALOG_FAMILY)<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        .setQualifier(getStateColumn(replicaId))<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        .setTimestamp(put.getTimestamp())<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        .setType(Cell.Type.Put)<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        .setValue(Bytes.toBytes(state.name()))<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        .build());<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    LOG.info(info.toString());<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    updateRegionLocation(regionInfo, state, put);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>  private void updateRegionLocation(RegionInfo regionInfo, State state, Put put)<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      throws IOException {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    try (Table table = master.getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      table.put(put);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    } catch (IOException e) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      // TODO: Revist!!!! Means that if a server is loaded, then we will abort our host!<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // In tests we abort the Master!<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      String msg = String.format("FAILED persisting region=%s state=%s",<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        regionInfo.getShortNameToLog(), state);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      LOG.error(msg, e);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      master.abort(msg, e);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      throw e;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  private long getOpenSeqNumForParentRegion(RegionInfo region) throws IOException {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    MasterFileSystem mfs = master.getMasterFileSystem();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    long maxSeqId =<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        WALSplitter.getMaxRegionSequenceId(mfs.getFileSystem(), mfs.getRegionDir(region));<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    return maxSeqId &gt; 0 ? maxSeqId + 1 : HConstants.NO_SEQNUM;<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>  // ============================================================================================<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  //  Update Region Splitting State helpers<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  // ============================================================================================<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  public void splitRegion(RegionInfo parent, RegionInfo hriA, RegionInfo hriB,<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      ServerName serverName) throws IOException {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    TableDescriptor htd = getTableDescriptor(parent.getTable());<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    long parentOpenSeqNum = HConstants.NO_SEQNUM;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    if (htd.hasGlobalReplicationScope()) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      parentOpenSeqNum = getOpenSeqNumForParentRegion(parent);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    MetaTableAccessor.splitRegion(master.getConnection(), parent, parentOpenSeqNum, hriA, hriB,<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      serverName, getRegionReplication(htd));<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>  //  Update Region Merging State helpers<a name="line.234"></a>
-<span class="sourceLineNo">235</span>  // ============================================================================================<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  public void mergeRegions(RegionInfo child, RegionInfo hriA, RegionInfo hriB,<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      ServerName serverName) throws IOException {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    TableDescriptor htd = getTableDescriptor(child.getTable());<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    long regionAOpenSeqNum = -1L;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    long regionBOpenSeqNum = -1L;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    if (htd.hasGlobalReplicationScope()) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      regionAOpenSeqNum = getOpenSeqNumForParentRegion(hriA);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      regionBOpenSeqNum = getOpenSeqNumForParentRegion(hriB);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    MetaTableAccessor.mergeRegions(master.getConnection(), child, hriA, regionAOpenSeqNum, hriB,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      regionBOpenSeqNum, serverName, getRegionReplication(htd));<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>  // ============================================================================================<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  //  Delete Region State helpers<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  // ============================================================================================<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  public void deleteRegion(final RegionInfo regionInfo) throws IOException {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    deleteRegions(Collections.singletonList(regionInfo));<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>  public void deleteRegions(final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    MetaTableAccessor.deleteRegions(master.getConnection(), regions);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>  // ==========================================================================<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  //  Table Descriptors helpers<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  // ==========================================================================<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private boolean hasGlobalReplicationScope(TableName tableName) throws IOException {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    return hasGlobalReplicationScope(getTableDescriptor(tableName));<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>  private boolean hasGlobalReplicationScope(TableDescriptor htd) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    return htd != null ? htd.hasGlobalReplicationScope() : false;<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>  private int getRegionReplication(TableDescriptor htd) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return htd != null ? htd.getRegionReplication() : 1;<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>  private TableDescriptor getTableDescriptor(TableName tableName) throws IOException {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    return master.getTableDescriptors().get(tableName);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>  // ==========================================================================<a name="line.279"></a>
-<span class="sourceLineNo">280</span>  //  Server Name<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  // ==========================================================================<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  /**<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * Returns the {@link ServerName} from catalog table {@link Result}<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * where the region is transitioning. It should be the same as<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * {@link MetaTableAccessor#getServerName(Result,int)} if the server is at OPEN state.<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * @param r Result to pull the transitioning server name from<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * @return A ServerName instance or {@link MetaTableAccessor#getServerName(Result,int)}<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * if necessary fields not found or empty.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   */<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  static ServerName getRegionServer(final Result r, int replicaId) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    final Cell cell = r.getColumnLatestCell(HConstants.CATALOG_FAMILY,<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        getServerNameColumn(replicaId));<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    if (cell == null || cell.getValueLength() == 0) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      RegionLocations locations = MetaTableAccessor.getRegionLocations(r);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      if (locations != null) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        HRegionLocation location = locations.getRegionLocation(replicaId);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        if (location != null) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          return location.getServerName();<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>      return null;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    return ServerName.parseServerName(Bytes.toString(cell.getValueArray(),<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      cell.getValueOffset(), cell.getValueLength()));<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>  private static byte[] getServerNameColumn(int replicaId) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    return replicaId == 0<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        ? HConstants.SERVERNAME_QUALIFIER<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        : Bytes.toBytes(HConstants.SERVERNAME_QUALIFIER_STR + META_REPLICA_ID_DELIMITER<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          + String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId));<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>  //  Region State<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  // ==========================================================================<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  /**<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * Pull the region state from a catalog table {@link Result}.<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * @param r Result to pull the region state from<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * @return the region state, or null if unknown.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  @VisibleForTesting<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public static State getRegionState(final Result r, int replicaId) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    Cell cell = r.getColumnLatestCell(HConstants.CATALOG_FAMILY, getStateColumn(replicaId));<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    if (cell == null || cell.getValueLength() == 0) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      return null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    return State.valueOf(Bytes.toString(cell.getValueArray(), cell.getValueOffset(),<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        cell.getValueLength()));<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private static byte[] getStateColumn(int replicaId) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    return replicaId == 0<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        ? HConstants.STATE_QUALIFIER<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        : Bytes.toBytes(HConstants.STATE_QUALIFIER_STR + META_REPLICA_ID_DELIMITER<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          + String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId));<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">169</span>        info.append(", repBarrier=").append(openSeqNum);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      info.append(", openSeqNum=").append(openSeqNum);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      info.append(", regionLocation=").append(regionLocation);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    } else if (regionLocation != null &amp;&amp; !regionLocation.equals(lastHost)) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      // Ideally, if no regionLocation, write null to the hbase:meta but this will confuse clients<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      // currently; they want a server to hit. TODO: Make clients wait if no location.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.176"></a>
+<span class="sourceLineNo">177</span>          .setRow(put.getRow())<a name="line.177"></a>
+<span class="sourceLineNo">178</span>          .setFamily(HConstants.CATALOG_FAMILY)<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          .setQualifier(getServerNameColumn(replicaId))<a name="line.179"></a>
+<span class="sourceLineNo">180</span>          .setTimestamp(put.getTimestamp())<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          .setType(Cell.Type.Put)<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          .setValue(Bytes.toBytes(regionLocation.getServerName()))<a name="line.182"></a>
+<span class="sourceLineNo">183</span>          .build());<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      info.append(", regionLocation=").append(regionLocation);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.186"></a>
+<span class="sourceLineNo">187</span>        .setRow(put.getRow())<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .setFamily(HConstants.CATALOG_FAMILY)<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        .setQualifier(getStateColumn(replicaId))<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        .setTimestamp(put.getTimestamp())<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        .setType(Cell.Type.Put)<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        .setValue(Bytes.toBytes(state.name()))<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        .build());<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    LOG.info(info.toString());<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    updateRegionLocation(regionInfo, state, put);<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>  private void updateRegionLocation(RegionInfo regionInfo, State state, Put put)<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      throws IOException {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    try (Table table = master.getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      table.put(put);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } catch (IOException e) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      // TODO: Revist!!!! Means that if a server is loaded, then we will abort our host!<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      // In tests we abort the Master!<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      String msg = String.format("FAILED persisting region=%s state=%s",<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        regionInfo.getShortNameToLog(), state);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      LOG.error(msg, e);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      master.abort(msg, e);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      throw e;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  private long getOpenSeqNumForParentRegion(RegionInfo region) throws IOException {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    MasterFileSystem mfs = master.getMasterFileSystem();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    long maxSeqId =<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        WALSplitter.getMaxRegionSequenceId(mfs.getFileSystem(), mfs.getRegionDir(region));<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    return maxSeqId &gt; 0 ? maxSeqId + 1 : HConstants.NO_SEQNUM;<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>  //  Update Region Splitting State helpers<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  // ============================================================================================<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  public void splitRegion(RegionInfo parent, RegionInfo hriA, RegionInfo hriB,<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      ServerName serverName) throws IOException {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    TableDescriptor htd = getTableDescriptor(parent.getTable());<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    long parentOpenSeqNum = HConstants.NO_SEQNUM;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    if (htd.hasGlobalReplicationScope()) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      parentOpenSeqNum = getOpenSeqNumForParentRegion(parent);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    MetaTableAccessor.splitRegion(master.getConnection(), parent, parentOpenSeqNum, hriA, hriB,<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      serverName, getRegionReplication(htd));<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>  //  Update Region Merging State helpers<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  // ============================================================================================<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  public void mergeRegions(RegionInfo child, RegionInfo hriA, RegionInfo hriB,<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      ServerName serverName) throws IOException {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    TableDescriptor htd = getTableDescriptor(child.getTable());<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    long regionAOpenSeqNum = -1L;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    long regionBOpenSeqNum = -1L;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    if (htd.hasGlobalReplicationScope()) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      regionAOpenSeqNum = getOpenSeqNumForParentRegion(hriA);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      regionBOpenSeqNum = getOpenSeqNumForParentRegion(hriB);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    }<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    MetaTableAccessor.mergeRegions(master.getConnection(), child, hriA, regionAOpenSeqNum, hriB,<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      regionBOpenSeqNum, serverName, getRegionReplication(htd));<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  // ============================================================================================<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  //  Delete Region State helpers<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  // ============================================================================================<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  public void deleteRegion(final RegionInfo regionInfo) throws IOException {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    deleteRegions(Collections.singletonList(regionInfo));<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 void deleteRegions(final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    MetaTableAccessor.deleteRegions(master.getConnection(), regions);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>  // ==========================================================================<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  //  Table Descriptors helpers<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  // ==========================================================================<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  private boolean hasGlobalReplicationScope(TableName tableName) throws IOException {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    return hasGlobalReplicationScope(getTableDescriptor(tableName));<a name="line.265"></a>
+<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>  private boolean hasGlobalReplicationScope(TableDescriptor htd) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    return htd != null ? htd.hasGlobalReplicationScope() : false;<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 int getRegionReplication(TableDescriptor htd) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    return htd != null ? htd.getRegionReplication() : 1;<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>  private TableDescriptor getTableDescriptor(TableName tableName) throws IOException {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    return master.getTableDescriptors().get(tableName);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>  // ==========================================================================<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  //  Server Name<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  // ==========================================================================<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
+<span class="sourceLineNo">285</span>   * Returns the {@link ServerName} from catalog table {@link Result}<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   * where the region is transitioning. It should be the same as<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * {@link MetaTableAccessor#getServerName(Result,int)} if the server is at OPEN state.<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * @param r Result to pull the transitioning server name from<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   * @return A ServerName instance or {@link MetaTableAccessor#getServerName(Result,int)}<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * if necessary fields not found or empty.<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  static ServerName getRegionServer(final Result r, int replicaId) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    final Cell cell = r.getColumnLatestCell(HConstants.CATALOG_FAMILY,<a name="line.293"></a>
+<span class="sourceLineNo">294</span>        getServerNameColumn(replicaId));<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    if (cell == null || cell.getValueLength() == 0) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      RegionLocations locations = MetaTableAccessor.getRegionLocations(r);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (locations != null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        HRegionLocation location = locations.getRegionLocation(replicaId);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        if (location != null) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>          return location.getServerName();<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>      return null;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    return ServerName.parseServerName(Bytes.toString(cell.getValueArray(),<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      cell.getValueOffset(), cell.getValueLength()));<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>  private static byte[] getServerNameColumn(int replicaId) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    return replicaId == 0<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        ? HConstants.SERVERNAME_QUALIFIER<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        : Bytes.toBytes(HConstants.SERVERNAME_QUALIFIER_STR + META_REPLICA_ID_DELIMITER<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          + String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId));<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span>  // ==========================================================================<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  //  Region State<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  // ==========================================================================<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Pull the region state from a catalog table {@link Result}.<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * @param r Result to pull the region state from<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * @return the region state, or null if unknown.<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  @VisibleForTesting<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  public static State getRegionState(final Result r, int replicaId) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    Cell cell = r.getColumnLatestCell(HConstants.CATALOG_FAMILY, getStateColumn(replicaId));<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    if (cell == null || cell.getValueLength() == 0) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      return null;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    return State.valueOf(Bytes.toString(cell.getValueArray(), cell.getValueOffset(),<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        cell.getValueLength()));<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 static byte[] getStateColumn(int replicaId) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    return replicaId == 0<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        ? HConstants.STATE_QUALIFIER<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        : Bytes.toBytes(HConstants.STATE_QUALIFIER_STR + META_REPLICA_ID_DELIMITER<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          + String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId));<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html
index b442170..c546fc5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html
@@ -174,178 +174,179 @@
 <span class="sourceLineNo">166</span>      if (regionInfo.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID &amp;&amp;<a name="line.166"></a>
 <span class="sourceLineNo">167</span>        hasGlobalReplicationScope(regionInfo.getTable())) {<a name="line.167"></a>
 <span class="sourceLineNo">168</span>        MetaTableAccessor.addReplicationBarrier(put, openSeqNum);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      info.append(", openSeqNum=").append(openSeqNum);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      info.append(", regionLocation=").append(regionLocation);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    } else if (regionLocation != null &amp;&amp; !regionLocation.equals(lastHost)) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      // Ideally, if no regionLocation, write null to the hbase:meta but this will confuse clients<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      // currently; they want a server to hit. TODO: Make clients wait if no location.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.175"></a>
-<span class="sourceLineNo">176</span>          .setRow(put.getRow())<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          .setFamily(HConstants.CATALOG_FAMILY)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          .setQualifier(getServerNameColumn(replicaId))<a name="line.178"></a>
-<span class="sourceLineNo">179</span>          .setTimestamp(put.getTimestamp())<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          .setType(Cell.Type.Put)<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          .setValue(Bytes.toBytes(regionLocation.getServerName()))<a name="line.181"></a>
-<span class="sourceLineNo">182</span>          .build());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      info.append(", regionLocation=").append(regionLocation);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        .setRow(put.getRow())<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        .setFamily(HConstants.CATALOG_FAMILY)<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        .setQualifier(getStateColumn(replicaId))<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        .setTimestamp(put.getTimestamp())<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        .setType(Cell.Type.Put)<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        .setValue(Bytes.toBytes(state.name()))<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        .build());<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    LOG.info(info.toString());<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    updateRegionLocation(regionInfo, state, put);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>  private void updateRegionLocation(RegionInfo regionInfo, State state, Put put)<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      throws IOException {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    try (Table table = master.getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      table.put(put);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    } catch (IOException e) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      // TODO: Revist!!!! Means that if a server is loaded, then we will abort our host!<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // In tests we abort the Master!<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      String msg = String.format("FAILED persisting region=%s state=%s",<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        regionInfo.getShortNameToLog(), state);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      LOG.error(msg, e);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      master.abort(msg, e);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      throw e;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  private long getOpenSeqNumForParentRegion(RegionInfo region) throws IOException {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    MasterFileSystem mfs = master.getMasterFileSystem();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    long maxSeqId =<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        WALSplitter.getMaxRegionSequenceId(mfs.getFileSystem(), mfs.getRegionDir(region));<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    return maxSeqId &gt; 0 ? maxSeqId + 1 : HConstants.NO_SEQNUM;<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>  // ============================================================================================<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  //  Update Region Splitting State helpers<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  // ============================================================================================<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  public void splitRegion(RegionInfo parent, RegionInfo hriA, RegionInfo hriB,<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      ServerName serverName) throws IOException {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    TableDescriptor htd = getTableDescriptor(parent.getTable());<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    long parentOpenSeqNum = HConstants.NO_SEQNUM;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    if (htd.hasGlobalReplicationScope()) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      parentOpenSeqNum = getOpenSeqNumForParentRegion(parent);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    MetaTableAccessor.splitRegion(master.getConnection(), parent, parentOpenSeqNum, hriA, hriB,<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      serverName, getRegionReplication(htd));<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>  //  Update Region Merging State helpers<a name="line.234"></a>
-<span class="sourceLineNo">235</span>  // ============================================================================================<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  public void mergeRegions(RegionInfo child, RegionInfo hriA, RegionInfo hriB,<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      ServerName serverName) throws IOException {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    TableDescriptor htd = getTableDescriptor(child.getTable());<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    long regionAOpenSeqNum = -1L;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    long regionBOpenSeqNum = -1L;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    if (htd.hasGlobalReplicationScope()) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      regionAOpenSeqNum = getOpenSeqNumForParentRegion(hriA);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      regionBOpenSeqNum = getOpenSeqNumForParentRegion(hriB);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    MetaTableAccessor.mergeRegions(master.getConnection(), child, hriA, regionAOpenSeqNum, hriB,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      regionBOpenSeqNum, serverName, getRegionReplication(htd));<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>  // ============================================================================================<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  //  Delete Region State helpers<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  // ============================================================================================<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  public void deleteRegion(final RegionInfo regionInfo) throws IOException {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    deleteRegions(Collections.singletonList(regionInfo));<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>  public void deleteRegions(final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    MetaTableAccessor.deleteRegions(master.getConnection(), regions);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>  // ==========================================================================<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  //  Table Descriptors helpers<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  // ==========================================================================<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private boolean hasGlobalReplicationScope(TableName tableName) throws IOException {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    return hasGlobalReplicationScope(getTableDescriptor(tableName));<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>  private boolean hasGlobalReplicationScope(TableDescriptor htd) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    return htd != null ? htd.hasGlobalReplicationScope() : false;<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>  private int getRegionReplication(TableDescriptor htd) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return htd != null ? htd.getRegionReplication() : 1;<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>  private TableDescriptor getTableDescriptor(TableName tableName) throws IOException {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    return master.getTableDescriptors().get(tableName);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>  // ==========================================================================<a name="line.279"></a>
-<span class="sourceLineNo">280</span>  //  Server Name<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  // ==========================================================================<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  /**<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * Returns the {@link ServerName} from catalog table {@link Result}<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * where the region is transitioning. It should be the same as<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * {@link MetaTableAccessor#getServerName(Result,int)} if the server is at OPEN state.<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * @param r Result to pull the transitioning server name from<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * @return A ServerName instance or {@link MetaTableAccessor#getServerName(Result,int)}<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * if necessary fields not found or empty.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   */<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  static ServerName getRegionServer(final Result r, int replicaId) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    final Cell cell = r.getColumnLatestCell(HConstants.CATALOG_FAMILY,<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        getServerNameColumn(replicaId));<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    if (cell == null || cell.getValueLength() == 0) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      RegionLocations locations = MetaTableAccessor.getRegionLocations(r);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      if (locations != null) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        HRegionLocation location = locations.getRegionLocation(replicaId);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        if (location != null) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          return location.getServerName();<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>      return null;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    return ServerName.parseServerName(Bytes.toString(cell.getValueArray(),<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      cell.getValueOffset(), cell.getValueLength()));<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>  private static byte[] getServerNameColumn(int replicaId) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    return replicaId == 0<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        ? HConstants.SERVERNAME_QUALIFIER<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        : Bytes.toBytes(HConstants.SERVERNAME_QUALIFIER_STR + META_REPLICA_ID_DELIMITER<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          + String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId));<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>  //  Region State<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  // ==========================================================================<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  /**<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * Pull the region state from a catalog table {@link Result}.<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * @param r Result to pull the region state from<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * @return the region state, or null if unknown.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  @VisibleForTesting<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public static State getRegionState(final Result r, int replicaId) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    Cell cell = r.getColumnLatestCell(HConstants.CATALOG_FAMILY, getStateColumn(replicaId));<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    if (cell == null || cell.getValueLength() == 0) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      return null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    return State.valueOf(Bytes.toString(cell.getValueArray(), cell.getValueOffset(),<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        cell.getValueLength()));<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private static byte[] getStateColumn(int replicaId) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    return replicaId == 0<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        ? HConstants.STATE_QUALIFIER<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        : Bytes.toBytes(HConstants.STATE_QUALIFIER_STR + META_REPLICA_ID_DELIMITER<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          + String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId));<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">169</span>        info.append(", repBarrier=").append(openSeqNum);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      info.append(", openSeqNum=").append(openSeqNum);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      info.append(", regionLocation=").append(regionLocation);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    } else if (regionLocation != null &amp;&amp; !regionLocation.equals(lastHost)) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      // Ideally, if no regionLocation, write null to the hbase:meta but this will confuse clients<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      // currently; they want a server to hit. TODO: Make clients wait if no location.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.176"></a>
+<span class="sourceLineNo">177</span>          .setRow(put.getRow())<a name="line.177"></a>
+<span class="sourceLineNo">178</span>          .setFamily(HConstants.CATALOG_FAMILY)<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          .setQualifier(getServerNameColumn(replicaId))<a name="line.179"></a>
+<span class="sourceLineNo">180</span>          .setTimestamp(put.getTimestamp())<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          .setType(Cell.Type.Put)<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          .setValue(Bytes.toBytes(regionLocation.getServerName()))<a name="line.182"></a>
+<span class="sourceLineNo">183</span>          .build());<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      info.append(", regionLocation=").append(regionLocation);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.186"></a>
+<span class="sourceLineNo">187</span>        .setRow(put.getRow())<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .setFamily(HConstants.CATALOG_FAMILY)<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        .setQualifier(getStateColumn(replicaId))<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        .setTimestamp(put.getTimestamp())<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        .setType(Cell.Type.Put)<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        .setValue(Bytes.toBytes(state.name()))<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        .build());<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    LOG.info(info.toString());<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    updateRegionLocation(regionInfo, state, put);<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>  private void updateRegionLocation(RegionInfo regionInfo, State state, Put put)<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      throws IOException {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    try (Table table = master.getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      table.put(put);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } catch (IOException e) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      // TODO: Revist!!!! Means that if a server is loaded, then we will abort our host!<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      // In tests we abort the Master!<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      String msg = String.format("FAILED persisting region=%s state=%s",<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        regionInfo.getShortNameToLog(), state);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      LOG.error(msg, e);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      master.abort(msg, e);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      throw e;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  private long getOpenSeqNumForParentRegion(RegionInfo region) throws IOException {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    MasterFileSystem mfs = master.getMasterFileSystem();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    long maxSeqId =<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        WALSplitter.getMaxRegionSequenceId(mfs.getFileSystem(), mfs.getRegionDir(region));<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    return maxSeqId &gt; 0 ? maxSeqId + 1 : HConstants.NO_SEQNUM;<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>  //  Update Region Splitting State helpers<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  // ============================================================================================<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  public void splitRegion(RegionInfo parent, RegionInfo hriA, RegionInfo hriB,<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      ServerName serverName) throws IOException {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    TableDescriptor htd = getTableDescriptor(parent.getTable());<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    long parentOpenSeqNum = HConstants.NO_SEQNUM;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    if (htd.hasGlobalReplicationScope()) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      parentOpenSeqNum = getOpenSeqNumForParentRegion(parent);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    MetaTableAccessor.splitRegion(master.getConnection(), parent, parentOpenSeqNum, hriA, hriB,<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      serverName, getRegionReplication(htd));<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>  //  Update Region Merging State helpers<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  // ============================================================================================<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  public void mergeRegions(RegionInfo child, RegionInfo hriA, RegionInfo hriB,<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      ServerName serverName) throws IOException {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    TableDescriptor htd = getTableDescriptor(child.getTable());<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    long regionAOpenSeqNum = -1L;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    long regionBOpenSeqNum = -1L;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    if (htd.hasGlobalReplicationScope()) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      regionAOpenSeqNum = getOpenSeqNumForParentRegion(hriA);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      regionBOpenSeqNum = getOpenSeqNumForParentRegion(hriB);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    }<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    MetaTableAccessor.mergeRegions(master.getConnection(), child, hriA, regionAOpenSeqNum, hriB,<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      regionBOpenSeqNum, serverName, getRegionReplication(htd));<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  // ============================================================================================<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  //  Delete Region State helpers<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  // ============================================================================================<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  public void deleteRegion(final RegionInfo regionInfo) throws IOException {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    deleteRegions(Collections.singletonList(regionInfo));<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 void deleteRegions(final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    MetaTableAccessor.deleteRegions(master.getConnection(), regions);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>  // ==========================================================================<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  //  Table Descriptors helpers<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  // ==========================================================================<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  private boolean hasGlobalReplicationScope(TableName tableName) throws IOException {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    return hasGlobalReplicationScope(getTableDescriptor(tableName));<a name="line.265"></a>
+<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>  private boolean hasGlobalReplicationScope(TableDescriptor htd) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    return htd != null ? htd.hasGlobalReplicationScope() : false;<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 int getRegionReplication(TableDescriptor htd) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    return htd != null ? htd.getRegionReplication() : 1;<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>  private TableDescriptor getTableDescriptor(TableName tableName) throws IOException {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    return master.getTableDescriptors().get(tableName);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>  // ==========================================================================<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  //  Server Name<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  // ==========================================================================<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
+<span class="sourceLineNo">285</span>   * Returns the {@link ServerName} from catalog table {@link Result}<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   * where the region is transitioning. It should be the same as<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * {@link MetaTableAccessor#getServerName(Result,int)} if the server is at OPEN state.<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * @param r Result to pull the transitioning server name from<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   * @return A ServerName instance or {@link MetaTableAccessor#getServerName(Result,int)}<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * if necessary fields not found or empty.<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  static ServerName getRegionServer(final Result r, int replicaId) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    final Cell cell = r.getColumnLatestCell(HConstants.CATALOG_FAMILY,<a name="line.293"></a>
+<span class="sourceLineNo">294</span>        getServerNameColumn(replicaId));<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    if (cell == null || cell.getValueLength() == 0) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      RegionLocations locations = MetaTableAccessor.getRegionLocations(r);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (locations != null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        HRegionLocation location = locations.getRegionLocation(replicaId);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        if (location != null) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>          return location.getServerName();<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>      return null;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    return ServerName.parseServerName(Bytes.toString(cell.getValueArray(),<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      cell.getValueOffset(), cell.getValueLength()));<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>  private static byte[] getServerNameColumn(int replicaId) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    return replicaId == 0<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        ? HConstants.SERVERNAME_QUALIFIER<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        : Bytes.toBytes(HConstants.SERVERNAME_QUALIFIER_STR + META_REPLICA_ID_DELIMITER<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          + String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId));<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span>  // ==========================================================================<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  //  Region State<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  // ==========================================================================<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Pull the region state from a catalog table {@link Result}.<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * @param r Result to pull the region state from<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * @return the region state, or null if unknown.<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  @VisibleForTesting<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  public static State getRegionState(final Result r, int replicaId) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    Cell cell = r.getColumnLatestCell(HConstants.CATALOG_FAMILY, getStateColumn(replicaId));<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    if (cell == null || cell.getValueLength() == 0) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      return null;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    return State.valueOf(Bytes.toString(cell.getValueArray(), cell.getValueOffset(),<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        cell.getValueLength()));<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 static byte[] getStateColumn(int replicaId) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    return replicaId == 0<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        ? HConstants.STATE_QUALIFIER<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        : Bytes.toBytes(HConstants.STATE_QUALIFIER_STR + META_REPLICA_ID_DELIMITER<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          + String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId));<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>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
index a48ded5..c282308 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
@@ -59,834 +59,850 @@
 <span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.replication.ReplicationListener;<a name="line.51"></a>
 <span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.replication.ReplicationPeer;<a name="line.52"></a>
 <span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.replication.ReplicationPeer.PeerState;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.replication.ReplicationPeers;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationQueueInfo;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.replication.ReplicationTracker;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<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> * This class is responsible to manage all the replication sources. There are two classes of<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * sources:<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * &lt;ul&gt;<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * &lt;li&gt;Normal sources are persistent and one per peer cluster&lt;/li&gt;<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * &lt;li&gt;Old sources are recovered from a failed region server and our only goal is to finish<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * replicating the WAL queue it had&lt;/li&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * &lt;/ul&gt;<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * &lt;p&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * When a region server dies, this class uses a watcher to get notified and it tries to grab a lock<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * in order to transfer all the queues in a local old source.<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * &lt;p&gt;<a name="line.78"></a>
-<span class="sourceLineNo">079</span> * Synchronization specification:<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * &lt;ul&gt;<a name="line.80"></a>
-<span class="sourceLineNo">081</span> * &lt;li&gt;No need synchronized on {@link #sources}. {@link #sources} is a ConcurrentHashMap and there<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * is a Lock for peer id in {@link PeerProcedureHandlerImpl}. So there is no race for peer<a name="line.82"></a>
-<span class="sourceLineNo">083</span> * operations.&lt;/li&gt;<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * &lt;li&gt;Need synchronized on {@link #walsById}. There are four methods which modify it,<a name="line.84"></a>
-<span class="sourceLineNo">085</span> * {@link #addPeer(String)}, {@link #removePeer(String)},<a name="line.85"></a>
-<span class="sourceLineNo">086</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and {@link #preLogRoll(Path)}.<a name="line.86"></a>
-<span class="sourceLineNo">087</span> * {@link #walsById} is a ConcurrentHashMap and there is a Lock for peer id in<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * {@link PeerProcedureHandlerImpl}. So there is no race between {@link #addPeer(String)} and<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * {@link #removePeer(String)}. {@link #cleanOldLogs(NavigableSet, String, boolean, String)} is<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * called by {@link ReplicationSourceInterface}. So no race with {@link #addPeer(String)}.<a name="line.90"></a>
-<span class="sourceLineNo">091</span> * {@link #removePeer(String)} will terminate the {@link ReplicationSourceInterface} firstly, then<a name="line.91"></a>
-<span class="sourceLineNo">092</span> * remove the wals from {@link #walsById}. So no race with {@link #removePeer(String)}. The only<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * case need synchronized is {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * {@link #preLogRoll(Path)}.&lt;/li&gt;<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * &lt;li&gt;No need synchronized on {@link #walsByIdRecoveredQueues}. There are three methods which<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * modify it, {@link #removePeer(String)} ,<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()}.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} is called by<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * {@link ReplicationSourceInterface}. {@link #removePeer(String)} will terminate the<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * {@link ReplicationSourceInterface} firstly, then remove the wals from<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * {@link #walsByIdRecoveredQueues}. And {@link ReplicationSourceManager.NodeFailoverWorker#run()}<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * will add the wals to {@link #walsByIdRecoveredQueues} firstly, then start up a<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * {@link ReplicationSourceInterface}. So there is no race here. For<a name="line.104"></a>
-<span class="sourceLineNo">105</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()} and {@link #removePeer(String)}, there<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * is already synchronized on {@link #oldsources}. So no need synchronized on<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * {@link #walsByIdRecoveredQueues}.&lt;/li&gt;<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * &lt;li&gt;Need synchronized on {@link #latestPaths} to avoid the new open source miss new log.&lt;/li&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * &lt;li&gt;Need synchronized on {@link #oldsources} to avoid adding recovered source for the<a name="line.109"></a>
-<span class="sourceLineNo">110</span> * to-be-removed peer.&lt;/li&gt;<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * &lt;/ul&gt;<a name="line.111"></a>
-<span class="sourceLineNo">112</span> */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>@InterfaceAudience.Private<a name="line.113"></a>
-<span class="sourceLineNo">114</span>public class ReplicationSourceManager implements ReplicationListener {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSourceManager.class);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  // all the sources that read this RS's logs and every peer only has one replication source<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private final ConcurrentMap&lt;String, ReplicationSourceInterface&gt; sources;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  // List of all the sources we got from died RSs<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private final List&lt;ReplicationSourceInterface&gt; oldsources;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  private final ReplicationQueueStorage queueStorage;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private final ReplicationTracker replicationTracker;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  private final ReplicationPeers replicationPeers;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  // UUID for this cluster<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private final UUID clusterId;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  // All about stopping<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private final Server server;<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>  // All logs we are currently tracking<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  // Index structure of the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  // For normal replication source, the peer id is same with the queue id<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsById;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  // Logs for recovered sources we are currently tracking<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  // the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  // For recovered source, the queue id's format is peer_id-servername-*<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsByIdRecoveredQueues;<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  private final Configuration conf;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  private final FileSystem fs;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  // The paths to the latest log of each wal group, for new coming peers<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private final Set&lt;Path&gt; latestPaths;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  // Path to the wals directories<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private final Path logDir;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  // Path to the wal archive<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final Path oldLogDir;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final WALFileLengthProvider walFileLengthProvider;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  // The number of ms that we wait before moving znodes, HBASE-3596<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  private final long sleepBeforeFailover;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  // Homemade executer service for replication<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private final ThreadPoolExecutor executor;<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private final boolean replicationForBulkLoadDataEnabled;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.replication.ReplicationPeerImpl;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationPeers;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.ReplicationQueueInfo;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.replication.ReplicationTracker;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.Logger;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.slf4j.LoggerFactory;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>/**<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * This class is responsible to manage all the replication sources. There are two classes of<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * sources:<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * &lt;ul&gt;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * &lt;li&gt;Normal sources are persistent and one per peer cluster&lt;/li&gt;<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * &lt;li&gt;Old sources are recovered from a failed region server and our only goal is to finish<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * replicating the WAL queue it had&lt;/li&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * &lt;/ul&gt;<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * &lt;p&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * When a region server dies, this class uses a watcher to get notified and it tries to grab a lock<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * in order to transfer all the queues in a local old source.<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * &lt;p&gt;<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * Synchronization specification:<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * &lt;ul&gt;<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * &lt;li&gt;No need synchronized on {@link #sources}. {@link #sources} is a ConcurrentHashMap and there<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * is a Lock for peer id in {@link PeerProcedureHandlerImpl}. So there is no race for peer<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * operations.&lt;/li&gt;<a name="line.84"></a>
+<span class="sourceLineNo">085</span> * &lt;li&gt;Need synchronized on {@link #walsById}. There are four methods which modify it,<a name="line.85"></a>
+<span class="sourceLineNo">086</span> * {@link #addPeer(String)}, {@link #removePeer(String)},<a name="line.86"></a>
+<span class="sourceLineNo">087</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and {@link #preLogRoll(Path)}.<a name="line.87"></a>
+<span class="sourceLineNo">088</span> * {@link #walsById} is a ConcurrentHashMap and there is a Lock for peer id in<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * {@link PeerProcedureHandlerImpl}. So there is no race between {@link #addPeer(String)} and<a name="line.89"></a>
+<span class="sourceLineNo">090</span> * {@link #removePeer(String)}. {@link #cleanOldLogs(NavigableSet, String, boolean, String)} is<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * called by {@link ReplicationSourceInterface}. So no race with {@link #addPeer(String)}.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * {@link #removePeer(String)} will terminate the {@link ReplicationSourceInterface} firstly, then<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * remove the wals from {@link #walsById}. So no race with {@link #removePeer(String)}. The only<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * case need synchronized is {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * {@link #preLogRoll(Path)}.&lt;/li&gt;<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * &lt;li&gt;No need synchronized on {@link #walsByIdRecoveredQueues}. There are three methods which<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * modify it, {@link #removePeer(String)} ,<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()}.<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} is called by<a name="line.100"></a>
+<span class="sourceLineNo">101</span> * {@link ReplicationSourceInterface}. {@link #removePeer(String)} will terminate the<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * {@link ReplicationSourceInterface} firstly, then remove the wals from<a name="line.102"></a>
+<span class="sourceLineNo">103</span> * {@link #walsByIdRecoveredQueues}. And {@link ReplicationSourceManager.NodeFailoverWorker#run()}<a name="line.103"></a>
+<span class="sourceLineNo">104</span> * will add the wals to {@link #walsByIdRecoveredQueues} firstly, then start up a<a name="line.104"></a>
+<span class="sourceLineNo">105</span> * {@link ReplicationSourceInterface}. So there is no race here. For<a name="line.105"></a>
+<span class="sourceLineNo">106</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()} and {@link #removePeer(String)}, there<a name="line.106"></a>
+<span class="sourceLineNo">107</span> * is already synchronized on {@link #oldsources}. So no need synchronized on<a name="line.107"></a>
+<span class="sourceLineNo">108</span> * {@link #walsByIdRecoveredQueues}.&lt;/li&gt;<a name="line.108"></a>
+<span class="sourceLineNo">109</span> * &lt;li&gt;Need synchronized on {@link #latestPaths} to avoid the new open source miss new log.&lt;/li&gt;<a name="line.109"></a>
+<span class="sourceLineNo">110</span> * &lt;li&gt;Need synchronized on {@link #oldsources} to avoid adding recovered source for the<a name="line.110"></a>
+<span class="sourceLineNo">111</span> * to-be-removed peer.&lt;/li&gt;<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * &lt;/ul&gt;<a name="line.112"></a>
+<span class="sourceLineNo">113</span> */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>@InterfaceAudience.Private<a name="line.114"></a>
+<span class="sourceLineNo">115</span>public class ReplicationSourceManager implements ReplicationListener {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSourceManager.class);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  // all the sources that read this RS's logs and every peer only has one replication source<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private final ConcurrentMap&lt;String, ReplicationSourceInterface&gt; sources;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  // List of all the sources we got from died RSs<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private final List&lt;ReplicationSourceInterface&gt; oldsources;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  private final ReplicationQueueStorage queueStorage;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private final ReplicationTracker replicationTracker;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private final ReplicationPeers replicationPeers;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  // UUID for this cluster<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  private final UUID clusterId;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  // All about stopping<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  private final Server server;<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  // All logs we are currently tracking<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  // Index structure of the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  // For normal replication source, the peer id is same with the queue id<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsById;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  // Logs for recovered sources we are currently tracking<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  // the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  // For recovered source, the queue id's format is peer_id-servername-*<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsByIdRecoveredQueues;<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  private final Configuration conf;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  private final FileSystem fs;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  // The paths to the latest log of each wal group, for new coming peers<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  private final Set&lt;Path&gt; latestPaths;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  // Path to the wals directories<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  private final Path logDir;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  // Path to the wal archive<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private final Path oldLogDir;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  private final WALFileLengthProvider walFileLengthProvider;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  // The number of ms that we wait before moving znodes, HBASE-3596<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  private final long sleepBeforeFailover;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  // Homemade executer service for replication<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  private final ThreadPoolExecutor executor;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>  private final boolean replicationForBulkLoadDataEnabled;<a name="line.152"></a>
 <span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>  private AtomicLong totalBufferUsed = new AtomicLong();<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>   * Creates a replication manager and sets the watch on all the other registered region servers<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * @param queueStorage the interface for manipulating replication queues<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @param replicationPeers<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * @param replicationTracker<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @param conf the configuration to use<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * @param server the server for this region server<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   * @param fs the file system to use<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * @param logDir the directory that contains all wal directories of live RSs<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * @param oldLogDir the directory where old logs are archived<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * @param clusterId<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  public ReplicationSourceManager(ReplicationQueueStorage queueStorage,<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      ReplicationPeers replicationPeers, ReplicationTracker replicationTracker, Configuration conf,<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      Server server, FileSystem fs, Path logDir, Path oldLogDir, UUID clusterId,<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      WALFileLengthProvider walFileLengthProvider) throws IOException {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    // CopyOnWriteArrayList is thread-safe.<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    // Generally, reading is more than modifying.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    this.sources = new ConcurrentHashMap&lt;&gt;();<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    this.queueStorage = queueStorage;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    this.replicationPeers = replicationPeers;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    this.replicationTracker = replicationTracker;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    this.server = server;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    this.walsById = new ConcurrentHashMap&lt;&gt;();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    this.walsByIdRecoveredQueues = new ConcurrentHashMap&lt;&gt;();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    this.oldsources = new ArrayList&lt;&gt;();<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.conf = conf;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    this.fs = fs;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    this.logDir = logDir;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.oldLogDir = oldLogDir;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.sleepBeforeFailover = conf.getLong("replication.sleep.before.failover", 30000); // 30<a name="line.186"></a>
-<span class="sourceLineNo">187</span>                                                                                         // seconds<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.clusterId = clusterId;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.walFileLengthProvider = walFileLengthProvider;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.replicationTracker.registerListener(this);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    // It's preferable to failover 1 RS at a time, but with good zk servers<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    // more could be processed at the same time.<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    int nbWorkers = conf.getInt("replication.executor.workers", 1);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    // use a short 100ms sleep since this could be done inline with a RS startup<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    // even if we fail, other region servers can take care of it<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    this.executor = new ThreadPoolExecutor(nbWorkers, nbWorkers, 100, TimeUnit.MILLISECONDS,<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        new LinkedBlockingQueue&lt;&gt;());<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    ThreadFactoryBuilder tfb = new ThreadFactoryBuilder();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    tfb.setNameFormat("ReplicationExecutor-%d");<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    tfb.setDaemon(true);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    this.executor.setThreadFactory(tfb.build());<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.latestPaths = new HashSet&lt;Path&gt;();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    replicationForBulkLoadDataEnabled = conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * Adds a normal source per registered peer cluster and tries to process all old region server wal<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * queues<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   * &lt;p&gt;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * The returned future is for adoptAbandonedQueues task.<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  Future&lt;?&gt; init() throws IOException {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    for (String id : this.replicationPeers.getAllPeerIds()) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      addSource(id);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      if (replicationForBulkLoadDataEnabled) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        // Check if peer exists in hfile-refs queue, if not add it. This can happen in the case<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        // when a peer was added before replication for bulk loaded data was enabled.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        throwIOExceptionWhenFail(() -&gt; this.queueStorage.addPeerToHFileRefs(id));<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    return this.executor.submit(this::adoptAbandonedQueues);<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>  private void adoptAbandonedQueues() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    List&lt;ServerName&gt; currentReplicators = null;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    try {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      currentReplicators = queueStorage.getListOfReplicators();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    } catch (ReplicationException e) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      server.abort("Failed to get all replicators", e);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      return;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    if (currentReplicators == null || currentReplicators.isEmpty()) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      return;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    List&lt;ServerName&gt; otherRegionServers = replicationTracker.getListOfRegionServers().stream()<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        .map(ServerName::valueOf).collect(Collectors.toList());<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    LOG.info(<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      "Current list of replicators: " + currentReplicators + " other RSs: " + otherRegionServers);<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    // Look if there's anything to process after a restart<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    for (ServerName rs : currentReplicators) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      if (!otherRegionServers.contains(rs)) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        transferQueues(rs);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>  /**<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * 1. Add peer to replicationPeers 2. Add the normal source and related replication queue 3. Add<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * HFile Refs<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * @param peerId the id of replication peer<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  public void addPeer(String peerId) throws IOException {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    boolean added = false;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    try {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      added = this.replicationPeers.addPeer(peerId);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    } catch (ReplicationException e) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      throw new IOException(e);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    if (added) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      addSource(peerId);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      if (replicationForBulkLoadDataEnabled) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        throwIOExceptionWhenFail(() -&gt; this.queueStorage.addPeerToHFileRefs(peerId));<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * 1. Remove peer for replicationPeers 2. Remove all the recovered sources for the specified id<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * and related replication queues 3. Remove the normal source and related replication queue 4.<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * Remove HFile Refs<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * @param peerId the id of the replication peer<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   */<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  public void removePeer(String peerId) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    replicationPeers.removePeer(peerId);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    String terminateMessage = "Replication stream was removed by a user";<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    List&lt;ReplicationSourceInterface&gt; oldSourcesToDelete = new ArrayList&lt;&gt;();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    // synchronized on oldsources to avoid adding recovered source for the to-be-removed peer<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    // see NodeFailoverWorker.run<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    synchronized (this.oldsources) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      // First close all the recovered sources for this peer<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      for (ReplicationSourceInterface src : oldsources) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        if (peerId.equals(src.getPeerId())) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>          oldSourcesToDelete.add(src);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      for (ReplicationSourceInterface src : oldSourcesToDelete) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        src.terminate(terminateMessage);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        removeRecoveredSource(src);<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>    LOG.info(<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      "Number of deleted recovered sources for " + peerId + ": " + oldSourcesToDelete.size());<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    // Now close the normal source for this peer<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    ReplicationSourceInterface srcToRemove = this.sources.get(peerId);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    if (srcToRemove != null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      srcToRemove.terminate(terminateMessage);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      removeSource(srcToRemove);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    } else {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      // This only happened in unit test TestReplicationSourceManager#testPeerRemovalCleanup<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      // Delete queue from storage and memory and queue id is same with peer id for normal<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      // source<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      deleteQueue(peerId);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      this.walsById.remove(peerId);<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>    // Remove HFile Refs<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    abortWhenFail(() -&gt; this.queueStorage.removePeerFromHFileRefs(peerId));<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>   * Factory method to create a replication source<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * @param queueId the id of the replication queue<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * @return the created source<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private ReplicationSourceInterface createSource(String queueId, ReplicationPeer replicationPeer)<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      throws IOException {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    ReplicationSourceInterface src = ReplicationSourceFactory.create(conf, queueId);<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    MetricsSource metrics = new MetricsSource(queueId);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    // init replication source<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    src.init(conf, fs, this, queueStorage, replicationPeer, server, queueId, clusterId,<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      walFileLengthProvider, metrics);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    return src;<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>  /**<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * Add a normal source for the given peer on this region server. Meanwhile, add new replication<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * queue to storage. For the newly added peer, we only need to enqueue the latest log of each wal<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * group and do replication<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @param peerId the id of the replication peer<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * @return the source that was created<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   */<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  @VisibleForTesting<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  ReplicationSourceInterface addSource(String peerId) throws IOException {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    ReplicationPeer peer = replicationPeers.getPeer(peerId);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    ReplicationSourceInterface src = createSource(peerId, peer);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    // synchronized on latestPaths to avoid missing the new log<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    synchronized (this.latestPaths) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.sources.put(peerId, src);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      Map&lt;String, NavigableSet&lt;String&gt;&gt; walsByGroup = new HashMap&lt;&gt;();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.walsById.put(peerId, walsByGroup);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      // Add the latest wal to that source's queue<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      if (this.latestPaths.size() &gt; 0) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        for (Path logPath : latestPaths) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          String name = logPath.getName();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>          String walPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(name);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          NavigableSet&lt;String&gt; logs = new TreeSet&lt;&gt;();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          logs.add(name);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>          walsByGroup.put(walPrefix, logs);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>          // Abort RS and throw exception to make add peer failed<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          abortAndThrowIOExceptionWhenFail(<a name="line.353"></a>
-<span class="sourceLineNo">354</span>            () -&gt; this.queueStorage.addWAL(server.getServerName(), peerId, name));<a name="line.354"></a>
-<span class="sourceLineNo">355</span>          src.enqueueLog(logPath);<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">359</span>    src.startup();<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return src;<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>   * Close the previous replication sources of this peer id and open new sources to trigger the new<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * replication state changes or new replication config changes. Here we don't need to change<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * replication queue storage and only to enqueue all logs to the new replication source<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * @param peerId the id of the replication peer<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @throws IOException<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   */<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  public void refreshSources(String peerId) throws IOException {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    String terminateMessage = "Peer " + peerId +<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      " state or config changed. Will close the previous replication source and open a new one";<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    ReplicationPeer peer = replicationPeers.getPeer(peerId);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    ReplicationSourceInterface src = createSource(peerId, peer);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    // synchronized on latestPaths to avoid missing the new log<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    synchronized (this.latestPaths) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      ReplicationSourceInterface toRemove = this.sources.put(peerId, src);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      if (toRemove != null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        LOG.info("Terminate replication source for " + toRemove.getPeerId());<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        toRemove.terminate(terminateMessage);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      for (SortedSet&lt;String&gt; walsByGroup : walsById.get(peerId).values()) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        walsByGroup.forEach(wal -&gt; src.enqueueLog(new Path(this.logDir, wal)));<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    LOG.info("Startup replication source for " + src.getPeerId());<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    src.startup();<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>    List&lt;ReplicationSourceInterface&gt; toStartup = new ArrayList&lt;&gt;();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    // synchronized on oldsources to avoid race with NodeFailoverWorker<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    synchronized (this.oldsources) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      List&lt;String&gt; previousQueueIds = new ArrayList&lt;&gt;();<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      for (ReplicationSourceInterface oldSource : this.oldsources) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        if (oldSource.getPeerId().equals(peerId)) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          previousQueueIds.add(oldSource.getQueueId());<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          oldSource.terminate(terminateMessage);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          this.oldsources.remove(oldSource);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      for (String queueId : previousQueueIds) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        ReplicationSourceInterface replicationSource = createSource(queueId, peer);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        this.oldsources.add(replicationSource);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        for (SortedSet&lt;String&gt; walsByGroup : walsByIdRecoveredQueues.get(queueId).values()) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          walsByGroup.forEach(wal -&gt; src.enqueueLog(new Path(wal)));<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        toStartup.add(replicationSource);<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>    for (ReplicationSourceInterface replicationSource : toStartup) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      replicationSource.startup();<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Clear the metrics and related replication queue of the specified old source<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @param src source to clear<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  void removeRecoveredSource(ReplicationSourceInterface src) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    LOG.info("Done with the recovered queue " + src.getQueueId());<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    src.getSourceMetrics().clear();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    this.oldsources.remove(src);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    // Delete queue from storage and memory<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    deleteQueue(src.getQueueId());<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    this.walsByIdRecoveredQueues.remove(src.getQueueId());<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  }<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>  /**<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   * Clear the metrics and related replication queue of the specified old source<a name="line.428"></a>
-<span class="sourceLineNo">429</span>   * @param src source to clear<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
-<span class="sourceLineNo">431</span>  void removeSource(ReplicationSourceInterface src) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    LOG.info("Done with the queue " + src.getQueueId());<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    src.getSourceMetrics().clear();<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    this.sources.remove(src.getPeerId());<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    // Delete queue from storage and memory<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    deleteQueue(src.getQueueId());<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    this.walsById.remove(src.getQueueId());<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  /**<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * Delete a complete queue of wals associated with a replication source<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * @param queueId the id of replication queue to delete<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   */<a name="line.443"></a>
-<span class="sourceLineNo">444</span>  private void deleteQueue(String queueId) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    abortWhenFail(() -&gt; this.queueStorage.removeQueue(server.getServerName(), queueId));<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>  @FunctionalInterface<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private interface ReplicationQueueOperation {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    void exec() throws ReplicationException;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>  private void abortWhenFail(ReplicationQueueOperation op) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    try {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      op.exec();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    } catch (ReplicationException e) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      server.abort("Failed to operate on replication queue", e);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    }<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>  private void throwIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    try {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      op.exec();<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    } catch (ReplicationException e) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      throw new IOException(e);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  private void abortAndThrowIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    try {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      op.exec();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    } catch (ReplicationException e) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      server.abort("Failed to operate on replication queue", e);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      throw new IOException(e);<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><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  /**<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * This method will log the current position to storage. And also clean old logs from the<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   * replication queue.<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @param queueId id of the replication queue<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param queueRecovered indicates if this queue comes from another region server<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @param entryBatch the wal entry batch we just shipped<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  public void logPositionAndCleanOldLogs(String queueId, boolean queueRecovered,<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      WALEntryBatch entryBatch) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    String fileName = entryBatch.getLastWalPath().getName();<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    abortWhenFail(() -&gt; this.queueStorage.setWALPosition(server.getServerName(), queueId, fileName,<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      entryBatch.getLastWalPosition(), entryBatch.getLastSeqIds()));<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    cleanOldLogs(fileName, entryBatch.isEndOfFile(), queueId, queueRecovered);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>  }<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>  /**<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * Cleans a log file and all older logs from replication queue. Called when we are sure that a log<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * file is closed and has no more entries.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   * @param log Path to the log<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * @param inclusive whether we should also remove the given log file<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   * @param queueId id of the replication queue<a name="line.498"></a>
-<span class="sourceLineNo">499</span>   * @param queueRecovered Whether this is a recovered queue<a name="line.499"></a>
-<span class="sourceLineNo">500</span>   */<a name="line.500"></a>
-<span class="sourceLineNo">501</span>  @VisibleForTesting<a name="line.501"></a>
-<span class="sourceLineNo">502</span>  void cleanOldLogs(String log, boolean inclusive, String queueId, boolean queueRecovered) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(log);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    if (queueRecovered) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      NavigableSet&lt;String&gt; wals = walsByIdRecoveredQueues.get(queueId).get(logPrefix);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      if (wals != null) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        cleanOldLogs(wals, log, inclusive, queueId);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      }<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    } else {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      // synchronized on walsById to avoid race with preLogRoll<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      synchronized (this.walsById) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        NavigableSet&lt;String&gt; wals = walsById.get(queueId).get(logPrefix);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        if (wals != null) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          cleanOldLogs(wals, log, inclusive, queueId);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  }<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>  private void cleanOldLogs(NavigableSet&lt;String&gt; wals, String key, boolean inclusive, String id) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    NavigableSet&lt;String&gt; walSet = wals.headSet(key, inclusive);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    if (walSet.isEmpty()) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      return;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    LOG.debug("Removing {} logs in the list: {}", walSet.size(), walSet);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    for (String wal : walSet) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      abortWhenFail(() -&gt; this.queueStorage.removeWAL(server.getServerName(), id, wal));<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    walSet.clear();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>  }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>  // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  @VisibleForTesting<a name="line.533"></a>
-<span class="sourceLineNo">534</span>  public void preLogRoll(Path newLog) throws IOException {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    String logName = newLog.getName();<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(logName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    // synchronized on latestPaths to avoid the new open source miss the new log<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    synchronized (this.latestPaths) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      // Add log to queue storage<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        // If record log to queue storage failed, abort RS and throw exception to make log roll<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        // failed<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        abortAndThrowIOExceptionWhenFail(<a name="line.543"></a>
-<span class="sourceLineNo">544</span>          () -&gt; this.queueStorage.addWAL(server.getServerName(), source.getQueueId(), logName));<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span><a name="line.546"></a>
-<span class="sourceLineNo">547</span>      // synchronized on walsById to avoid race with cleanOldLogs<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      synchronized (this.walsById) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>        // Update walsById map<a name="line.549"></a>
-<span class="sourceLineNo">550</span>        for (Map.Entry&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; entry : this.walsById<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          .entrySet()) {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>          String peerId = entry.getKey();<a name="line.552"></a>
-<span class="sourceLineNo">553</span>          Map&lt;String, NavigableSet&lt;String&gt;&gt; walsByPrefix = entry.getValue();<a name="line.553"></a>
-<span class="sourceLineNo">554</span>          boolean existingPrefix = false;<a name="line.554"></a>
-<span class="sourceLineNo">555</span>          for (Map.Entry&lt;String, NavigableSet&lt;String&gt;&gt; walsEntry : walsByPrefix.entrySet()) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>            SortedSet&lt;String&gt; wals = walsEntry.getValue();<a name="line.556"></a>
-<span class="sourceLineNo">557</span>            if (this.sources.isEmpty()) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>              // If there's no slaves, don't need to keep the old wals since<a name="line.558"></a>
-<span class="sourceLineNo">559</span>              // we only consider the last one when a new slave comes in<a name="line.559"></a>
-<span class="sourceLineNo">560</span>              wals.clear();<a name="line.560"></a>
-<span class="sourceLineNo">561</span>            }<a name="line.561"></a>
-<span class="sourceLineNo">562</span>            if (logPrefix.equals(walsEntry.getKey())) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>              wals.add(logName);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>              existingPrefix = true;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>            }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>          }<a name="line.566"></a>
-<span class="sourceLineNo">567</span>          if (!existingPrefix) {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>            // The new log belongs to a new group, add it into this peer<a name="line.568"></a>
-<span class="sourceLineNo">569</span>            LOG.debug("Start tracking logs for wal group {} for peer {}", logPrefix, peerId);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>            NavigableSet&lt;String&gt; wals = new TreeSet&lt;&gt;();<a name="line.570"></a>
-<span class="sourceLineNo">571</span>            wals.add(logName);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>            walsByPrefix.put(logPrefix, wals);<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          }<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        }<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>      // Add to latestPaths<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      Iterator&lt;Path&gt; iterator = latestPaths.iterator();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      while (iterator.hasNext()) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>        Path path = iterator.next();<a name="line.580"></a>
-<span class="sourceLineNo">581</span>        if (path.getName().contains(logPrefix)) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>          iterator.remove();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>          break;<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>      this.latestPaths.add(newLog);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    }<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  @VisibleForTesting<a name="line.591"></a>
-<span class="sourceLineNo">592</span>  public void postLogRoll(Path newLog) throws IOException {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    // This only updates the sources we own, not the recovered ones<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      source.enqueueLog(newLog);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>  @Override<a name="line.599"></a>
-<span class="sourceLineNo">600</span>  public void regionServerRemoved(String regionserver) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    transferQueues(ServerName.valueOf(regionserver));<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>   * Transfer all the queues of the specified to this region server. First it tries to grab a lock<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   * and if it works it will move the old queues and finally will delete the old queues.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   * &lt;p&gt;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>   * It creates one old source for any type of source of the old rs.<a name="line.608"></a>
-<span class="sourceLineNo">609</span>   */<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  private void transferQueues(ServerName deadRS) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    if (server.getServerName().equals(deadRS)) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      // it's just us, give up<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      return;<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    NodeFailoverWorker transfer = new NodeFailoverWorker(deadRS);<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    try {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      this.executor.execute(transfer);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    } catch (RejectedExecutionException ex) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      LOG.info("Cancelling the transfer of " + deadRS + " because of " + ex.getMessage());<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><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * Class responsible to setup new ReplicationSources to take care of the queues from dead region<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * servers.<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   */<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  class NodeFailoverWorker extends Thread {<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span>    private final ServerName deadRS;<a name="line.629"></a>
-<span class="sourceLineNo">630</span><a name="line.630"></a>
-<span class="sourceLineNo">631</span>    @VisibleForTesting<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    public NodeFailoverWorker(ServerName deadRS) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      super("Failover-for-" + deadRS);<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      this.deadRS = deadRS;<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>    @Override<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    public void run() {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      // Wait a bit before transferring the queues, we may be shutting down.<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      // This sleep may not be enough in some cases.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      try {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>        Thread.sleep(sleepBeforeFailover +<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          (long) (ThreadLocalRandom.current().nextFloat() * sleepBeforeFailover));<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      } catch (InterruptedException e) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        Thread.currentThread().interrupt();<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      // We try to lock that rs' queue directory<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      if (server.isStopped()) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        LOG.info("Not transferring queue since we are shutting down");<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        return;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      }<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      Map&lt;String, Set&lt;String&gt;&gt; newQueues = new HashMap&lt;&gt;();<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      try {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        List&lt;String&gt; queues = queueStorage.getAllQueues(deadRS);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>        while (!queues.isEmpty()) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>          Pair&lt;String, SortedSet&lt;String&gt;&gt; peer = queueStorage.claimQueue(deadRS,<a name="line.657"></a>
-<span class="sourceLineNo">658</span>            queues.get(ThreadLocalRandom.current().nextInt(queues.size())), server.getServerName());<a name="line.658"></a>
-<span class="sourceLineNo">659</span>          long sleep = sleepBeforeFailover / 2;<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          if (!peer.getSecond().isEmpty()) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>            newQueues.put(peer.getFirst(), peer.getSecond());<a name="line.661"></a>
-<span class="sourceLineNo">662</span>            sleep = sleepBeforeFailover;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>          }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          try {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>            Thread.sleep(sleep);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          } catch (InterruptedException e) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>            LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.667"></a>
-<span class="sourceLineNo">668</span>            Thread.currentThread().interrupt();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>          queues = queueStorage.getAllQueues(deadRS);<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        }<a name="line.671"></a>
-<span class="sourceLineNo">672</span>        if (queues.isEmpty()) {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          queueStorage.removeReplicatorIfQueueIsEmpty(deadRS);<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      } catch (ReplicationException e) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>        server.abort("Failed to claim queue from dead regionserver", e);<a name="line.676"></a>
-<span class="sourceLineNo">677</span>        return;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      }<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      // Copying over the failed queue is completed.<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      if (newQueues.isEmpty()) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        // We either didn't get the lock or the failed region server didn't have any outstanding<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        // WALs to replicate, so we are done.<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        return;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      }<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>      for (Map.Entry&lt;String, Set&lt;String&gt;&gt; entry : newQueues.entrySet()) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>        String queueId = entry.getKey();<a name="line.687"></a>
-<span class="sourceLineNo">688</span>        Set&lt;String&gt; walsSet = entry.getValue();<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        try {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>          // there is not an actual peer defined corresponding to peerId for the failover.<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          ReplicationQueueInfo replicationQueueInfo = new ReplicationQueueInfo(queueId);<a name="line.691"></a>
-<span class="sourceLineNo">692</span>          String actualPeerId = replicationQueueInfo.getPeerId();<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>          ReplicationPeer peer = replicationPeers.getPeer(actualPeerId);<a name="line.694"></a>
-<span class="sourceLineNo">695</span>          if (peer == null) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>            LOG.warn("Skipping failover for peer:" + actualPeerId + " of node " + deadRS +<a name="line.696"></a>
-<span class="sourceLineNo">697</span>              ", peer is null");<a name="line.697"></a>
-<span class="sourceLineNo">698</span>            abortWhenFail(() -&gt; queueStorage.removeQueue(server.getServerName(), queueId));<a name="line.698"></a>
-<span class="sourceLineNo">699</span>            continue;<a name="line.699"></a>
-<span class="sourceLineNo">700</span>          }<a name="line.700"></a>
-<span class="sourceLineNo">701</span>          if (server instanceof ReplicationSyncUp.DummyServer<a name="line.701"></a>
-<span class="sourceLineNo">702</span>              &amp;&amp; peer.getPeerState().equals(PeerState.DISABLED)) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>            LOG.warn("Peer {} is disbaled. ReplicationSyncUp tool will skip "<a name="line.703"></a>
-<span class="sourceLineNo">704</span>                + "replicating data to this peer.",<a name="line.704"></a>
-<span class="sourceLineNo">705</span>              actualPeerId);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>            continue;<a name="line.706"></a>
-<span class="sourceLineNo">707</span>          }<a name="line.707"></a>
-<span class="sourceLineNo">708</span>          // track sources in walsByIdRecoveredQueues<a name="line.708"></a>
-<span class="sourceLineNo">709</span>          Map&lt;String, NavigableSet&lt;String&gt;&gt; walsByGroup = new HashMap&lt;&gt;();<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          walsByIdRecoveredQueues.put(queueId, walsByGroup);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>          for (String wal : walsSet) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>            String walPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(wal);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>            NavigableSet&lt;String&gt; wals = walsByGroup.get(walPrefix);<a name="line.713"></a>
-<span class="sourceLineNo">714</span>            if (wals == null) {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>              wals = new TreeSet&lt;&gt;();<a name="line.715"></a>
-<span class="sourceLineNo">716</span>              walsByGroup.put(walPrefix, wals);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>            }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>            wals.add(wal);<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>          ReplicationSourceInterface src = createSource(queueId, peer);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>          // synchronized on oldsources to avoid adding recovered source for the to-be-removed peer<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          synchronized (oldsources) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>            if (!replicationPeers.getAllPeerIds().contains(src.getPeerId())) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>              src.terminate("Recovered queue doesn't belong to any current peer");<a name="line.725"></a>
-<span class="sourceLineNo">726</span>              removeRecoveredSource(src);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>              continue;<a name="line.727"></a>
-<span class="sourceLineNo">728</span>            }<a name="line.728"></a>
-<span class="sourceLineNo">729</span>            oldsources.add(src);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>            for (String wal : walsSet) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span>              src.enqueueLog(new Path(oldLogDir, wal));<a name="line.731"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  private AtomicLong totalBufferUsed = new AtomicLong();<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>   * Creates a replication manager and sets the watch on all the other registered region servers<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * @param queueStorage the interface for manipulating replication queues<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * @param replicationPeers<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * @param replicationTracker<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * @param conf the configuration to use<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * @param server the server for this region server<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * @param fs the file system to use<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @param logDir the directory that contains all wal directories of live RSs<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * @param oldLogDir the directory where old logs are archived<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * @param clusterId<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   */<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public ReplicationSourceManager(ReplicationQueueStorage queueStorage,<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      ReplicationPeers replicationPeers, ReplicationTracker replicationTracker, Configuration conf,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      Server server, FileSystem fs, Path logDir, Path oldLogDir, UUID clusterId,<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      WALFileLengthProvider walFileLengthProvider) throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    // CopyOnWriteArrayList is thread-safe.<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    // Generally, reading is more than modifying.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    this.sources = new ConcurrentHashMap&lt;&gt;();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    this.queueStorage = queueStorage;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    this.replicationPeers = replicationPeers;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    this.replicationTracker = replicationTracker;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    this.server = server;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    this.walsById = new ConcurrentHashMap&lt;&gt;();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    this.walsByIdRecoveredQueues = new ConcurrentHashMap&lt;&gt;();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    this.oldsources = new ArrayList&lt;&gt;();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    this.conf = conf;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    this.fs = fs;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    this.logDir = logDir;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.oldLogDir = oldLogDir;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    this.sleepBeforeFailover = conf.getLong("replication.sleep.before.failover", 30000); // 30<a name="line.187"></a>
+<span class="sourceLineNo">188</span>                                                                                         // seconds<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.clusterId = clusterId;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.walFileLengthProvider = walFileLengthProvider;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.replicationTracker.registerListener(this);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    // It's preferable to failover 1 RS at a time, but with good zk servers<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // more could be processed at the same time.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    int nbWorkers = conf.getInt("replication.executor.workers", 1);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    // use a short 100ms sleep since this could be done inline with a RS startup<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // even if we fail, other region servers can take care of it<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    this.executor = new ThreadPoolExecutor(nbWorkers, nbWorkers, 100, TimeUnit.MILLISECONDS,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        new LinkedBlockingQueue&lt;&gt;());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    ThreadFactoryBuilder tfb = new ThreadFactoryBuilder();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    tfb.setNameFormat("ReplicationExecutor-%d");<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    tfb.setDaemon(true);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    this.executor.setThreadFactory(tfb.build());<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.latestPaths = new HashSet&lt;Path&gt;();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    replicationForBulkLoadDataEnabled = conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<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"

<TRUNCATED>

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

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


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

Branch: refs/heads/asf-site
Commit: d0a21080598517c377afd31f2ccaf9dade4ef6ad
Parents: a837f1d
Author: jenkins <bu...@apache.org>
Authored: Fri Apr 27 14:47:07 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Fri Apr 27 14:47:07 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                |    4 +-
 book.html                                       |    2 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       |   46 +-
 coc.html                                        |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    4 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |    4 +-
 devapidocs/constant-values.html                 |    6 +-
 devapidocs/index-all.html                       |    6 +
 .../hadoop/hbase/backup/package-tree.html       |    2 +-
 .../hadoop/hbase/client/package-tree.html       |   22 +-
 .../hadoop/hbase/executor/package-tree.html     |    2 +-
 .../hadoop/hbase/filter/package-tree.html       |    8 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    2 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |    4 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |    2 +-
 .../master/assignment/RegionStateStore.html     |   28 +-
 .../hbase/master/balancer/package-tree.html     |    2 +-
 .../hadoop/hbase/master/package-tree.html       |    2 +-
 .../hbase/master/procedure/package-tree.html    |    2 +-
 .../master/replication/ModifyPeerProcedure.html |   10 +-
 .../hadoop/hbase/monitoring/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   18 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    6 +-
 .../hadoop/hbase/quotas/package-tree.html       |    6 +-
 .../hadoop/hbase/regionserver/package-tree.html |   18 +-
 .../regionserver/querymatcher/package-tree.html |    2 +-
 .../hbase/regionserver/wal/package-tree.html    |    2 +-
 .../hbase/replication/ReplicationPeers.html     |   53 +-
 .../class-use/ReplicationPeerImpl.html          |   49 +
 .../hadoop/hbase/replication/package-use.html   |   11 +-
 ...icationSourceManager.NodeFailoverWorker.html |   40 +-
 ...SourceManager.ReplicationQueueOperation.html |    4 +-
 .../regionserver/ReplicationSourceManager.html  |  118 +-
 .../hbase/security/access/package-tree.html     |    2 +-
 .../hadoop/hbase/security/package-tree.html     |    2 +-
 .../hadoop/hbase/thrift/package-tree.html       |    2 +-
 .../apache/hadoop/hbase/util/package-tree.html  |   10 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/Version.html        |    6 +-
 .../RegionStateStore.RegionStateVisitor.html    |  345 ++--
 .../master/assignment/RegionStateStore.html     |  345 ++--
 .../master/replication/ModifyPeerProcedure.html |  245 +--
 .../hbase/replication/ReplicationPeers.html     |  235 +--
 ...icationSourceManager.NodeFailoverWorker.html | 1630 +++++++++---------
 ...SourceManager.ReplicationQueueOperation.html | 1630 +++++++++---------
 .../regionserver/ReplicationSourceManager.html  | 1630 +++++++++---------
 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/constant-values.html             |    2 +-
 .../hadoop/hbase/backup/package-tree.html       |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   12 +-
 .../hadoop/hbase/procedure/package-tree.html    |    8 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    2 +-
 .../hadoop/hbase/regionserver/package-tree.html |    2 +-
 .../replication/SerialReplicationTestBase.html  |   20 +-
 .../hbase/replication/TestReplicationBase.html  |   12 +-
 .../apache/hadoop/hbase/test/package-tree.html  |    4 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 ...cationTestBase.LocalReplicationEndpoint.html |  265 +--
 .../replication/SerialReplicationTestBase.html  |  265 +--
 .../hbase/replication/TestReplicationBase.html  |  273 +--
 84 files changed, 3852 insertions(+), 3692 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index a84db1f..efd7c86 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index d96157c..d3ad818 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20180426142952+00'00')
-/CreationDate (D:20180426144432+00'00')
+/ModDate (D:20180427142958+00'00')
+/CreationDate (D:20180427144437+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 77262c3..776a977 100644
--- a/book.html
+++ b/book.html
@@ -37824,7 +37824,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-04-26 14:29:52 UTC
+Last updated 2018-04-27 14:29:58 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 07bd47b..f4b2ccb 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 1541eef..4583789 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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" />
@@ -10322,12 +10322,12 @@
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>797</td>
+<td>783</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>3826</td>
+<td>3840</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>misc</td>
@@ -14536,7 +14536,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 26 has parse error. Missed HTML close tag 'arg'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>44</td></tr></table></div>
 <div class="section">
@@ -15172,7 +15172,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 4 has parse error. Missed HTML close tag 'pre'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>59</td></tr></table></div>
 <div class="section">
@@ -16927,7 +16927,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 19 has parse error. Details: no viable alternative at input '&lt;code&gt;\n   *   List&lt;Future&lt;' while parsing HTML_TAG</td>
 <td>167</td></tr></table></div>
 <div class="section">
@@ -19849,7 +19849,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 2 has parse error. Unrecognized error from ANTLR parser: null</td>
 <td>83</td></tr>
 <tr class="a">
@@ -33796,7 +33796,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 37 has parse error. Details: no viable alternative at input '&lt;ColumnFamily,' while parsing HTML_ELEMENT</td>
 <td>29</td></tr></table></div>
 <div class="section">
@@ -50092,7 +50092,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 24 has parse error. Details: no viable alternative at input '&lt;key,' while parsing HTML_ELEMENT</td>
 <td>25</td></tr>
 <tr class="b">
@@ -53680,7 +53680,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 2 has parse error. Unrecognized error from ANTLR parser: null</td>
 <td>587</td></tr>
 <tr class="a">
@@ -66297,7 +66297,7 @@
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>289</td></tr></table></div>
+<td>290</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.RegionStates.java">org/apache/hadoop/hbase/master/assignment/RegionStates.java</h3>
 <table border="0" class="table table-striped">
@@ -73246,7 +73246,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 60 has parse error. Missed HTML close tag 'Comparable'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>29</td></tr>
 <tr class="a">
@@ -77428,7 +77428,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 0 has parse error. Unrecognized error from ANTLR parser: null</td>
 <td>74</td></tr>
 <tr class="a">
@@ -87358,7 +87358,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 33 has parse error. Missed HTML close tag 'number'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>127</td></tr>
 <tr class="b">
@@ -95001,25 +95001,25 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>159</td></tr>
+<td>160</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>160</td></tr>
+<td>161</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>166</td></tr>
+<td>167</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>368</td></tr></table></div>
+<td>369</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.ReplicationThrottler.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationThrottler.java</h3>
 <table border="0" class="table table-striped">
@@ -115909,7 +115909,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 23 has parse error. Details: no viable alternative at input '&lt;expected,' while parsing HTML_ELEMENT</td>
 <td>143</td></tr>
 <tr class="a">
@@ -116113,7 +116113,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 78 has parse error. Details: no viable alternative at input '&lt;Object&gt;, Map&lt;String,' while parsing HTML_TAG</td>
 <td>33</td></tr>
 <tr class="a">
@@ -116713,7 +116713,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 35 has parse error. Missed HTML close tag 'index'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>823</td></tr>
 <tr class="b">
@@ -120526,7 +120526,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 58 has parse error. Details: no viable alternative at input '&lt;byte[' while parsing HTML_ELEMENT</td>
 <td>426</td></tr>
 <tr class="b">
@@ -123367,7 +123367,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 4475b75..866db5b 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index bbb0c57..05c2c0c 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index c94d760..e9c6119 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 86f449f..3fbc3da 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 9f2cccb..00786c7 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index d3df70b..585b4a6 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>"Thu Apr 26 14:39:06 UTC 2018"</code></td>
+<td class="colLast"><code>"Fri Apr 27 14:39:10 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>"d4768114e860eb03418e6b08e5de20950824327e"</code></td>
+<td class="colLast"><code>"e9a278adc617a41ad3eefdd419e7618afee6b2b3"</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>"8854dca29afb389807a3902b26d793b6"</code></td>
+<td class="colLast"><code>"caf1e1906ad0f6f6e7eeda39558516c5"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 61c831a..da96458 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -44352,6 +44352,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html#getPeerBandwidth--">getPeerBandwidth()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationPeers.html#getPeerCache--">getPeerCache()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeers</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/replication/ReplicationPeerConfigUtil.html#getPeerClusterConfiguration-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.replication.ReplicationPeerDescription-">getPeerClusterConfiguration(Configuration, ReplicationPeerDescription)</a></span> - Static method in class org.apache.hadoop.hbase.client.replication.<a href="org/apache/hadoop/hbase/client/replication/ReplicationPeerConfigUtil.html" title="class in org.apache.hadoop.hbase.client.replication">ReplicationPeerConfigUtil</a></dt>
 <dd>
 <div class="block">Returns the configuration needed to talk to the remote slave cluster.</div>
@@ -62493,6 +62495,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/IsolationLevel.html#IsolationLevel-int-">IsolationLevel(int)</a></span> - Constructor for enum org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#isOldPeer-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerImpl-">isOldPeer(String, ReplicationPeerImpl)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.NodeFailoverWorker</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/ImmutableMemStoreLAB.html#isOnHeap--">isOnHeap()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ImmutableMemStoreLAB.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableMemStoreLAB</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MemStoreLAB.html#isOnHeap--">isOnHeap()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MemStoreLAB.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreLAB</a></dt>
@@ -80050,6 +80054,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#peersSelected">peersSelected</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#peersSnapshot">peersSnapshot</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.NodeFailoverWorker</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html#PeerState--">PeerState()</a></span> - Constructor for enum org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html" title="enum in org.apache.hadoop.hbase.replication">ReplicationPeer.PeerState</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html#peerState">peerState</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/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 52c7f71..b385d9a 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -167,9 +167,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.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/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.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/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 5979c8e..92137c6 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -550,24 +550,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/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/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/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/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/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/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/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
 </ul>
 </li>
 </ul>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/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 40422cf..151206a 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -274,10 +274,10 @@
 <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/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/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
 <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/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 1f90dde..928ae20 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -349,9 +349,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html
index 3ee3b05..0be8737 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html
@@ -456,7 +456,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>updateRegionLocation</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.197">updateRegionLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.198">updateRegionLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                   <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>&nbsp;state,
                                   <a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)
                            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>
@@ -472,7 +472,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getOpenSeqNumForParentRegion</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.212">getOpenSeqNumForParentRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.213">getOpenSeqNumForParentRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -486,7 +486,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>splitRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.222">splitRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;parent,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.223">splitRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;parent,
                         <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriA,
                         <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriB,
                         <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
@@ -503,7 +503,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>mergeRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.236">mergeRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;child,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.237">mergeRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;child,
                          <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriA,
                          <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriB,
                          <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
@@ -520,7 +520,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.252">deleteRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.253">deleteRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
                   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>
@@ -534,7 +534,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.256">deleteRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.257">deleteRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -548,7 +548,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hasGlobalReplicationScope</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.263">hasGlobalReplicationScope</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.264">hasGlobalReplicationScope</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -562,7 +562,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hasGlobalReplicationScope</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.267">hasGlobalReplicationScope</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.268">hasGlobalReplicationScope</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)</pre>
 </li>
 </ul>
 <a name="getRegionReplication-org.apache.hadoop.hbase.client.TableDescriptor-">
@@ -571,7 +571,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionReplication</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.271">getRegionReplication</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.272">getRegionReplication</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)</pre>
 </li>
 </ul>
 <a name="getTableDescriptor-org.apache.hadoop.hbase.TableName-">
@@ -580,7 +580,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDescriptor</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.275">getTableDescriptor</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.276">getTableDescriptor</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -594,7 +594,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServer</h4>
-<pre>static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.291">getRegionServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;r,
+<pre>static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.292">getRegionServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;r,
                                   int&nbsp;replicaId)</pre>
 <div class="block">Returns the <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase"><code>ServerName</code></a> from catalog table <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client"><code>Result</code></a>
  where the region is transitioning. It should be the same as
@@ -614,7 +614,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerNameColumn</h4>
-<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.308">getServerNameColumn</a>(int&nbsp;replicaId)</pre>
+<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.309">getServerNameColumn</a>(int&nbsp;replicaId)</pre>
 </li>
 </ul>
 <a name="getRegionState-org.apache.hadoop.hbase.client.Result-int-">
@@ -623,7 +623,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionState</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.325">getRegionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;r,
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.326">getRegionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;r,
                                                int&nbsp;replicaId)</pre>
 <div class="block">Pull the region state from a catalog table <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client"><code>Result</code></a>.</div>
 <dl>
@@ -640,7 +640,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getStateColumn</h4>
-<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.334">getStateColumn</a>(int&nbsp;replicaId)</pre>
+<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#line.335">getStateColumn</a>(int&nbsp;replicaId)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/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 ad40e69..eb945fb 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.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>
+<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>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/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 550d779..e602642 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -208,8 +208,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.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/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
index 9d51c55..d145f61 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
@@ -716,7 +716,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>executeFromState</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.243">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.246">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                       org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;state)
                                                throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
                                                       <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
@@ -743,7 +743,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>rollbackState</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.329">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.332">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                              org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;state)
                       throws <a href="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>
@@ -765,7 +765,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>getState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.340">getState</a>(int&nbsp;stateId)</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.343">getState</a>(int&nbsp;stateId)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">StateMachineProcedure</a></code></span></div>
 <div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
 <dl>
@@ -784,7 +784,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>getStateId</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.345">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;state)</pre>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.348">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;state)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">StateMachineProcedure</a></code></span></div>
 <div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
 <dl>
@@ -803,7 +803,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getInitialState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.350">getInitialState</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.353">getInitialState</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getInitialState--">StateMachineProcedure</a></code></span></div>
 <div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
 <dl>

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


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html
index a48ded5..c282308 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html
@@ -59,834 +59,850 @@
 <span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.replication.ReplicationListener;<a name="line.51"></a>
 <span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.replication.ReplicationPeer;<a name="line.52"></a>
 <span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.replication.ReplicationPeer.PeerState;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.replication.ReplicationPeers;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationQueueInfo;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.replication.ReplicationTracker;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<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> * This class is responsible to manage all the replication sources. There are two classes of<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * sources:<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * &lt;ul&gt;<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * &lt;li&gt;Normal sources are persistent and one per peer cluster&lt;/li&gt;<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * &lt;li&gt;Old sources are recovered from a failed region server and our only goal is to finish<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * replicating the WAL queue it had&lt;/li&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * &lt;/ul&gt;<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * &lt;p&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * When a region server dies, this class uses a watcher to get notified and it tries to grab a lock<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * in order to transfer all the queues in a local old source.<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * &lt;p&gt;<a name="line.78"></a>
-<span class="sourceLineNo">079</span> * Synchronization specification:<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * &lt;ul&gt;<a name="line.80"></a>
-<span class="sourceLineNo">081</span> * &lt;li&gt;No need synchronized on {@link #sources}. {@link #sources} is a ConcurrentHashMap and there<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * is a Lock for peer id in {@link PeerProcedureHandlerImpl}. So there is no race for peer<a name="line.82"></a>
-<span class="sourceLineNo">083</span> * operations.&lt;/li&gt;<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * &lt;li&gt;Need synchronized on {@link #walsById}. There are four methods which modify it,<a name="line.84"></a>
-<span class="sourceLineNo">085</span> * {@link #addPeer(String)}, {@link #removePeer(String)},<a name="line.85"></a>
-<span class="sourceLineNo">086</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and {@link #preLogRoll(Path)}.<a name="line.86"></a>
-<span class="sourceLineNo">087</span> * {@link #walsById} is a ConcurrentHashMap and there is a Lock for peer id in<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * {@link PeerProcedureHandlerImpl}. So there is no race between {@link #addPeer(String)} and<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * {@link #removePeer(String)}. {@link #cleanOldLogs(NavigableSet, String, boolean, String)} is<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * called by {@link ReplicationSourceInterface}. So no race with {@link #addPeer(String)}.<a name="line.90"></a>
-<span class="sourceLineNo">091</span> * {@link #removePeer(String)} will terminate the {@link ReplicationSourceInterface} firstly, then<a name="line.91"></a>
-<span class="sourceLineNo">092</span> * remove the wals from {@link #walsById}. So no race with {@link #removePeer(String)}. The only<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * case need synchronized is {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * {@link #preLogRoll(Path)}.&lt;/li&gt;<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * &lt;li&gt;No need synchronized on {@link #walsByIdRecoveredQueues}. There are three methods which<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * modify it, {@link #removePeer(String)} ,<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()}.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} is called by<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * {@link ReplicationSourceInterface}. {@link #removePeer(String)} will terminate the<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * {@link ReplicationSourceInterface} firstly, then remove the wals from<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * {@link #walsByIdRecoveredQueues}. And {@link ReplicationSourceManager.NodeFailoverWorker#run()}<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * will add the wals to {@link #walsByIdRecoveredQueues} firstly, then start up a<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * {@link ReplicationSourceInterface}. So there is no race here. For<a name="line.104"></a>
-<span class="sourceLineNo">105</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()} and {@link #removePeer(String)}, there<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * is already synchronized on {@link #oldsources}. So no need synchronized on<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * {@link #walsByIdRecoveredQueues}.&lt;/li&gt;<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * &lt;li&gt;Need synchronized on {@link #latestPaths} to avoid the new open source miss new log.&lt;/li&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * &lt;li&gt;Need synchronized on {@link #oldsources} to avoid adding recovered source for the<a name="line.109"></a>
-<span class="sourceLineNo">110</span> * to-be-removed peer.&lt;/li&gt;<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * &lt;/ul&gt;<a name="line.111"></a>
-<span class="sourceLineNo">112</span> */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>@InterfaceAudience.Private<a name="line.113"></a>
-<span class="sourceLineNo">114</span>public class ReplicationSourceManager implements ReplicationListener {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSourceManager.class);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  // all the sources that read this RS's logs and every peer only has one replication source<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private final ConcurrentMap&lt;String, ReplicationSourceInterface&gt; sources;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  // List of all the sources we got from died RSs<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private final List&lt;ReplicationSourceInterface&gt; oldsources;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  private final ReplicationQueueStorage queueStorage;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private final ReplicationTracker replicationTracker;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  private final ReplicationPeers replicationPeers;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  // UUID for this cluster<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private final UUID clusterId;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  // All about stopping<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private final Server server;<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>  // All logs we are currently tracking<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  // Index structure of the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  // For normal replication source, the peer id is same with the queue id<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsById;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  // Logs for recovered sources we are currently tracking<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  // the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  // For recovered source, the queue id's format is peer_id-servername-*<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsByIdRecoveredQueues;<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  private final Configuration conf;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  private final FileSystem fs;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  // The paths to the latest log of each wal group, for new coming peers<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private final Set&lt;Path&gt; latestPaths;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  // Path to the wals directories<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private final Path logDir;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  // Path to the wal archive<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final Path oldLogDir;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final WALFileLengthProvider walFileLengthProvider;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  // The number of ms that we wait before moving znodes, HBASE-3596<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  private final long sleepBeforeFailover;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  // Homemade executer service for replication<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private final ThreadPoolExecutor executor;<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private final boolean replicationForBulkLoadDataEnabled;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.replication.ReplicationPeerImpl;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationPeers;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.ReplicationQueueInfo;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.replication.ReplicationTracker;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.Logger;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.slf4j.LoggerFactory;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>/**<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * This class is responsible to manage all the replication sources. There are two classes of<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * sources:<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * &lt;ul&gt;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * &lt;li&gt;Normal sources are persistent and one per peer cluster&lt;/li&gt;<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * &lt;li&gt;Old sources are recovered from a failed region server and our only goal is to finish<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * replicating the WAL queue it had&lt;/li&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * &lt;/ul&gt;<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * &lt;p&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * When a region server dies, this class uses a watcher to get notified and it tries to grab a lock<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * in order to transfer all the queues in a local old source.<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * &lt;p&gt;<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * Synchronization specification:<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * &lt;ul&gt;<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * &lt;li&gt;No need synchronized on {@link #sources}. {@link #sources} is a ConcurrentHashMap and there<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * is a Lock for peer id in {@link PeerProcedureHandlerImpl}. So there is no race for peer<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * operations.&lt;/li&gt;<a name="line.84"></a>
+<span class="sourceLineNo">085</span> * &lt;li&gt;Need synchronized on {@link #walsById}. There are four methods which modify it,<a name="line.85"></a>
+<span class="sourceLineNo">086</span> * {@link #addPeer(String)}, {@link #removePeer(String)},<a name="line.86"></a>
+<span class="sourceLineNo">087</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and {@link #preLogRoll(Path)}.<a name="line.87"></a>
+<span class="sourceLineNo">088</span> * {@link #walsById} is a ConcurrentHashMap and there is a Lock for peer id in<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * {@link PeerProcedureHandlerImpl}. So there is no race between {@link #addPeer(String)} and<a name="line.89"></a>
+<span class="sourceLineNo">090</span> * {@link #removePeer(String)}. {@link #cleanOldLogs(NavigableSet, String, boolean, String)} is<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * called by {@link ReplicationSourceInterface}. So no race with {@link #addPeer(String)}.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * {@link #removePeer(String)} will terminate the {@link ReplicationSourceInterface} firstly, then<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * remove the wals from {@link #walsById}. So no race with {@link #removePeer(String)}. The only<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * case need synchronized is {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * {@link #preLogRoll(Path)}.&lt;/li&gt;<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * &lt;li&gt;No need synchronized on {@link #walsByIdRecoveredQueues}. There are three methods which<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * modify it, {@link #removePeer(String)} ,<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()}.<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} is called by<a name="line.100"></a>
+<span class="sourceLineNo">101</span> * {@link ReplicationSourceInterface}. {@link #removePeer(String)} will terminate the<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * {@link ReplicationSourceInterface} firstly, then remove the wals from<a name="line.102"></a>
+<span class="sourceLineNo">103</span> * {@link #walsByIdRecoveredQueues}. And {@link ReplicationSourceManager.NodeFailoverWorker#run()}<a name="line.103"></a>
+<span class="sourceLineNo">104</span> * will add the wals to {@link #walsByIdRecoveredQueues} firstly, then start up a<a name="line.104"></a>
+<span class="sourceLineNo">105</span> * {@link ReplicationSourceInterface}. So there is no race here. For<a name="line.105"></a>
+<span class="sourceLineNo">106</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()} and {@link #removePeer(String)}, there<a name="line.106"></a>
+<span class="sourceLineNo">107</span> * is already synchronized on {@link #oldsources}. So no need synchronized on<a name="line.107"></a>
+<span class="sourceLineNo">108</span> * {@link #walsByIdRecoveredQueues}.&lt;/li&gt;<a name="line.108"></a>
+<span class="sourceLineNo">109</span> * &lt;li&gt;Need synchronized on {@link #latestPaths} to avoid the new open source miss new log.&lt;/li&gt;<a name="line.109"></a>
+<span class="sourceLineNo">110</span> * &lt;li&gt;Need synchronized on {@link #oldsources} to avoid adding recovered source for the<a name="line.110"></a>
+<span class="sourceLineNo">111</span> * to-be-removed peer.&lt;/li&gt;<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * &lt;/ul&gt;<a name="line.112"></a>
+<span class="sourceLineNo">113</span> */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>@InterfaceAudience.Private<a name="line.114"></a>
+<span class="sourceLineNo">115</span>public class ReplicationSourceManager implements ReplicationListener {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSourceManager.class);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  // all the sources that read this RS's logs and every peer only has one replication source<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private final ConcurrentMap&lt;String, ReplicationSourceInterface&gt; sources;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  // List of all the sources we got from died RSs<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private final List&lt;ReplicationSourceInterface&gt; oldsources;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  private final ReplicationQueueStorage queueStorage;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private final ReplicationTracker replicationTracker;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private final ReplicationPeers replicationPeers;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  // UUID for this cluster<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  private final UUID clusterId;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  // All about stopping<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  private final Server server;<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  // All logs we are currently tracking<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  // Index structure of the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  // For normal replication source, the peer id is same with the queue id<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsById;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  // Logs for recovered sources we are currently tracking<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  // the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  // For recovered source, the queue id's format is peer_id-servername-*<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsByIdRecoveredQueues;<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  private final Configuration conf;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  private final FileSystem fs;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  // The paths to the latest log of each wal group, for new coming peers<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  private final Set&lt;Path&gt; latestPaths;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  // Path to the wals directories<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  private final Path logDir;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  // Path to the wal archive<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private final Path oldLogDir;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  private final WALFileLengthProvider walFileLengthProvider;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  // The number of ms that we wait before moving znodes, HBASE-3596<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  private final long sleepBeforeFailover;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  // Homemade executer service for replication<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  private final ThreadPoolExecutor executor;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>  private final boolean replicationForBulkLoadDataEnabled;<a name="line.152"></a>
 <span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>  private AtomicLong totalBufferUsed = new AtomicLong();<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>   * Creates a replication manager and sets the watch on all the other registered region servers<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * @param queueStorage the interface for manipulating replication queues<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @param replicationPeers<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * @param replicationTracker<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @param conf the configuration to use<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * @param server the server for this region server<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   * @param fs the file system to use<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * @param logDir the directory that contains all wal directories of live RSs<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * @param oldLogDir the directory where old logs are archived<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * @param clusterId<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  public ReplicationSourceManager(ReplicationQueueStorage queueStorage,<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      ReplicationPeers replicationPeers, ReplicationTracker replicationTracker, Configuration conf,<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      Server server, FileSystem fs, Path logDir, Path oldLogDir, UUID clusterId,<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      WALFileLengthProvider walFileLengthProvider) throws IOException {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    // CopyOnWriteArrayList is thread-safe.<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    // Generally, reading is more than modifying.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    this.sources = new ConcurrentHashMap&lt;&gt;();<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    this.queueStorage = queueStorage;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    this.replicationPeers = replicationPeers;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    this.replicationTracker = replicationTracker;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    this.server = server;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    this.walsById = new ConcurrentHashMap&lt;&gt;();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    this.walsByIdRecoveredQueues = new ConcurrentHashMap&lt;&gt;();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    this.oldsources = new ArrayList&lt;&gt;();<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.conf = conf;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    this.fs = fs;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    this.logDir = logDir;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.oldLogDir = oldLogDir;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.sleepBeforeFailover = conf.getLong("replication.sleep.before.failover", 30000); // 30<a name="line.186"></a>
-<span class="sourceLineNo">187</span>                                                                                         // seconds<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.clusterId = clusterId;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.walFileLengthProvider = walFileLengthProvider;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.replicationTracker.registerListener(this);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    // It's preferable to failover 1 RS at a time, but with good zk servers<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    // more could be processed at the same time.<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    int nbWorkers = conf.getInt("replication.executor.workers", 1);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    // use a short 100ms sleep since this could be done inline with a RS startup<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    // even if we fail, other region servers can take care of it<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    this.executor = new ThreadPoolExecutor(nbWorkers, nbWorkers, 100, TimeUnit.MILLISECONDS,<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        new LinkedBlockingQueue&lt;&gt;());<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    ThreadFactoryBuilder tfb = new ThreadFactoryBuilder();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    tfb.setNameFormat("ReplicationExecutor-%d");<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    tfb.setDaemon(true);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    this.executor.setThreadFactory(tfb.build());<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.latestPaths = new HashSet&lt;Path&gt;();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    replicationForBulkLoadDataEnabled = conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * Adds a normal source per registered peer cluster and tries to process all old region server wal<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * queues<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   * &lt;p&gt;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * The returned future is for adoptAbandonedQueues task.<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  Future&lt;?&gt; init() throws IOException {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    for (String id : this.replicationPeers.getAllPeerIds()) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      addSource(id);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      if (replicationForBulkLoadDataEnabled) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        // Check if peer exists in hfile-refs queue, if not add it. This can happen in the case<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        // when a peer was added before replication for bulk loaded data was enabled.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        throwIOExceptionWhenFail(() -&gt; this.queueStorage.addPeerToHFileRefs(id));<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    return this.executor.submit(this::adoptAbandonedQueues);<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>  private void adoptAbandonedQueues() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    List&lt;ServerName&gt; currentReplicators = null;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    try {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      currentReplicators = queueStorage.getListOfReplicators();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    } catch (ReplicationException e) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      server.abort("Failed to get all replicators", e);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      return;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    if (currentReplicators == null || currentReplicators.isEmpty()) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      return;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    List&lt;ServerName&gt; otherRegionServers = replicationTracker.getListOfRegionServers().stream()<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        .map(ServerName::valueOf).collect(Collectors.toList());<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    LOG.info(<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      "Current list of replicators: " + currentReplicators + " other RSs: " + otherRegionServers);<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    // Look if there's anything to process after a restart<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    for (ServerName rs : currentReplicators) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      if (!otherRegionServers.contains(rs)) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        transferQueues(rs);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>  /**<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * 1. Add peer to replicationPeers 2. Add the normal source and related replication queue 3. Add<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * HFile Refs<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * @param peerId the id of replication peer<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  public void addPeer(String peerId) throws IOException {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    boolean added = false;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    try {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      added = this.replicationPeers.addPeer(peerId);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    } catch (ReplicationException e) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      throw new IOException(e);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    if (added) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      addSource(peerId);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      if (replicationForBulkLoadDataEnabled) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        throwIOExceptionWhenFail(() -&gt; this.queueStorage.addPeerToHFileRefs(peerId));<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * 1. Remove peer for replicationPeers 2. Remove all the recovered sources for the specified id<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * and related replication queues 3. Remove the normal source and related replication queue 4.<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * Remove HFile Refs<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * @param peerId the id of the replication peer<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   */<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  public void removePeer(String peerId) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    replicationPeers.removePeer(peerId);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    String terminateMessage = "Replication stream was removed by a user";<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    List&lt;ReplicationSourceInterface&gt; oldSourcesToDelete = new ArrayList&lt;&gt;();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    // synchronized on oldsources to avoid adding recovered source for the to-be-removed peer<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    // see NodeFailoverWorker.run<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    synchronized (this.oldsources) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      // First close all the recovered sources for this peer<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      for (ReplicationSourceInterface src : oldsources) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        if (peerId.equals(src.getPeerId())) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>          oldSourcesToDelete.add(src);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      for (ReplicationSourceInterface src : oldSourcesToDelete) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        src.terminate(terminateMessage);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        removeRecoveredSource(src);<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>    LOG.info(<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      "Number of deleted recovered sources for " + peerId + ": " + oldSourcesToDelete.size());<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    // Now close the normal source for this peer<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    ReplicationSourceInterface srcToRemove = this.sources.get(peerId);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    if (srcToRemove != null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      srcToRemove.terminate(terminateMessage);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      removeSource(srcToRemove);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    } else {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      // This only happened in unit test TestReplicationSourceManager#testPeerRemovalCleanup<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      // Delete queue from storage and memory and queue id is same with peer id for normal<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      // source<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      deleteQueue(peerId);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      this.walsById.remove(peerId);<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>    // Remove HFile Refs<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    abortWhenFail(() -&gt; this.queueStorage.removePeerFromHFileRefs(peerId));<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>   * Factory method to create a replication source<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * @param queueId the id of the replication queue<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * @return the created source<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private ReplicationSourceInterface createSource(String queueId, ReplicationPeer replicationPeer)<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      throws IOException {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    ReplicationSourceInterface src = ReplicationSourceFactory.create(conf, queueId);<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    MetricsSource metrics = new MetricsSource(queueId);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    // init replication source<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    src.init(conf, fs, this, queueStorage, replicationPeer, server, queueId, clusterId,<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      walFileLengthProvider, metrics);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    return src;<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>  /**<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * Add a normal source for the given peer on this region server. Meanwhile, add new replication<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * queue to storage. For the newly added peer, we only need to enqueue the latest log of each wal<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * group and do replication<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @param peerId the id of the replication peer<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * @return the source that was created<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   */<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  @VisibleForTesting<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  ReplicationSourceInterface addSource(String peerId) throws IOException {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    ReplicationPeer peer = replicationPeers.getPeer(peerId);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    ReplicationSourceInterface src = createSource(peerId, peer);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    // synchronized on latestPaths to avoid missing the new log<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    synchronized (this.latestPaths) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.sources.put(peerId, src);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      Map&lt;String, NavigableSet&lt;String&gt;&gt; walsByGroup = new HashMap&lt;&gt;();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.walsById.put(peerId, walsByGroup);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      // Add the latest wal to that source's queue<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      if (this.latestPaths.size() &gt; 0) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        for (Path logPath : latestPaths) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          String name = logPath.getName();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>          String walPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(name);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          NavigableSet&lt;String&gt; logs = new TreeSet&lt;&gt;();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          logs.add(name);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>          walsByGroup.put(walPrefix, logs);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>          // Abort RS and throw exception to make add peer failed<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          abortAndThrowIOExceptionWhenFail(<a name="line.353"></a>
-<span class="sourceLineNo">354</span>            () -&gt; this.queueStorage.addWAL(server.getServerName(), peerId, name));<a name="line.354"></a>
-<span class="sourceLineNo">355</span>          src.enqueueLog(logPath);<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">359</span>    src.startup();<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return src;<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>   * Close the previous replication sources of this peer id and open new sources to trigger the new<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * replication state changes or new replication config changes. Here we don't need to change<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * replication queue storage and only to enqueue all logs to the new replication source<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * @param peerId the id of the replication peer<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @throws IOException<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   */<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  public void refreshSources(String peerId) throws IOException {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    String terminateMessage = "Peer " + peerId +<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      " state or config changed. Will close the previous replication source and open a new one";<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    ReplicationPeer peer = replicationPeers.getPeer(peerId);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    ReplicationSourceInterface src = createSource(peerId, peer);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    // synchronized on latestPaths to avoid missing the new log<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    synchronized (this.latestPaths) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      ReplicationSourceInterface toRemove = this.sources.put(peerId, src);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      if (toRemove != null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        LOG.info("Terminate replication source for " + toRemove.getPeerId());<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        toRemove.terminate(terminateMessage);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      for (SortedSet&lt;String&gt; walsByGroup : walsById.get(peerId).values()) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        walsByGroup.forEach(wal -&gt; src.enqueueLog(new Path(this.logDir, wal)));<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    LOG.info("Startup replication source for " + src.getPeerId());<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    src.startup();<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>    List&lt;ReplicationSourceInterface&gt; toStartup = new ArrayList&lt;&gt;();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    // synchronized on oldsources to avoid race with NodeFailoverWorker<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    synchronized (this.oldsources) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      List&lt;String&gt; previousQueueIds = new ArrayList&lt;&gt;();<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      for (ReplicationSourceInterface oldSource : this.oldsources) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        if (oldSource.getPeerId().equals(peerId)) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          previousQueueIds.add(oldSource.getQueueId());<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          oldSource.terminate(terminateMessage);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          this.oldsources.remove(oldSource);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      for (String queueId : previousQueueIds) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        ReplicationSourceInterface replicationSource = createSource(queueId, peer);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        this.oldsources.add(replicationSource);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        for (SortedSet&lt;String&gt; walsByGroup : walsByIdRecoveredQueues.get(queueId).values()) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          walsByGroup.forEach(wal -&gt; src.enqueueLog(new Path(wal)));<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        toStartup.add(replicationSource);<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>    for (ReplicationSourceInterface replicationSource : toStartup) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      replicationSource.startup();<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Clear the metrics and related replication queue of the specified old source<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @param src source to clear<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  void removeRecoveredSource(ReplicationSourceInterface src) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    LOG.info("Done with the recovered queue " + src.getQueueId());<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    src.getSourceMetrics().clear();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    this.oldsources.remove(src);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    // Delete queue from storage and memory<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    deleteQueue(src.getQueueId());<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    this.walsByIdRecoveredQueues.remove(src.getQueueId());<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  }<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>  /**<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   * Clear the metrics and related replication queue of the specified old source<a name="line.428"></a>
-<span class="sourceLineNo">429</span>   * @param src source to clear<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
-<span class="sourceLineNo">431</span>  void removeSource(ReplicationSourceInterface src) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    LOG.info("Done with the queue " + src.getQueueId());<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    src.getSourceMetrics().clear();<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    this.sources.remove(src.getPeerId());<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    // Delete queue from storage and memory<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    deleteQueue(src.getQueueId());<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    this.walsById.remove(src.getQueueId());<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  /**<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * Delete a complete queue of wals associated with a replication source<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * @param queueId the id of replication queue to delete<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   */<a name="line.443"></a>
-<span class="sourceLineNo">444</span>  private void deleteQueue(String queueId) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    abortWhenFail(() -&gt; this.queueStorage.removeQueue(server.getServerName(), queueId));<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>  @FunctionalInterface<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private interface ReplicationQueueOperation {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    void exec() throws ReplicationException;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>  private void abortWhenFail(ReplicationQueueOperation op) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    try {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      op.exec();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    } catch (ReplicationException e) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      server.abort("Failed to operate on replication queue", e);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    }<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>  private void throwIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    try {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      op.exec();<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    } catch (ReplicationException e) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      throw new IOException(e);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  private void abortAndThrowIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    try {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      op.exec();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    } catch (ReplicationException e) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      server.abort("Failed to operate on replication queue", e);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      throw new IOException(e);<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><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  /**<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * This method will log the current position to storage. And also clean old logs from the<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   * replication queue.<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @param queueId id of the replication queue<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param queueRecovered indicates if this queue comes from another region server<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @param entryBatch the wal entry batch we just shipped<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  public void logPositionAndCleanOldLogs(String queueId, boolean queueRecovered,<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      WALEntryBatch entryBatch) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    String fileName = entryBatch.getLastWalPath().getName();<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    abortWhenFail(() -&gt; this.queueStorage.setWALPosition(server.getServerName(), queueId, fileName,<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      entryBatch.getLastWalPosition(), entryBatch.getLastSeqIds()));<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    cleanOldLogs(fileName, entryBatch.isEndOfFile(), queueId, queueRecovered);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>  }<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>  /**<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * Cleans a log file and all older logs from replication queue. Called when we are sure that a log<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * file is closed and has no more entries.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   * @param log Path to the log<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * @param inclusive whether we should also remove the given log file<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   * @param queueId id of the replication queue<a name="line.498"></a>
-<span class="sourceLineNo">499</span>   * @param queueRecovered Whether this is a recovered queue<a name="line.499"></a>
-<span class="sourceLineNo">500</span>   */<a name="line.500"></a>
-<span class="sourceLineNo">501</span>  @VisibleForTesting<a name="line.501"></a>
-<span class="sourceLineNo">502</span>  void cleanOldLogs(String log, boolean inclusive, String queueId, boolean queueRecovered) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(log);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    if (queueRecovered) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      NavigableSet&lt;String&gt; wals = walsByIdRecoveredQueues.get(queueId).get(logPrefix);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      if (wals != null) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        cleanOldLogs(wals, log, inclusive, queueId);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      }<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    } else {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      // synchronized on walsById to avoid race with preLogRoll<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      synchronized (this.walsById) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        NavigableSet&lt;String&gt; wals = walsById.get(queueId).get(logPrefix);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        if (wals != null) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          cleanOldLogs(wals, log, inclusive, queueId);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  }<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>  private void cleanOldLogs(NavigableSet&lt;String&gt; wals, String key, boolean inclusive, String id) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    NavigableSet&lt;String&gt; walSet = wals.headSet(key, inclusive);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    if (walSet.isEmpty()) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      return;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    LOG.debug("Removing {} logs in the list: {}", walSet.size(), walSet);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    for (String wal : walSet) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      abortWhenFail(() -&gt; this.queueStorage.removeWAL(server.getServerName(), id, wal));<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    walSet.clear();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>  }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>  // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  @VisibleForTesting<a name="line.533"></a>
-<span class="sourceLineNo">534</span>  public void preLogRoll(Path newLog) throws IOException {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    String logName = newLog.getName();<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(logName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    // synchronized on latestPaths to avoid the new open source miss the new log<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    synchronized (this.latestPaths) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      // Add log to queue storage<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        // If record log to queue storage failed, abort RS and throw exception to make log roll<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        // failed<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        abortAndThrowIOExceptionWhenFail(<a name="line.543"></a>
-<span class="sourceLineNo">544</span>          () -&gt; this.queueStorage.addWAL(server.getServerName(), source.getQueueId(), logName));<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span><a name="line.546"></a>
-<span class="sourceLineNo">547</span>      // synchronized on walsById to avoid race with cleanOldLogs<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      synchronized (this.walsById) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>        // Update walsById map<a name="line.549"></a>
-<span class="sourceLineNo">550</span>        for (Map.Entry&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; entry : this.walsById<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          .entrySet()) {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>          String peerId = entry.getKey();<a name="line.552"></a>
-<span class="sourceLineNo">553</span>          Map&lt;String, NavigableSet&lt;String&gt;&gt; walsByPrefix = entry.getValue();<a name="line.553"></a>
-<span class="sourceLineNo">554</span>          boolean existingPrefix = false;<a name="line.554"></a>
-<span class="sourceLineNo">555</span>          for (Map.Entry&lt;String, NavigableSet&lt;String&gt;&gt; walsEntry : walsByPrefix.entrySet()) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>            SortedSet&lt;String&gt; wals = walsEntry.getValue();<a name="line.556"></a>
-<span class="sourceLineNo">557</span>            if (this.sources.isEmpty()) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>              // If there's no slaves, don't need to keep the old wals since<a name="line.558"></a>
-<span class="sourceLineNo">559</span>              // we only consider the last one when a new slave comes in<a name="line.559"></a>
-<span class="sourceLineNo">560</span>              wals.clear();<a name="line.560"></a>
-<span class="sourceLineNo">561</span>            }<a name="line.561"></a>
-<span class="sourceLineNo">562</span>            if (logPrefix.equals(walsEntry.getKey())) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>              wals.add(logName);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>              existingPrefix = true;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>            }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>          }<a name="line.566"></a>
-<span class="sourceLineNo">567</span>          if (!existingPrefix) {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>            // The new log belongs to a new group, add it into this peer<a name="line.568"></a>
-<span class="sourceLineNo">569</span>            LOG.debug("Start tracking logs for wal group {} for peer {}", logPrefix, peerId);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>            NavigableSet&lt;String&gt; wals = new TreeSet&lt;&gt;();<a name="line.570"></a>
-<span class="sourceLineNo">571</span>            wals.add(logName);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>            walsByPrefix.put(logPrefix, wals);<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          }<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        }<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>      // Add to latestPaths<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      Iterator&lt;Path&gt; iterator = latestPaths.iterator();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      while (iterator.hasNext()) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>        Path path = iterator.next();<a name="line.580"></a>
-<span class="sourceLineNo">581</span>        if (path.getName().contains(logPrefix)) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>          iterator.remove();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>          break;<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>      this.latestPaths.add(newLog);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    }<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  @VisibleForTesting<a name="line.591"></a>
-<span class="sourceLineNo">592</span>  public void postLogRoll(Path newLog) throws IOException {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    // This only updates the sources we own, not the recovered ones<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      source.enqueueLog(newLog);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>  @Override<a name="line.599"></a>
-<span class="sourceLineNo">600</span>  public void regionServerRemoved(String regionserver) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    transferQueues(ServerName.valueOf(regionserver));<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>   * Transfer all the queues of the specified to this region server. First it tries to grab a lock<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   * and if it works it will move the old queues and finally will delete the old queues.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   * &lt;p&gt;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>   * It creates one old source for any type of source of the old rs.<a name="line.608"></a>
-<span class="sourceLineNo">609</span>   */<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  private void transferQueues(ServerName deadRS) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    if (server.getServerName().equals(deadRS)) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      // it's just us, give up<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      return;<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    NodeFailoverWorker transfer = new NodeFailoverWorker(deadRS);<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    try {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      this.executor.execute(transfer);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    } catch (RejectedExecutionException ex) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      LOG.info("Cancelling the transfer of " + deadRS + " because of " + ex.getMessage());<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><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * Class responsible to setup new ReplicationSources to take care of the queues from dead region<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * servers.<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   */<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  class NodeFailoverWorker extends Thread {<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span>    private final ServerName deadRS;<a name="line.629"></a>
-<span class="sourceLineNo">630</span><a name="line.630"></a>
-<span class="sourceLineNo">631</span>    @VisibleForTesting<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    public NodeFailoverWorker(ServerName deadRS) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      super("Failover-for-" + deadRS);<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      this.deadRS = deadRS;<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>    @Override<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    public void run() {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      // Wait a bit before transferring the queues, we may be shutting down.<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      // This sleep may not be enough in some cases.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      try {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>        Thread.sleep(sleepBeforeFailover +<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          (long) (ThreadLocalRandom.current().nextFloat() * sleepBeforeFailover));<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      } catch (InterruptedException e) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        Thread.currentThread().interrupt();<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      // We try to lock that rs' queue directory<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      if (server.isStopped()) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        LOG.info("Not transferring queue since we are shutting down");<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        return;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      }<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      Map&lt;String, Set&lt;String&gt;&gt; newQueues = new HashMap&lt;&gt;();<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      try {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        List&lt;String&gt; queues = queueStorage.getAllQueues(deadRS);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>        while (!queues.isEmpty()) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>          Pair&lt;String, SortedSet&lt;String&gt;&gt; peer = queueStorage.claimQueue(deadRS,<a name="line.657"></a>
-<span class="sourceLineNo">658</span>            queues.get(ThreadLocalRandom.current().nextInt(queues.size())), server.getServerName());<a name="line.658"></a>
-<span class="sourceLineNo">659</span>          long sleep = sleepBeforeFailover / 2;<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          if (!peer.getSecond().isEmpty()) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>            newQueues.put(peer.getFirst(), peer.getSecond());<a name="line.661"></a>
-<span class="sourceLineNo">662</span>            sleep = sleepBeforeFailover;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>          }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          try {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>            Thread.sleep(sleep);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          } catch (InterruptedException e) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>            LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.667"></a>
-<span class="sourceLineNo">668</span>            Thread.currentThread().interrupt();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>          queues = queueStorage.getAllQueues(deadRS);<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        }<a name="line.671"></a>
-<span class="sourceLineNo">672</span>        if (queues.isEmpty()) {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          queueStorage.removeReplicatorIfQueueIsEmpty(deadRS);<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      } catch (ReplicationException e) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>        server.abort("Failed to claim queue from dead regionserver", e);<a name="line.676"></a>
-<span class="sourceLineNo">677</span>        return;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      }<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      // Copying over the failed queue is completed.<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      if (newQueues.isEmpty()) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        // We either didn't get the lock or the failed region server didn't have any outstanding<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        // WALs to replicate, so we are done.<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        return;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      }<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>      for (Map.Entry&lt;String, Set&lt;String&gt;&gt; entry : newQueues.entrySet()) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>        String queueId = entry.getKey();<a name="line.687"></a>
-<span class="sourceLineNo">688</span>        Set&lt;String&gt; walsSet = entry.getValue();<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        try {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>          // there is not an actual peer defined corresponding to peerId for the failover.<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          ReplicationQueueInfo replicationQueueInfo = new ReplicationQueueInfo(queueId);<a name="line.691"></a>
-<span class="sourceLineNo">692</span>          String actualPeerId = replicationQueueInfo.getPeerId();<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>          ReplicationPeer peer = replicationPeers.getPeer(actualPeerId);<a name="line.694"></a>
-<span class="sourceLineNo">695</span>          if (peer == null) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>            LOG.warn("Skipping failover for peer:" + actualPeerId + " of node " + deadRS +<a name="line.696"></a>
-<span class="sourceLineNo">697</span>              ", peer is null");<a name="line.697"></a>
-<span class="sourceLineNo">698</span>            abortWhenFail(() -&gt; queueStorage.removeQueue(server.getServerName(), queueId));<a name="line.698"></a>
-<span class="sourceLineNo">699</span>            continue;<a name="line.699"></a>
-<span class="sourceLineNo">700</span>          }<a name="line.700"></a>
-<span class="sourceLineNo">701</span>          if (server instanceof ReplicationSyncUp.DummyServer<a name="line.701"></a>
-<span class="sourceLineNo">702</span>              &amp;&amp; peer.getPeerState().equals(PeerState.DISABLED)) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>            LOG.warn("Peer {} is disbaled. ReplicationSyncUp tool will skip "<a name="line.703"></a>
-<span class="sourceLineNo">704</span>                + "replicating data to this peer.",<a name="line.704"></a>
-<span class="sourceLineNo">705</span>              actualPeerId);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>            continue;<a name="line.706"></a>
-<span class="sourceLineNo">707</span>          }<a name="line.707"></a>
-<span class="sourceLineNo">708</span>          // track sources in walsByIdRecoveredQueues<a name="line.708"></a>
-<span class="sourceLineNo">709</span>          Map&lt;String, NavigableSet&lt;String&gt;&gt; walsByGroup = new HashMap&lt;&gt;();<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          walsByIdRecoveredQueues.put(queueId, walsByGroup);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>          for (String wal : walsSet) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>            String walPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(wal);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>            NavigableSet&lt;String&gt; wals = walsByGroup.get(walPrefix);<a name="line.713"></a>
-<span class="sourceLineNo">714</span>            if (wals == null) {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>              wals = new TreeSet&lt;&gt;();<a name="line.715"></a>
-<span class="sourceLineNo">716</span>              walsByGroup.put(walPrefix, wals);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>            }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>            wals.add(wal);<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>          ReplicationSourceInterface src = createSource(queueId, peer);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>          // synchronized on oldsources to avoid adding recovered source for the to-be-removed peer<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          synchronized (oldsources) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>            if (!replicationPeers.getAllPeerIds().contains(src.getPeerId())) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>              src.terminate("Recovered queue doesn't belong to any current peer");<a name="line.725"></a>
-<span class="sourceLineNo">726</span>              removeRecoveredSource(src);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>              continue;<a name="line.727"></a>
-<span class="sourceLineNo">728</span>            }<a name="line.728"></a>
-<span class="sourceLineNo">729</span>            oldsources.add(src);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>            for (String wal : walsSet) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span>              src.enqueueLog(new Path(oldLogDir, wal));<a name="line.731"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  private AtomicLong totalBufferUsed = new AtomicLong();<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>   * Creates a replication manager and sets the watch on all the other registered region servers<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * @param queueStorage the interface for manipulating replication queues<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * @param replicationPeers<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * @param replicationTracker<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * @param conf the configuration to use<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * @param server the server for this region server<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * @param fs the file system to use<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @param logDir the directory that contains all wal directories of live RSs<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * @param oldLogDir the directory where old logs are archived<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * @param clusterId<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   */<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public ReplicationSourceManager(ReplicationQueueStorage queueStorage,<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      ReplicationPeers replicationPeers, ReplicationTracker replicationTracker, Configuration conf,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      Server server, FileSystem fs, Path logDir, Path oldLogDir, UUID clusterId,<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      WALFileLengthProvider walFileLengthProvider) throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    // CopyOnWriteArrayList is thread-safe.<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    // Generally, reading is more than modifying.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    this.sources = new ConcurrentHashMap&lt;&gt;();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    this.queueStorage = queueStorage;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    this.replicationPeers = replicationPeers;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    this.replicationTracker = replicationTracker;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    this.server = server;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    this.walsById = new ConcurrentHashMap&lt;&gt;();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    this.walsByIdRecoveredQueues = new ConcurrentHashMap&lt;&gt;();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    this.oldsources = new ArrayList&lt;&gt;();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    this.conf = conf;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    this.fs = fs;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    this.logDir = logDir;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.oldLogDir = oldLogDir;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    this.sleepBeforeFailover = conf.getLong("replication.sleep.before.failover", 30000); // 30<a name="line.187"></a>
+<span class="sourceLineNo">188</span>                                                                                         // seconds<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.clusterId = clusterId;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.walFileLengthProvider = walFileLengthProvider;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.replicationTracker.registerListener(this);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    // It's preferable to failover 1 RS at a time, but with good zk servers<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // more could be processed at the same time.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    int nbWorkers = conf.getInt("replication.executor.workers", 1);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    // use a short 100ms sleep since this could be done inline with a RS startup<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // even if we fail, other region servers can take care of it<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    this.executor = new ThreadPoolExecutor(nbWorkers, nbWorkers, 100, TimeUnit.MILLISECONDS,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        new LinkedBlockingQueue&lt;&gt;());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    ThreadFactoryBuilder tfb = new ThreadFactoryBuilder();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    tfb.setNameFormat("ReplicationExecutor-%d");<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    tfb.setDaemon(true);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    this.executor.setThreadFactory(tfb.build());<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.latestPaths = new HashSet&lt;Path&gt;();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    replicationForBulkLoadDataEnabled = conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.205"></a>
+<span class="sourceLine

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/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 9410ae3..31f4304 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -441,19 +441,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/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/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/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/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/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/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/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/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 12c2675..5942b5c 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/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/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/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
-<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/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/d0a21080/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 9c12e62..d4f46db 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -230,12 +230,12 @@
 <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/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/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/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/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/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/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/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/d0a21080/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 c9a863c..fbbb0b6 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -706,18 +706,18 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/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/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
 </ul>
 </li>
 </ul>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/org/apache/hadoop/hbase/replication/ReplicationPeers.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/ReplicationPeers.html b/devapidocs/org/apache/hadoop/hbase/replication/ReplicationPeers.html
index d82cf85..7b5fef7 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/ReplicationPeers.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/ReplicationPeers.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.36">ReplicationPeers</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.37">ReplicationPeers</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">This provides an class for maintaining a set of peer clusters. These peers are remote slave
  clusters that data is replicated to.</div>
@@ -207,22 +207,26 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </td>
 </tr>
 <tr id="i5" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="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="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html#getPeerCache--">getPeerCache</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i6" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationPeerStorage</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html#getPeerStorage--">getPeerStorage</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html#init--">init</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html#refreshPeerConfig-java.lang.String-">refreshPeerConfig</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId)</code>&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html" title="enum in org.apache.hadoop.hbase.replication">ReplicationPeer.PeerState</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html#refreshPeerState-java.lang.String-">refreshPeerState</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId)</code>&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html#removePeer-java.lang.String-">removePeer</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId)</code>&nbsp;</td>
 </tr>
@@ -254,7 +258,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.38">conf</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.39">conf</a></pre>
 </li>
 </ul>
 <a name="peerCache">
@@ -263,7 +267,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>peerCache</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.41">peerCache</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.42">peerCache</a></pre>
 </li>
 </ul>
 <a name="peerStorage">
@@ -272,7 +276,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>peerStorage</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationPeerStorage</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.42">peerStorage</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationPeerStorage</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.43">peerStorage</a></pre>
 </li>
 </ul>
 </li>
@@ -289,7 +293,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ReplicationPeers</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.44">ReplicationPeers</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zookeeper,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.45">ReplicationPeers</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zookeeper,
                  org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
@@ -307,7 +311,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getConf</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.50">getConf</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.51">getConf</a>()</pre>
 </li>
 </ul>
 <a name="init--">
@@ -316,7 +320,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.54">init</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.55">init</a>()
           throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -330,7 +334,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getPeerStorage</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationPeerStorage</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.62">getPeerStorage</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationPeerStorage</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.63">getPeerStorage</a>()</pre>
 </li>
 </ul>
 <a name="addPeer-java.lang.String-">
@@ -339,7 +343,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addPeer</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.73">addPeer</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;peerId)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.74">addPeer</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;peerId)
                 throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block">Method called after a peer has been connected. It will create a ReplicationPeer to track the
  newly connected cluster.</div>
@@ -359,7 +363,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removePeer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.82">removePeer</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;peerId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.83">removePeer</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;peerId)</pre>
 </li>
 </ul>
 <a name="getPeer-java.lang.String-">
@@ -368,7 +372,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getPeer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.93">getPeer</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;peerId)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.94">getPeer</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;peerId)</pre>
 <div class="block">Returns the ReplicationPeerImpl for the specified cached peer. This ReplicationPeer will
  continue to track changes to the Peer's state and config. This method returns null if no peer
  has been cached with the given peerId.</div>
@@ -386,7 +390,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllPeerIds</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.102">getAllPeerIds</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.103">getAllPeerIds</a>()</pre>
 <div class="block">Returns the set of peerIds of the clusters that have been connected and have an underlying
  ReplicationPeer.</div>
 <dl>
@@ -395,13 +399,22 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="getPeerCache--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getPeerCache</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="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="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.107">getPeerCache</a>()</pre>
+</li>
+</ul>
 <a name="refreshPeerState-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshPeerState</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html" title="enum in org.apache.hadoop.hbase.replication">ReplicationPeer.PeerState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.106">refreshPeerState</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;peerId)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html" title="enum in org.apache.hadoop.hbase.replication">ReplicationPeer.PeerState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.111">refreshPeerState</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;peerId)
                                            throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -415,7 +428,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshPeerConfig</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.115">refreshPeerConfig</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;peerId)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.120">refreshPeerConfig</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;peerId)
                                         throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -429,7 +442,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createPeer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.129">createPeer</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;peerId)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationPeers.html#line.134">createPeer</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;peerId)
                                 throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block">Helper method to connect to a peer</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationPeerImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationPeerImpl.html b/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationPeerImpl.html
index 1e52904..bbaafdf 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationPeerImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationPeerImpl.html
@@ -88,6 +88,10 @@
 <div class="block">Multi Cluster Replication</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication.regionserver">org.apache.hadoop.hbase.replication.regionserver</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -131,6 +135,51 @@
 </tr>
 </tbody>
 </table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a> that return types with arguments of type <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="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="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">ReplicationPeers.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html#getPeerCache--">getPeerCache</a></span>()</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.replication.regionserver">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a> in <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a> with type parameters of type <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a></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>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">ReplicationSourceManager.NodeFailoverWorker.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#peersSnapshot">peersSnapshot</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">ReplicationSourceManager.NodeFailoverWorker.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#isOldPeer-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerImpl-">isOldPeer</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId,
+         <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>&nbsp;newPeerRef)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/org/apache/hadoop/hbase/replication/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/package-use.html b/devapidocs/org/apache/hadoop/hbase/replication/package-use.html
index ca0c7c1..64f8f20 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/package-use.html
@@ -551,26 +551,29 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/replication/class-use/ReplicationPeerImpl.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationPeerImpl</a>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/replication/class-use/ReplicationPeers.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationPeers</a>
 <div class="block">This provides an class for maintaining a set of peer clusters.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/replication/class-use/ReplicationQueueInfo.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationQueueInfo</a>
 <div class="block">This class is responsible for the parsing logic for a queue id representing a queue.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/replication/class-use/ReplicationQueueStorage.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationQueueStorage</a>
 <div class="block">Perform read/write to the replication queue storage.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/replication/class-use/ReplicationTracker.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationTracker</a>
 <div class="block">This is the interface for a Replication Tracker.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/replication/class-use/WALEntryFilter.html#org.apache.hadoop.hbase.replication.regionserver">WALEntryFilter</a>
 <div class="block">A Filter for WAL entries before being sent over to replication.</div>
 </td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
index 9dbbf67..a3f0da3 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10};
+var methods = {"i0":10,"i1":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.627">ReplicationSourceManager.NodeFailoverWorker</a>
+<pre>class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.628">ReplicationSourceManager.NodeFailoverWorker</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">Class responsible to setup new ReplicationSources to take care of the queues from dead region
  servers.</div>
@@ -163,6 +163,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#deadRS">deadRS</a></span></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#peersSnapshot">peersSnapshot</a></span></code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.java.lang.Thread">
@@ -203,6 +207,11 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" 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/ReplicationSourceManager.NodeFailoverWorker.html#isOldPeer-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerImpl-">isOldPeer</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId,
+         <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>&nbsp;newPeerRef)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#run--">run</a></span>()</code>&nbsp;</td>
 </tr>
@@ -238,10 +247,19 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <a name="deadRS">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>deadRS</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.629">deadRS</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.630">deadRS</a></pre>
+</li>
+</ul>
+<a name="peersSnapshot">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>peersSnapshot</h4>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="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="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.638">peersSnapshot</a></pre>
 </li>
 </ul>
 </li>
@@ -258,7 +276,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NodeFailoverWorker</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.632">NodeFailoverWorker</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;deadRS)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.641">NodeFailoverWorker</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;deadRS)</pre>
 </li>
 </ul>
 </li>
@@ -269,13 +287,23 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="isOldPeer-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerImpl-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isOldPeer</h4>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.647">isOldPeer</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;peerId,
+                          <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>&nbsp;newPeerRef)</pre>
+</li>
+</ul>
 <a name="run--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.638">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.653">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/d0a21080/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html
index 52139cd..db0500a 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html?is-external=true" title="class or interface in java.lang">@FunctionalInterface</a>
-private static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.449">ReplicationSourceManager.ReplicationQueueOperation</a></pre>
+private static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.450">ReplicationSourceManager.ReplicationQueueOperation</a></pre>
 </li>
 </ul>
 </div>
@@ -154,7 +154,7 @@ private static interface <a href="../../../../../../src-html/org/apache/hadoop/h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>exec</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html#line.450">exec</a>()
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html#line.451">exec</a>()
    throws <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index ade3565..762360b 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 39284b6..feafe4d 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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" />
@@ -409,7 +409,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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index ef892de..16fdf08 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index 6b24643..17d8fd5 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 0837b42..5fc0d9b 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 49dc841..19a56b0 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index a7f51ac..3639217 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index eedd2b0..5066e10 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index 0ed9360..1a50df2 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 6073df6..501f8aa 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 4fe5129..ae981fd 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index 1b7fc3e..83bcadd 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 449cdba..9e93653 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 7f8d3c6..867705e 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 2f36c15..bf635df 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index dd1b264..bdac8cd 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 808cb8b..38c7b0f 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 0c4a98a..d8061c4 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 5d9508a..9a17777 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index e3f091e..c170104 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index c6cc0f6..23310ac 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="20180426" />
+    <meta name="Date-Revision-yyyymmdd" content="20180427" />
     <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-04-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/testdevapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/constant-values.html b/testdevapidocs/constant-values.html
index 8608019..9d8cf5c 100644
--- a/testdevapidocs/constant-values.html
+++ b/testdevapidocs/constant-values.html
@@ -10706,7 +10706,7 @@
 <!--   -->
 </a><code>protected&nbsp;static&nbsp;final&nbsp;int</code></td>
 <td><code><a href="org/apache/hadoop/hbase/replication/TestReplicationBase.html#NB_RETRIES">NB_RETRIES</a></code></td>
-<td class="colLast"><code>10</code></td>
+<td class="colLast"><code>50</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.replication.TestReplicationBase.NB_ROWS_IN_BATCH">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index e159b3f..3168ee3 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -145,8 +145,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.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDeleteWithFailures.Failure.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupDeleteWithFailures.Failure</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestIncrementalBackupMergeWithFailures.FailurePhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDeleteWithFailures.Failure.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupDeleteWithFailures.Failure</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/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 80d399d..cc7122b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -569,15 +569,15 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/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 fbff915..19002f2 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/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/testdevapidocs/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html b/testdevapidocs/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html
index 61809c0..c9a45cd 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html
@@ -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>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.131">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.132">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>
@@ -428,7 +428,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/replication/SerialReplicationTestBase.html#line.136">tearDown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.137">tearDown</a>()
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -442,7 +442,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>moveRegion</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.148">moveRegion</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;region,
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.149">moveRegion</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;region,
                                  org.apache.hadoop.hbase.regionserver.HRegionServer&nbsp;rs)
                           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>
@@ -457,7 +457,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>rollAllWALs</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.165">rollAllWALs</a>()
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.166">rollAllWALs</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>
@@ -471,7 +471,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupWALWriter</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.184">setupWALWriter</a>()
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.185">setupWALWriter</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>
@@ -485,7 +485,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>waitUntilReplicationDone</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.189">waitUntilReplicationDone</a>(int&nbsp;expectedEntries)
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.190">waitUntilReplicationDone</a>(int&nbsp;expectedEntries)
                                        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>
@@ -499,7 +499,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>enablePeerAndWaitUntilReplicationDone</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.212">enablePeerAndWaitUntilReplicationDone</a>(int&nbsp;expectedEntries)
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.213">enablePeerAndWaitUntilReplicationDone</a>(int&nbsp;expectedEntries)
                                                     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>
@@ -513,7 +513,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addPeer</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.217">addPeer</a>(boolean&nbsp;enabled)
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.218">addPeer</a>(boolean&nbsp;enabled)
                       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>
@@ -527,7 +527,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkOrder</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.225">checkOrder</a>(int&nbsp;expectedEntries)
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.226">checkOrder</a>(int&nbsp;expectedEntries)
                          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>
@@ -541,7 +541,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>protected final&nbsp;org.apache.hadoop.hbase.TableName&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.245">createTable</a>()
+<pre>protected final&nbsp;org.apache.hadoop.hbase.TableName&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#line.246">createTable</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></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationBase.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationBase.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationBase.html
index fa615cb..4b11ee0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationBase.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationBase.html
@@ -645,7 +645,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>peerExist</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.240">peerExist</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;peerId)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.241">peerExist</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;peerId)
                    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>
@@ -659,7 +659,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setUpBase</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.245">setUpBase</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.246">setUpBase</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>
@@ -673,7 +673,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDownBase</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.254">tearDownBase</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.255">tearDownBase</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>
@@ -687,7 +687,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>runSimplePutDeleteTest</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.260">runSimplePutDeleteTest</a>()
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.261">runSimplePutDeleteTest</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></pre>
 <dl>
@@ -703,7 +703,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>runSmallBatchTest</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.300">runSmallBatchTest</a>()
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.301">runSmallBatchTest</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></pre>
 <dl>
@@ -719,7 +719,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.315">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.316">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/d0a21080/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 77c24c6..ab7cd54 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/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/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>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html
index 47f2aac..268cf07 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html
@@ -127,138 +127,139 @@
 <span class="sourceLineNo">119</span>  public static void setUpBeforeClass() throws Exception {<a name="line.119"></a>
 <span class="sourceLineNo">120</span>    UTIL.getConfiguration().setInt("replication.source.nb.capacity", 10);<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    UTIL.getConfiguration().setLong("replication.sleep.before.failover", 1000);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    UTIL.startMiniCluster(3);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // disable balancer<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    UTIL.getAdmin().balancerSwitch(false, true);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    LOG_DIR = UTIL.getDataTestDirOnTestFS("replicated");<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    FS = UTIL.getTestFileSystem();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    FS.mkdirs(LOG_DIR);<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>  @AfterClass<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public static void tearDownAfterClass() throws Exception {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    UTIL.shutdownMiniCluster();<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>  @After<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  public void tearDown() throws Exception {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    Admin admin = UTIL.getAdmin();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    for (ReplicationPeerDescription pd : admin.listReplicationPeers()) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      admin.removeReplicationPeer(pd.getPeerId());<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    rollAllWALs();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    if (WRITER != null) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      WRITER.close();<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      WRITER = null;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  protected static void moveRegion(RegionInfo region, HRegionServer rs) throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    UTIL.getAdmin().move(region.getEncodedNameAsBytes(),<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      Bytes.toBytes(rs.getServerName().getServerName()));<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    UTIL.waitFor(30000, new ExplainingPredicate&lt;Exception&gt;() {<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>      @Override<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      public boolean evaluate() throws Exception {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        return rs.getRegion(region.getEncodedName()) != null;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      }<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>      @Override<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      public String explainFailure() throws Exception {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        return region + " is still not on " + rs;<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>  protected static void rollAllWALs() throws Exception {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    for (RegionServerThread t : UTIL.getMiniHBaseCluster().getLiveRegionServerThreads()) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      t.getRegionServer().getWalRoller().requestRollAll();<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    UTIL.waitFor(30000, new ExplainingPredicate&lt;Exception&gt;() {<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>      @Override<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      public boolean evaluate() throws Exception {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        return UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().stream()<a name="line.173"></a>
-<span class="sourceLineNo">174</span>          .map(t -&gt; t.getRegionServer()).allMatch(HRegionServer::walRollRequestFinished);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>      @Override<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      public String explainFailure() throws Exception {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        return "Log roll has not finished yet";<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      }<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    });<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  protected final void setupWALWriter() throws IOException {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    logPath = new Path(LOG_DIR, name.getMethodName());<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    WRITER = WALFactory.createWALWriter(FS, logPath, UTIL.getConfiguration());<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>  protected final void waitUntilReplicationDone(int expectedEntries) throws Exception {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    UTIL.waitFor(30000, new ExplainingPredicate&lt;Exception&gt;() {<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>      @Override<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      public boolean evaluate() throws Exception {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        try (WAL.Reader reader = WALFactory.createReader(FS, logPath, UTIL.getConfiguration())) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          int count = 0;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          while (reader.next() != null) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>            count++;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>          }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>          return count &gt;= expectedEntries;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>        } catch (IOException e) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>          return false;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      }<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span>      @Override<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      public String explainFailure() throws Exception {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        return "Not enough entries replicated";<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    });<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  protected final void enablePeerAndWaitUntilReplicationDone(int expectedEntries) throws Exception {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    UTIL.getAdmin().enableReplicationPeer(PEER_ID);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    waitUntilReplicationDone(expectedEntries);<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>  protected final void addPeer(boolean enabled) throws IOException {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    UTIL.getAdmin().addReplicationPeer(PEER_ID,<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      ReplicationPeerConfig.newBuilder().setClusterKey("127.0.0.1:2181:/hbase")<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        .setReplicationEndpointImpl(LocalReplicationEndpoint.class.getName()).setSerial(true)<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        .build(),<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      enabled);<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>  protected final void checkOrder(int expectedEntries) throws IOException {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    try (WAL.Reader reader =<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      WALFactory.createReader(UTIL.getTestFileSystem(), logPath, UTIL.getConfiguration())) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      long seqId = -1L;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      int count = 0;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      for (Entry entry;;) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        entry = reader.next();<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        if (entry == null) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          break;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        }<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        assertTrue(<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          "Sequence id go backwards from " + seqId + " to " + entry.getKey().getSequenceId(),<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          entry.getKey().getSequenceId() &gt;= seqId);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        seqId = entry.getKey().getSequenceId();<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        count++;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      assertEquals(expectedEntries, count);<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><a name="line.244"></a>
-<span class="sourceLineNo">245</span>  protected final TableName createTable() throws IOException, InterruptedException {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    UTIL.getAdmin().createTable(<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      TableDescriptorBuilder.newBuilder(tableName).setColumnFamily(ColumnFamilyDescriptorBuilder<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        .newBuilder(CF).setScope(HConstants.REPLICATION_SCOPE_GLOBAL).build()).build());<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    UTIL.waitTableAvailable(tableName);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    return tableName;<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">122</span>    UTIL.getConfiguration().setLong("hbase.serial.replication.waiting.ms", 100);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    UTIL.startMiniCluster(3);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    // disable balancer<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    UTIL.getAdmin().balancerSwitch(false, true);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    LOG_DIR = UTIL.getDataTestDirOnTestFS("replicated");<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    FS = UTIL.getTestFileSystem();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    FS.mkdirs(LOG_DIR);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  @AfterClass<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  public static void tearDownAfterClass() throws Exception {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    UTIL.shutdownMiniCluster();<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>  @After<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public void tearDown() throws Exception {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    Admin admin = UTIL.getAdmin();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    for (ReplicationPeerDescription pd : admin.listReplicationPeers()) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      admin.removeReplicationPeer(pd.getPeerId());<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    rollAllWALs();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    if (WRITER != null) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      WRITER.close();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      WRITER = null;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  }<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  protected static void moveRegion(RegionInfo region, HRegionServer rs) throws Exception {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    UTIL.getAdmin().move(region.getEncodedNameAsBytes(),<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      Bytes.toBytes(rs.getServerName().getServerName()));<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    UTIL.waitFor(30000, new ExplainingPredicate&lt;Exception&gt;() {<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>      @Override<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      public boolean evaluate() throws Exception {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        return rs.getRegion(region.getEncodedName()) != null;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>      @Override<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      public String explainFailure() throws Exception {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        return region + " is still not on " + rs;<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>  protected static void rollAllWALs() throws Exception {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    for (RegionServerThread t : UTIL.getMiniHBaseCluster().getLiveRegionServerThreads()) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      t.getRegionServer().getWalRoller().requestRollAll();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    UTIL.waitFor(30000, new ExplainingPredicate&lt;Exception&gt;() {<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>      @Override<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      public boolean evaluate() throws Exception {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        return UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().stream()<a name="line.174"></a>
+<span class="sourceLineNo">175</span>          .map(t -&gt; t.getRegionServer()).allMatch(HRegionServer::walRollRequestFinished);<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 String explainFailure() throws Exception {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        return "Log roll has not finished yet";<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      }<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    });<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  protected final void setupWALWriter() throws IOException {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    logPath = new Path(LOG_DIR, name.getMethodName());<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    WRITER = WALFactory.createWALWriter(FS, logPath, UTIL.getConfiguration());<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>  protected final void waitUntilReplicationDone(int expectedEntries) throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    UTIL.waitFor(30000, new ExplainingPredicate&lt;Exception&gt;() {<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 boolean evaluate() throws Exception {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        try (WAL.Reader reader = WALFactory.createReader(FS, logPath, UTIL.getConfiguration())) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>          int count = 0;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>          while (reader.next() != null) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>            count++;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          return count &gt;= expectedEntries;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        } catch (IOException e) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          return false;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      }<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>      @Override<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      public String explainFailure() throws Exception {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        return "Not enough entries replicated";<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    });<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  protected final void enablePeerAndWaitUntilReplicationDone(int expectedEntries) throws Exception {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    UTIL.getAdmin().enableReplicationPeer(PEER_ID);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    waitUntilReplicationDone(expectedEntries);<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>  protected final void addPeer(boolean enabled) throws IOException {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    UTIL.getAdmin().addReplicationPeer(PEER_ID,<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      ReplicationPeerConfig.newBuilder().setClusterKey("127.0.0.1:2181:/hbase")<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        .setReplicationEndpointImpl(LocalReplicationEndpoint.class.getName()).setSerial(true)<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        .build(),<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      enabled);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>  protected final void checkOrder(int expectedEntries) throws IOException {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    try (WAL.Reader reader =<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      WALFactory.createReader(UTIL.getTestFileSystem(), logPath, UTIL.getConfiguration())) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      long seqId = -1L;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      int count = 0;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      for (Entry entry;;) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        entry = reader.next();<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        if (entry == null) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          break;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        assertTrue(<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          "Sequence id go backwards from " + seqId + " to " + entry.getKey().getSequenceId(),<a name="line.237"></a>
+<span class="sourceLineNo">238</span>          entry.getKey().getSequenceId() &gt;= seqId);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        seqId = entry.getKey().getSequenceId();<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        count++;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      }<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      assertEquals(expectedEntries, count);<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><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  protected final TableName createTable() throws IOException, InterruptedException {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    UTIL.getAdmin().createTable(<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      TableDescriptorBuilder.newBuilder(tableName).setColumnFamily(ColumnFamilyDescriptorBuilder<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        .newBuilder(CF).setScope(HConstants.REPLICATION_SCOPE_GLOBAL).build()).build());<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    UTIL.waitTableAvailable(tableName);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    return tableName;<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>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d0a21080/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
index a48ded5..c282308 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
@@ -59,834 +59,850 @@
 <span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.replication.ReplicationListener;<a name="line.51"></a>
 <span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.replication.ReplicationPeer;<a name="line.52"></a>
 <span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.replication.ReplicationPeer.PeerState;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.replication.ReplicationPeers;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationQueueInfo;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.replication.ReplicationTracker;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<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> * This class is responsible to manage all the replication sources. There are two classes of<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * sources:<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * &lt;ul&gt;<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * &lt;li&gt;Normal sources are persistent and one per peer cluster&lt;/li&gt;<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * &lt;li&gt;Old sources are recovered from a failed region server and our only goal is to finish<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * replicating the WAL queue it had&lt;/li&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * &lt;/ul&gt;<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * &lt;p&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * When a region server dies, this class uses a watcher to get notified and it tries to grab a lock<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * in order to transfer all the queues in a local old source.<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * &lt;p&gt;<a name="line.78"></a>
-<span class="sourceLineNo">079</span> * Synchronization specification:<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * &lt;ul&gt;<a name="line.80"></a>
-<span class="sourceLineNo">081</span> * &lt;li&gt;No need synchronized on {@link #sources}. {@link #sources} is a ConcurrentHashMap and there<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * is a Lock for peer id in {@link PeerProcedureHandlerImpl}. So there is no race for peer<a name="line.82"></a>
-<span class="sourceLineNo">083</span> * operations.&lt;/li&gt;<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * &lt;li&gt;Need synchronized on {@link #walsById}. There are four methods which modify it,<a name="line.84"></a>
-<span class="sourceLineNo">085</span> * {@link #addPeer(String)}, {@link #removePeer(String)},<a name="line.85"></a>
-<span class="sourceLineNo">086</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and {@link #preLogRoll(Path)}.<a name="line.86"></a>
-<span class="sourceLineNo">087</span> * {@link #walsById} is a ConcurrentHashMap and there is a Lock for peer id in<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * {@link PeerProcedureHandlerImpl}. So there is no race between {@link #addPeer(String)} and<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * {@link #removePeer(String)}. {@link #cleanOldLogs(NavigableSet, String, boolean, String)} is<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * called by {@link ReplicationSourceInterface}. So no race with {@link #addPeer(String)}.<a name="line.90"></a>
-<span class="sourceLineNo">091</span> * {@link #removePeer(String)} will terminate the {@link ReplicationSourceInterface} firstly, then<a name="line.91"></a>
-<span class="sourceLineNo">092</span> * remove the wals from {@link #walsById}. So no race with {@link #removePeer(String)}. The only<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * case need synchronized is {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * {@link #preLogRoll(Path)}.&lt;/li&gt;<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * &lt;li&gt;No need synchronized on {@link #walsByIdRecoveredQueues}. There are three methods which<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * modify it, {@link #removePeer(String)} ,<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()}.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} is called by<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * {@link ReplicationSourceInterface}. {@link #removePeer(String)} will terminate the<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * {@link ReplicationSourceInterface} firstly, then remove the wals from<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * {@link #walsByIdRecoveredQueues}. And {@link ReplicationSourceManager.NodeFailoverWorker#run()}<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * will add the wals to {@link #walsByIdRecoveredQueues} firstly, then start up a<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * {@link ReplicationSourceInterface}. So there is no race here. For<a name="line.104"></a>
-<span class="sourceLineNo">105</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()} and {@link #removePeer(String)}, there<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * is already synchronized on {@link #oldsources}. So no need synchronized on<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * {@link #walsByIdRecoveredQueues}.&lt;/li&gt;<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * &lt;li&gt;Need synchronized on {@link #latestPaths} to avoid the new open source miss new log.&lt;/li&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * &lt;li&gt;Need synchronized on {@link #oldsources} to avoid adding recovered source for the<a name="line.109"></a>
-<span class="sourceLineNo">110</span> * to-be-removed peer.&lt;/li&gt;<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * &lt;/ul&gt;<a name="line.111"></a>
-<span class="sourceLineNo">112</span> */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>@InterfaceAudience.Private<a name="line.113"></a>
-<span class="sourceLineNo">114</span>public class ReplicationSourceManager implements ReplicationListener {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSourceManager.class);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  // all the sources that read this RS's logs and every peer only has one replication source<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private final ConcurrentMap&lt;String, ReplicationSourceInterface&gt; sources;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  // List of all the sources we got from died RSs<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private final List&lt;ReplicationSourceInterface&gt; oldsources;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  private final ReplicationQueueStorage queueStorage;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private final ReplicationTracker replicationTracker;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  private final ReplicationPeers replicationPeers;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  // UUID for this cluster<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private final UUID clusterId;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  // All about stopping<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private final Server server;<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>  // All logs we are currently tracking<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  // Index structure of the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  // For normal replication source, the peer id is same with the queue id<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsById;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  // Logs for recovered sources we are currently tracking<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  // the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  // For recovered source, the queue id's format is peer_id-servername-*<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsByIdRecoveredQueues;<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  private final Configuration conf;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  private final FileSystem fs;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  // The paths to the latest log of each wal group, for new coming peers<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private final Set&lt;Path&gt; latestPaths;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  // Path to the wals directories<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private final Path logDir;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  // Path to the wal archive<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final Path oldLogDir;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final WALFileLengthProvider walFileLengthProvider;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  // The number of ms that we wait before moving znodes, HBASE-3596<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  private final long sleepBeforeFailover;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  // Homemade executer service for replication<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private final ThreadPoolExecutor executor;<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private final boolean replicationForBulkLoadDataEnabled;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.replication.ReplicationPeerImpl;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationPeers;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.ReplicationQueueInfo;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.replication.ReplicationTracker;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.Logger;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.slf4j.LoggerFactory;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>/**<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * This class is responsible to manage all the replication sources. There are two classes of<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * sources:<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * &lt;ul&gt;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * &lt;li&gt;Normal sources are persistent and one per peer cluster&lt;/li&gt;<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * &lt;li&gt;Old sources are recovered from a failed region server and our only goal is to finish<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * replicating the WAL queue it had&lt;/li&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * &lt;/ul&gt;<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * &lt;p&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * When a region server dies, this class uses a watcher to get notified and it tries to grab a lock<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * in order to transfer all the queues in a local old source.<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * &lt;p&gt;<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * Synchronization specification:<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * &lt;ul&gt;<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * &lt;li&gt;No need synchronized on {@link #sources}. {@link #sources} is a ConcurrentHashMap and there<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * is a Lock for peer id in {@link PeerProcedureHandlerImpl}. So there is no race for peer<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * operations.&lt;/li&gt;<a name="line.84"></a>
+<span class="sourceLineNo">085</span> * &lt;li&gt;Need synchronized on {@link #walsById}. There are four methods which modify it,<a name="line.85"></a>
+<span class="sourceLineNo">086</span> * {@link #addPeer(String)}, {@link #removePeer(String)},<a name="line.86"></a>
+<span class="sourceLineNo">087</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and {@link #preLogRoll(Path)}.<a name="line.87"></a>
+<span class="sourceLineNo">088</span> * {@link #walsById} is a ConcurrentHashMap and there is a Lock for peer id in<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * {@link PeerProcedureHandlerImpl}. So there is no race between {@link #addPeer(String)} and<a name="line.89"></a>
+<span class="sourceLineNo">090</span> * {@link #removePeer(String)}. {@link #cleanOldLogs(NavigableSet, String, boolean, String)} is<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * called by {@link ReplicationSourceInterface}. So no race with {@link #addPeer(String)}.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * {@link #removePeer(String)} will terminate the {@link ReplicationSourceInterface} firstly, then<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * remove the wals from {@link #walsById}. So no race with {@link #removePeer(String)}. The only<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * case need synchronized is {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * {@link #preLogRoll(Path)}.&lt;/li&gt;<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * &lt;li&gt;No need synchronized on {@link #walsByIdRecoveredQueues}. There are three methods which<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * modify it, {@link #removePeer(String)} ,<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} and<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()}.<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * {@link #cleanOldLogs(NavigableSet, String, boolean, String)} is called by<a name="line.100"></a>
+<span class="sourceLineNo">101</span> * {@link ReplicationSourceInterface}. {@link #removePeer(String)} will terminate the<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * {@link ReplicationSourceInterface} firstly, then remove the wals from<a name="line.102"></a>
+<span class="sourceLineNo">103</span> * {@link #walsByIdRecoveredQueues}. And {@link ReplicationSourceManager.NodeFailoverWorker#run()}<a name="line.103"></a>
+<span class="sourceLineNo">104</span> * will add the wals to {@link #walsByIdRecoveredQueues} firstly, then start up a<a name="line.104"></a>
+<span class="sourceLineNo">105</span> * {@link ReplicationSourceInterface}. So there is no race here. For<a name="line.105"></a>
+<span class="sourceLineNo">106</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()} and {@link #removePeer(String)}, there<a name="line.106"></a>
+<span class="sourceLineNo">107</span> * is already synchronized on {@link #oldsources}. So no need synchronized on<a name="line.107"></a>
+<span class="sourceLineNo">108</span> * {@link #walsByIdRecoveredQueues}.&lt;/li&gt;<a name="line.108"></a>
+<span class="sourceLineNo">109</span> * &lt;li&gt;Need synchronized on {@link #latestPaths} to avoid the new open source miss new log.&lt;/li&gt;<a name="line.109"></a>
+<span class="sourceLineNo">110</span> * &lt;li&gt;Need synchronized on {@link #oldsources} to avoid adding recovered source for the<a name="line.110"></a>
+<span class="sourceLineNo">111</span> * to-be-removed peer.&lt;/li&gt;<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * &lt;/ul&gt;<a name="line.112"></a>
+<span class="sourceLineNo">113</span> */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>@InterfaceAudience.Private<a name="line.114"></a>
+<span class="sourceLineNo">115</span>public class ReplicationSourceManager implements ReplicationListener {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSourceManager.class);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  // all the sources that read this RS's logs and every peer only has one replication source<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private final ConcurrentMap&lt;String, ReplicationSourceInterface&gt; sources;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  // List of all the sources we got from died RSs<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private final List&lt;ReplicationSourceInterface&gt; oldsources;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  private final ReplicationQueueStorage queueStorage;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private final ReplicationTracker replicationTracker;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private final ReplicationPeers replicationPeers;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  // UUID for this cluster<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  private final UUID clusterId;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  // All about stopping<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  private final Server server;<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  // All logs we are currently tracking<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  // Index structure of the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  // For normal replication source, the peer id is same with the queue id<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsById;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  // Logs for recovered sources we are currently tracking<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  // the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  // For recovered source, the queue id's format is peer_id-servername-*<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsByIdRecoveredQueues;<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  private final Configuration conf;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  private final FileSystem fs;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  // The paths to the latest log of each wal group, for new coming peers<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  private final Set&lt;Path&gt; latestPaths;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  // Path to the wals directories<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  private final Path logDir;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  // Path to the wal archive<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private final Path oldLogDir;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  private final WALFileLengthProvider walFileLengthProvider;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  // The number of ms that we wait before moving znodes, HBASE-3596<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  private final long sleepBeforeFailover;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  // Homemade executer service for replication<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  private final ThreadPoolExecutor executor;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>  private final boolean replicationForBulkLoadDataEnabled;<a name="line.152"></a>
 <span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>  private AtomicLong totalBufferUsed = new AtomicLong();<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>   * Creates a replication manager and sets the watch on all the other registered region servers<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * @param queueStorage the interface for manipulating replication queues<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @param replicationPeers<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * @param replicationTracker<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @param conf the configuration to use<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * @param server the server for this region server<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   * @param fs the file system to use<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * @param logDir the directory that contains all wal directories of live RSs<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * @param oldLogDir the directory where old logs are archived<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * @param clusterId<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  public ReplicationSourceManager(ReplicationQueueStorage queueStorage,<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      ReplicationPeers replicationPeers, ReplicationTracker replicationTracker, Configuration conf,<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      Server server, FileSystem fs, Path logDir, Path oldLogDir, UUID clusterId,<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      WALFileLengthProvider walFileLengthProvider) throws IOException {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    // CopyOnWriteArrayList is thread-safe.<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    // Generally, reading is more than modifying.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    this.sources = new ConcurrentHashMap&lt;&gt;();<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    this.queueStorage = queueStorage;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    this.replicationPeers = replicationPeers;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    this.replicationTracker = replicationTracker;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    this.server = server;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    this.walsById = new ConcurrentHashMap&lt;&gt;();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    this.walsByIdRecoveredQueues = new ConcurrentHashMap&lt;&gt;();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    this.oldsources = new ArrayList&lt;&gt;();<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.conf = conf;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    this.fs = fs;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    this.logDir = logDir;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.oldLogDir = oldLogDir;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.sleepBeforeFailover = conf.getLong("replication.sleep.before.failover", 30000); // 30<a name="line.186"></a>
-<span class="sourceLineNo">187</span>                                                                                         // seconds<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.clusterId = clusterId;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.walFileLengthProvider = walFileLengthProvider;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.replicationTracker.registerListener(this);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    // It's preferable to failover 1 RS at a time, but with good zk servers<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    // more could be processed at the same time.<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    int nbWorkers = conf.getInt("replication.executor.workers", 1);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    // use a short 100ms sleep since this could be done inline with a RS startup<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    // even if we fail, other region servers can take care of it<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    this.executor = new ThreadPoolExecutor(nbWorkers, nbWorkers, 100, TimeUnit.MILLISECONDS,<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        new LinkedBlockingQueue&lt;&gt;());<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    ThreadFactoryBuilder tfb = new ThreadFactoryBuilder();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    tfb.setNameFormat("ReplicationExecutor-%d");<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    tfb.setDaemon(true);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    this.executor.setThreadFactory(tfb.build());<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.latestPaths = new HashSet&lt;Path&gt;();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    replicationForBulkLoadDataEnabled = conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * Adds a normal source per registered peer cluster and tries to process all old region server wal<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * queues<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   * &lt;p&gt;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * The returned future is for adoptAbandonedQueues task.<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  Future&lt;?&gt; init() throws IOException {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    for (String id : this.replicationPeers.getAllPeerIds()) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      addSource(id);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      if (replicationForBulkLoadDataEnabled) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        // Check if peer exists in hfile-refs queue, if not add it. This can happen in the case<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        // when a peer was added before replication for bulk loaded data was enabled.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        throwIOExceptionWhenFail(() -&gt; this.queueStorage.addPeerToHFileRefs(id));<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    return this.executor.submit(this::adoptAbandonedQueues);<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>  private void adoptAbandonedQueues() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    List&lt;ServerName&gt; currentReplicators = null;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    try {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      currentReplicators = queueStorage.getListOfReplicators();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    } catch (ReplicationException e) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      server.abort("Failed to get all replicators", e);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      return;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    if (currentReplicators == null || currentReplicators.isEmpty()) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      return;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    List&lt;ServerName&gt; otherRegionServers = replicationTracker.getListOfRegionServers().stream()<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        .map(ServerName::valueOf).collect(Collectors.toList());<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    LOG.info(<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      "Current list of replicators: " + currentReplicators + " other RSs: " + otherRegionServers);<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    // Look if there's anything to process after a restart<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    for (ServerName rs : currentReplicators) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      if (!otherRegionServers.contains(rs)) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        transferQueues(rs);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>  /**<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * 1. Add peer to replicationPeers 2. Add the normal source and related replication queue 3. Add<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * HFile Refs<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * @param peerId the id of replication peer<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  public void addPeer(String peerId) throws IOException {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    boolean added = false;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    try {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      added = this.replicationPeers.addPeer(peerId);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    } catch (ReplicationException e) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      throw new IOException(e);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    if (added) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      addSource(peerId);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      if (replicationForBulkLoadDataEnabled) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        throwIOExceptionWhenFail(() -&gt; this.queueStorage.addPeerToHFileRefs(peerId));<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * 1. Remove peer for replicationPeers 2. Remove all the recovered sources for the specified id<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * and related replication queues 3. Remove the normal source and related replication queue 4.<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * Remove HFile Refs<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * @param peerId the id of the replication peer<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   */<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  public void removePeer(String peerId) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    replicationPeers.removePeer(peerId);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    String terminateMessage = "Replication stream was removed by a user";<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    List&lt;ReplicationSourceInterface&gt; oldSourcesToDelete = new ArrayList&lt;&gt;();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    // synchronized on oldsources to avoid adding recovered source for the to-be-removed peer<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    // see NodeFailoverWorker.run<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    synchronized (this.oldsources) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      // First close all the recovered sources for this peer<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      for (ReplicationSourceInterface src : oldsources) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        if (peerId.equals(src.getPeerId())) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>          oldSourcesToDelete.add(src);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      for (ReplicationSourceInterface src : oldSourcesToDelete) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        src.terminate(terminateMessage);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        removeRecoveredSource(src);<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>    LOG.info(<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      "Number of deleted recovered sources for " + peerId + ": " + oldSourcesToDelete.size());<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    // Now close the normal source for this peer<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    ReplicationSourceInterface srcToRemove = this.sources.get(peerId);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    if (srcToRemove != null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      srcToRemove.terminate(terminateMessage);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      removeSource(srcToRemove);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    } else {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      // This only happened in unit test TestReplicationSourceManager#testPeerRemovalCleanup<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      // Delete queue from storage and memory and queue id is same with peer id for normal<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      // source<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      deleteQueue(peerId);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      this.walsById.remove(peerId);<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>    // Remove HFile Refs<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    abortWhenFail(() -&gt; this.queueStorage.removePeerFromHFileRefs(peerId));<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>   * Factory method to create a replication source<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * @param queueId the id of the replication queue<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * @return the created source<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private ReplicationSourceInterface createSource(String queueId, ReplicationPeer replicationPeer)<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      throws IOException {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    ReplicationSourceInterface src = ReplicationSourceFactory.create(conf, queueId);<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    MetricsSource metrics = new MetricsSource(queueId);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    // init replication source<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    src.init(conf, fs, this, queueStorage, replicationPeer, server, queueId, clusterId,<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      walFileLengthProvider, metrics);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    return src;<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>  /**<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * Add a normal source for the given peer on this region server. Meanwhile, add new replication<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * queue to storage. For the newly added peer, we only need to enqueue the latest log of each wal<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * group and do replication<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @param peerId the id of the replication peer<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * @return the source that was created<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   */<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  @VisibleForTesting<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  ReplicationSourceInterface addSource(String peerId) throws IOException {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    ReplicationPeer peer = replicationPeers.getPeer(peerId);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    ReplicationSourceInterface src = createSource(peerId, peer);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    // synchronized on latestPaths to avoid missing the new log<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    synchronized (this.latestPaths) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.sources.put(peerId, src);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      Map&lt;String, NavigableSet&lt;String&gt;&gt; walsByGroup = new HashMap&lt;&gt;();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.walsById.put(peerId, walsByGroup);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      // Add the latest wal to that source's queue<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      if (this.latestPaths.size() &gt; 0) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        for (Path logPath : latestPaths) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          String name = logPath.getName();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>          String walPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(name);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          NavigableSet&lt;String&gt; logs = new TreeSet&lt;&gt;();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          logs.add(name);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>          walsByGroup.put(walPrefix, logs);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>          // Abort RS and throw exception to make add peer failed<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          abortAndThrowIOExceptionWhenFail(<a name="line.353"></a>
-<span class="sourceLineNo">354</span>            () -&gt; this.queueStorage.addWAL(server.getServerName(), peerId, name));<a name="line.354"></a>
-<span class="sourceLineNo">355</span>          src.enqueueLog(logPath);<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">359</span>    src.startup();<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return src;<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>   * Close the previous replication sources of this peer id and open new sources to trigger the new<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * replication state changes or new replication config changes. Here we don't need to change<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * replication queue storage and only to enqueue all logs to the new replication source<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * @param peerId the id of the replication peer<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @throws IOException<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   */<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  public void refreshSources(String peerId) throws IOException {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    String terminateMessage = "Peer " + peerId +<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      " state or config changed. Will close the previous replication source and open a new one";<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    ReplicationPeer peer = replicationPeers.getPeer(peerId);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    ReplicationSourceInterface src = createSource(peerId, peer);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    // synchronized on latestPaths to avoid missing the new log<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    synchronized (this.latestPaths) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      ReplicationSourceInterface toRemove = this.sources.put(peerId, src);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      if (toRemove != null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        LOG.info("Terminate replication source for " + toRemove.getPeerId());<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        toRemove.terminate(terminateMessage);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      for (SortedSet&lt;String&gt; walsByGroup : walsById.get(peerId).values()) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        walsByGroup.forEach(wal -&gt; src.enqueueLog(new Path(this.logDir, wal)));<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    LOG.info("Startup replication source for " + src.getPeerId());<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    src.startup();<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>    List&lt;ReplicationSourceInterface&gt; toStartup = new ArrayList&lt;&gt;();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    // synchronized on oldsources to avoid race with NodeFailoverWorker<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    synchronized (this.oldsources) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      List&lt;String&gt; previousQueueIds = new ArrayList&lt;&gt;();<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      for (ReplicationSourceInterface oldSource : this.oldsources) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        if (oldSource.getPeerId().equals(peerId)) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          previousQueueIds.add(oldSource.getQueueId());<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          oldSource.terminate(terminateMessage);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          this.oldsources.remove(oldSource);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      for (String queueId : previousQueueIds) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        ReplicationSourceInterface replicationSource = createSource(queueId, peer);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        this.oldsources.add(replicationSource);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        for (SortedSet&lt;String&gt; walsByGroup : walsByIdRecoveredQueues.get(queueId).values()) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          walsByGroup.forEach(wal -&gt; src.enqueueLog(new Path(wal)));<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        toStartup.add(replicationSource);<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>    for (ReplicationSourceInterface replicationSource : toStartup) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      replicationSource.startup();<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Clear the metrics and related replication queue of the specified old source<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @param src source to clear<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  void removeRecoveredSource(ReplicationSourceInterface src) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    LOG.info("Done with the recovered queue " + src.getQueueId());<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    src.getSourceMetrics().clear();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    this.oldsources.remove(src);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    // Delete queue from storage and memory<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    deleteQueue(src.getQueueId());<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    this.walsByIdRecoveredQueues.remove(src.getQueueId());<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  }<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>  /**<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   * Clear the metrics and related replication queue of the specified old source<a name="line.428"></a>
-<span class="sourceLineNo">429</span>   * @param src source to clear<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
-<span class="sourceLineNo">431</span>  void removeSource(ReplicationSourceInterface src) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    LOG.info("Done with the queue " + src.getQueueId());<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    src.getSourceMetrics().clear();<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    this.sources.remove(src.getPeerId());<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    // Delete queue from storage and memory<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    deleteQueue(src.getQueueId());<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    this.walsById.remove(src.getQueueId());<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  /**<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * Delete a complete queue of wals associated with a replication source<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * @param queueId the id of replication queue to delete<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   */<a name="line.443"></a>
-<span class="sourceLineNo">444</span>  private void deleteQueue(String queueId) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    abortWhenFail(() -&gt; this.queueStorage.removeQueue(server.getServerName(), queueId));<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>  @FunctionalInterface<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private interface ReplicationQueueOperation {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    void exec() throws ReplicationException;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>  private void abortWhenFail(ReplicationQueueOperation op) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    try {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      op.exec();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    } catch (ReplicationException e) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      server.abort("Failed to operate on replication queue", e);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    }<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>  private void throwIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    try {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      op.exec();<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    } catch (ReplicationException e) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      throw new IOException(e);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  private void abortAndThrowIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    try {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      op.exec();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    } catch (ReplicationException e) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      server.abort("Failed to operate on replication queue", e);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      throw new IOException(e);<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><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  /**<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * This method will log the current position to storage. And also clean old logs from the<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   * replication queue.<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @param queueId id of the replication queue<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param queueRecovered indicates if this queue comes from another region server<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @param entryBatch the wal entry batch we just shipped<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  public void logPositionAndCleanOldLogs(String queueId, boolean queueRecovered,<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      WALEntryBatch entryBatch) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    String fileName = entryBatch.getLastWalPath().getName();<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    abortWhenFail(() -&gt; this.queueStorage.setWALPosition(server.getServerName(), queueId, fileName,<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      entryBatch.getLastWalPosition(), entryBatch.getLastSeqIds()));<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    cleanOldLogs(fileName, entryBatch.isEndOfFile(), queueId, queueRecovered);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>  }<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>  /**<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * Cleans a log file and all older logs from replication queue. Called when we are sure that a log<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * file is closed and has no more entries.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   * @param log Path to the log<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * @param inclusive whether we should also remove the given log file<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   * @param queueId id of the replication queue<a name="line.498"></a>
-<span class="sourceLineNo">499</span>   * @param queueRecovered Whether this is a recovered queue<a name="line.499"></a>
-<span class="sourceLineNo">500</span>   */<a name="line.500"></a>
-<span class="sourceLineNo">501</span>  @VisibleForTesting<a name="line.501"></a>
-<span class="sourceLineNo">502</span>  void cleanOldLogs(String log, boolean inclusive, String queueId, boolean queueRecovered) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(log);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    if (queueRecovered) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      NavigableSet&lt;String&gt; wals = walsByIdRecoveredQueues.get(queueId).get(logPrefix);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      if (wals != null) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        cleanOldLogs(wals, log, inclusive, queueId);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      }<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    } else {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      // synchronized on walsById to avoid race with preLogRoll<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      synchronized (this.walsById) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        NavigableSet&lt;String&gt; wals = walsById.get(queueId).get(logPrefix);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        if (wals != null) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          cleanOldLogs(wals, log, inclusive, queueId);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  }<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>  private void cleanOldLogs(NavigableSet&lt;String&gt; wals, String key, boolean inclusive, String id) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    NavigableSet&lt;String&gt; walSet = wals.headSet(key, inclusive);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    if (walSet.isEmpty()) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      return;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    LOG.debug("Removing {} logs in the list: {}", walSet.size(), walSet);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    for (String wal : walSet) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      abortWhenFail(() -&gt; this.queueStorage.removeWAL(server.getServerName(), id, wal));<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    walSet.clear();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>  }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>  // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  @VisibleForTesting<a name="line.533"></a>
-<span class="sourceLineNo">534</span>  public void preLogRoll(Path newLog) throws IOException {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    String logName = newLog.getName();<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(logName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    // synchronized on latestPaths to avoid the new open source miss the new log<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    synchronized (this.latestPaths) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      // Add log to queue storage<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        // If record log to queue storage failed, abort RS and throw exception to make log roll<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        // failed<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        abortAndThrowIOExceptionWhenFail(<a name="line.543"></a>
-<span class="sourceLineNo">544</span>          () -&gt; this.queueStorage.addWAL(server.getServerName(), source.getQueueId(), logName));<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span><a name="line.546"></a>
-<span class="sourceLineNo">547</span>      // synchronized on walsById to avoid race with cleanOldLogs<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      synchronized (this.walsById) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>        // Update walsById map<a name="line.549"></a>
-<span class="sourceLineNo">550</span>        for (Map.Entry&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; entry : this.walsById<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          .entrySet()) {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>          String peerId = entry.getKey();<a name="line.552"></a>
-<span class="sourceLineNo">553</span>          Map&lt;String, NavigableSet&lt;String&gt;&gt; walsByPrefix = entry.getValue();<a name="line.553"></a>
-<span class="sourceLineNo">554</span>          boolean existingPrefix = false;<a name="line.554"></a>
-<span class="sourceLineNo">555</span>          for (Map.Entry&lt;String, NavigableSet&lt;String&gt;&gt; walsEntry : walsByPrefix.entrySet()) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>            SortedSet&lt;String&gt; wals = walsEntry.getValue();<a name="line.556"></a>
-<span class="sourceLineNo">557</span>            if (this.sources.isEmpty()) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>              // If there's no slaves, don't need to keep the old wals since<a name="line.558"></a>
-<span class="sourceLineNo">559</span>              // we only consider the last one when a new slave comes in<a name="line.559"></a>
-<span class="sourceLineNo">560</span>              wals.clear();<a name="line.560"></a>
-<span class="sourceLineNo">561</span>            }<a name="line.561"></a>
-<span class="sourceLineNo">562</span>            if (logPrefix.equals(walsEntry.getKey())) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>              wals.add(logName);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>              existingPrefix = true;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>            }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>          }<a name="line.566"></a>
-<span class="sourceLineNo">567</span>          if (!existingPrefix) {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>            // The new log belongs to a new group, add it into this peer<a name="line.568"></a>
-<span class="sourceLineNo">569</span>            LOG.debug("Start tracking logs for wal group {} for peer {}", logPrefix, peerId);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>            NavigableSet&lt;String&gt; wals = new TreeSet&lt;&gt;();<a name="line.570"></a>
-<span class="sourceLineNo">571</span>            wals.add(logName);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>            walsByPrefix.put(logPrefix, wals);<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          }<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        }<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>      // Add to latestPaths<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      Iterator&lt;Path&gt; iterator = latestPaths.iterator();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      while (iterator.hasNext()) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>        Path path = iterator.next();<a name="line.580"></a>
-<span class="sourceLineNo">581</span>        if (path.getName().contains(logPrefix)) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>          iterator.remove();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>          break;<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>      this.latestPaths.add(newLog);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    }<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  @VisibleForTesting<a name="line.591"></a>
-<span class="sourceLineNo">592</span>  public void postLogRoll(Path newLog) throws IOException {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    // This only updates the sources we own, not the recovered ones<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      source.enqueueLog(newLog);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>  @Override<a name="line.599"></a>
-<span class="sourceLineNo">600</span>  public void regionServerRemoved(String regionserver) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    transferQueues(ServerName.valueOf(regionserver));<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>   * Transfer all the queues of the specified to this region server. First it tries to grab a lock<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   * and if it works it will move the old queues and finally will delete the old queues.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   * &lt;p&gt;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>   * It creates one old source for any type of source of the old rs.<a name="line.608"></a>
-<span class="sourceLineNo">609</span>   */<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  private void transferQueues(ServerName deadRS) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    if (server.getServerName().equals(deadRS)) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      // it's just us, give up<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      return;<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    NodeFailoverWorker transfer = new NodeFailoverWorker(deadRS);<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    try {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      this.executor.execute(transfer);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    } catch (RejectedExecutionException ex) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      LOG.info("Cancelling the transfer of " + deadRS + " because of " + ex.getMessage());<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><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * Class responsible to setup new ReplicationSources to take care of the queues from dead region<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * servers.<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   */<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  class NodeFailoverWorker extends Thread {<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span>    private final ServerName deadRS;<a name="line.629"></a>
-<span class="sourceLineNo">630</span><a name="line.630"></a>
-<span class="sourceLineNo">631</span>    @VisibleForTesting<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    public NodeFailoverWorker(ServerName deadRS) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      super("Failover-for-" + deadRS);<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      this.deadRS = deadRS;<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>    @Override<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    public void run() {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      // Wait a bit before transferring the queues, we may be shutting down.<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      // This sleep may not be enough in some cases.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      try {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>        Thread.sleep(sleepBeforeFailover +<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          (long) (ThreadLocalRandom.current().nextFloat() * sleepBeforeFailover));<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      } catch (InterruptedException e) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        Thread.currentThread().interrupt();<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      // We try to lock that rs' queue directory<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      if (server.isStopped()) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        LOG.info("Not transferring queue since we are shutting down");<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        return;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      }<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      Map&lt;String, Set&lt;String&gt;&gt; newQueues = new HashMap&lt;&gt;();<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      try {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        List&lt;String&gt; queues = queueStorage.getAllQueues(deadRS);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>        while (!queues.isEmpty()) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>          Pair&lt;String, SortedSet&lt;String&gt;&gt; peer = queueStorage.claimQueue(deadRS,<a name="line.657"></a>
-<span class="sourceLineNo">658</span>            queues.get(ThreadLocalRandom.current().nextInt(queues.size())), server.getServerName());<a name="line.658"></a>
-<span class="sourceLineNo">659</span>          long sleep = sleepBeforeFailover / 2;<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          if (!peer.getSecond().isEmpty()) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>            newQueues.put(peer.getFirst(), peer.getSecond());<a name="line.661"></a>
-<span class="sourceLineNo">662</span>            sleep = sleepBeforeFailover;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>          }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          try {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>            Thread.sleep(sleep);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          } catch (InterruptedException e) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>            LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.667"></a>
-<span class="sourceLineNo">668</span>            Thread.currentThread().interrupt();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>          queues = queueStorage.getAllQueues(deadRS);<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        }<a name="line.671"></a>
-<span class="sourceLineNo">672</span>        if (queues.isEmpty()) {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          queueStorage.removeReplicatorIfQueueIsEmpty(deadRS);<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      } catch (ReplicationException e) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>        server.abort("Failed to claim queue from dead regionserver", e);<a name="line.676"></a>
-<span class="sourceLineNo">677</span>        return;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      }<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      // Copying over the failed queue is completed.<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      if (newQueues.isEmpty()) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        // We either didn't get the lock or the failed region server didn't have any outstanding<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        // WALs to replicate, so we are done.<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        return;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      }<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>      for (Map.Entry&lt;String, Set&lt;String&gt;&gt; entry : newQueues.entrySet()) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>        String queueId = entry.getKey();<a name="line.687"></a>
-<span class="sourceLineNo">688</span>        Set&lt;String&gt; walsSet = entry.getValue();<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        try {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>          // there is not an actual peer defined corresponding to peerId for the failover.<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          ReplicationQueueInfo replicationQueueInfo = new ReplicationQueueInfo(queueId);<a name="line.691"></a>
-<span class="sourceLineNo">692</span>          String actualPeerId = replicationQueueInfo.getPeerId();<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>          ReplicationPeer peer = replicationPeers.getPeer(actualPeerId);<a name="line.694"></a>
-<span class="sourceLineNo">695</span>          if (peer == null) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>            LOG.warn("Skipping failover for peer:" + actualPeerId + " of node " + deadRS +<a name="line.696"></a>
-<span class="sourceLineNo">697</span>              ", peer is null");<a name="line.697"></a>
-<span class="sourceLineNo">698</span>            abortWhenFail(() -&gt; queueStorage.removeQueue(server.getServerName(), queueId));<a name="line.698"></a>
-<span class="sourceLineNo">699</span>            continue;<a name="line.699"></a>
-<span class="sourceLineNo">700</span>          }<a name="line.700"></a>
-<span class="sourceLineNo">701</span>          if (server instanceof ReplicationSyncUp.DummyServer<a name="line.701"></a>
-<span class="sourceLineNo">702</span>              &amp;&amp; peer.getPeerState().equals(PeerState.DISABLED)) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>            LOG.warn("Peer {} is disbaled. ReplicationSyncUp tool will skip "<a name="line.703"></a>
-<span class="sourceLineNo">704</span>                + "replicating data to this peer.",<a name="line.704"></a>
-<span class="sourceLineNo">705</span>              actualPeerId);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>            continue;<a name="line.706"></a>
-<span class="sourceLineNo">707</span>          }<a name="line.707"></a>
-<span class="sourceLineNo">708</span>          // track sources in walsByIdRecoveredQueues<a name="line.708"></a>
-<span class="sourceLineNo">709</span>          Map&lt;String, NavigableSet&lt;String&gt;&gt; walsByGroup = new HashMap&lt;&gt;();<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          walsByIdRecoveredQueues.put(queueId, walsByGroup);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>          for (String wal : walsSet) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>            String walPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(wal);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>            NavigableSet&lt;String&gt; wals = walsByGroup.get(walPrefix);<a name="line.713"></a>
-<span class="sourceLineNo">714</span>            if (wals == null) {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>              wals = new TreeSet&lt;&gt;();<a name="line.715"></a>
-<span class="sourceLineNo">716</span>              walsByGroup.put(walPrefix, wals);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>            }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>            wals.add(wal);<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>          ReplicationSourceInterface src = createSource(queueId, peer);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>          // synchronized on oldsources to avoid adding recovered source for the to-be-removed peer<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          synchronized (oldsources) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>            if (!replicationPeers.getAllPeerIds().contains(src.getPeerId())) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>              src.terminate("Recovered queue doesn't belong to any current peer");<a name="line.725"></a>
-<span class="sourceLineNo">726</span>              removeRecoveredSource(src);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>              continue;<a name="line.727"></a>
-<span class="sourceLineNo">728</span>            }<a name="line.728"></a>
-<span class="sourceLineNo">729</span>            oldsources.add(src);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>            for (String wal : walsSet) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span>              src.enqueueLog(new Path(oldLogDir, wal));<a name="line.731"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  private AtomicLong totalBufferUsed = new AtomicLong();<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>   * Creates a replication manager and sets the watch on all the other registered region servers<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * @param queueStorage the interface for manipulating replication queues<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * @param replicationPeers<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * @param replicationTracker<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * @param conf the configuration to use<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * @param server the server for this region server<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * @param fs the file system to use<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @param logDir the directory that contains all wal directories of live RSs<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * @param oldLogDir the directory where old logs are archived<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * @param clusterId<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   */<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public ReplicationSourceManager(ReplicationQueueStorage queueStorage,<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      ReplicationPeers replicationPeers, ReplicationTracker replicationTracker, Configuration conf,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      Server server, FileSystem fs, Path logDir, Path oldLogDir, UUID clusterId,<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      WALFileLengthProvider walFileLengthProvider) throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    // CopyOnWriteArrayList is thread-safe.<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    // Generally, reading is more than modifying.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    this.sources = new ConcurrentHashMap&lt;&gt;();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    this.queueStorage = queueStorage;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    this.replicationPeers = replicationPeers;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    this.replicationTracker = replicationTracker;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    this.server = server;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    this.walsById = new ConcurrentHashMap&lt;&gt;();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    this.walsByIdRecoveredQueues = new ConcurrentHashMap&lt;&gt;();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    this.oldsources = new ArrayList&lt;&gt;();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    this.conf = conf;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    this.fs = fs;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    this.logDir = logDir;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.oldLogDir = oldLogDir;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    this.sleepBeforeFailover = conf.getLong("replication.sleep.before.failover", 30000); // 30<a name="line.187"></a>
+<span class="sourceLineNo">188</span>                                                                                         // seconds<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.clusterId = clusterId;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.walFileLengthProvider = walFileLengthProvider;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.replicationTracker.registerListener(this);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    // It's preferable to failover 1 RS at a time, but with good zk servers<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // more could be processed at the same time.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    int nbWorkers = conf.getInt("replication.executor.workers", 1);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    // use a short 100ms sleep since this could be done inline with a RS startup<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // even if we fail, other region servers can take care of it<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    this.executor = new ThreadPoolExecutor(nbWorkers, nbWorkers, 100, TimeUnit.MILLISECONDS,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        new LinkedBlockingQueue&lt;&gt;());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    ThreadFactoryBuilder tfb = new ThreadFactoryBuilder();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    tfb.setNameFormat("ReplicationExecutor-%d");<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    tfb.setDaemon(true);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    this.executor.setThreadFactory(tfb.build());<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.latestPaths = new HashSet&lt;Path&gt;();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    replicationForBulkLoadDataEnabled = conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  }<a name="line.206"

<TRUNCATED>