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/10/02 14:53:52 UTC

[01/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site d94979517 -> 37b8a04a7


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html
index 16827da..beaa49d 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html
@@ -141,7 +141,7 @@
 <span class="sourceLineNo">133</span>      INIT = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>      afterMethod();<a name="line.134"></a>
 <span class="sourceLineNo">135</span>    }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">136</span>    observer.resetFlags();<a name="line.136"></a>
 <span class="sourceLineNo">137</span>  }<a name="line.137"></a>
 <span class="sourceLineNo">138</span><a name="line.138"></a>
 <span class="sourceLineNo">139</span>  @After<a name="line.139"></a>
@@ -313,315 +313,340 @@
 <span class="sourceLineNo">305</span>    boolean preGetRSGroupInfoOfServerCalled = false;<a name="line.305"></a>
 <span class="sourceLineNo">306</span>    boolean postGetRSGroupInfoOfServerCalled = false;<a name="line.306"></a>
 <span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    public Optional&lt;MasterObserver&gt; getMasterObserver() {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return Optional.of(this);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    @Override<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    public void preMoveServersAndTables(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      preMoveServersAndTables = true;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    @Override<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    public void postMoveServersAndTables(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      postMoveServersAndTables = true;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    @Override<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    public void preRemoveServers(<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        Set&lt;Address&gt; servers) throws IOException {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      preRemoveServersCalled = true;<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>    public void postRemoveServers(<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        Set&lt;Address&gt; servers) throws IOException {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      postRemoveServersCalled = true;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    public void preRemoveRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        String name) throws IOException {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      preRemoveRSGroupCalled = true;<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>    public void postRemoveRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        String name) throws IOException {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      postRemoveRSGroupCalled = true;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    public void preAddRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        String name) throws IOException {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      preAddRSGroupCalled = true;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public void postAddRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        String name) throws IOException {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      postAddRSGroupCalled = true;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    }<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    @Override<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    public void preMoveTables(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      preMoveTablesCalled = true;<a name="line.357"></a>
+<span class="sourceLineNo">308</span>    void resetFlags() {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      preBalanceRSGroupCalled = false;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      postBalanceRSGroupCalled = false;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      preMoveServersCalled = false;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      postMoveServersCalled = false;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      preMoveTablesCalled = false;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      postMoveTablesCalled = false;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      preAddRSGroupCalled = false;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      postAddRSGroupCalled = false;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      preRemoveRSGroupCalled = false;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      postRemoveRSGroupCalled = false;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      preRemoveServersCalled = false;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      postRemoveServersCalled = false;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      preMoveServersAndTables = false;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      postMoveServersAndTables = false;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      preGetRSGroupInfoCalled = false;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      postGetRSGroupInfoCalled = false;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      preGetRSGroupInfoOfTableCalled = false;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      postGetRSGroupInfoOfTableCalled = false;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      preListRSGroupsCalled = false;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      postListRSGroupsCalled = false;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      preGetRSGroupInfoOfServerCalled = false;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      postGetRSGroupInfoOfServerCalled = false;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>    @Override<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    public Optional&lt;MasterObserver&gt; getMasterObserver() {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      return Optional.of(this);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    public void preMoveServersAndTables(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      preMoveServersAndTables = true;<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>    public void postMoveServersAndTables(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      postMoveServersAndTables = true;<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>    public void preRemoveServers(<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.349"></a>
+<span class="sourceLineNo">350</span>        Set&lt;Address&gt; servers) throws IOException {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      preRemoveServersCalled = true;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    @Override<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    public void postRemoveServers(<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        Set&lt;Address&gt; servers) throws IOException {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      postRemoveServersCalled = true;<a name="line.357"></a>
 <span class="sourceLineNo">358</span>    }<a name="line.358"></a>
 <span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public void postMoveTables(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      postMoveTablesCalled = true;<a name="line.362"></a>
+<span class="sourceLineNo">360</span>    public void preRemoveRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        String name) throws IOException {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      preRemoveRSGroupCalled = true;<a name="line.362"></a>
 <span class="sourceLineNo">363</span>    }<a name="line.363"></a>
 <span class="sourceLineNo">364</span>    @Override<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    public void preMoveServers(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.365"></a>
-<span class="sourceLineNo">366</span>        Set&lt;Address&gt; servers, String targetGroup) throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      preMoveServersCalled = true;<a name="line.367"></a>
+<span class="sourceLineNo">365</span>    public void postRemoveRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        String name) throws IOException {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      postRemoveRSGroupCalled = true;<a name="line.367"></a>
 <span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    @Override<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    public void postMoveServers(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        Set&lt;Address&gt; servers, String targetGroup) throws IOException {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      postMoveServersCalled = true;<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    }<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    @Override<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    public void preBalanceRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        String groupName) throws IOException {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      preBalanceRSGroupCalled = true;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    public void postBalanceRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        String groupName, boolean balancerRan) throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      postBalanceRSGroupCalled = true;<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>    @Override<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    public void preGetRSGroupInfo(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        final String groupName) throws IOException {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      preGetRSGroupInfoCalled = true;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>    @Override<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    public void postGetRSGroupInfo(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        final String groupName) throws IOException {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      postGetRSGroupInfoCalled = true;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>    @Override<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    public void preGetRSGroupInfoOfTable(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        final TableName tableName) throws IOException {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      preGetRSGroupInfoOfTableCalled = true;<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
-<span class="sourceLineNo">403</span><a name="line.403"></a>
-<span class="sourceLineNo">404</span>    @Override<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    public void postGetRSGroupInfoOfTable(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        final TableName tableName) throws IOException {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      postGetRSGroupInfoOfTableCalled = true;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
-<span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span>    @Override<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public void preListRSGroups(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx)<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        throws IOException {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      preListRSGroupsCalled = true;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    @Override<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    public void postListRSGroups(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx)<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        throws IOException {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      postListRSGroupsCalled = true;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>    @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    public void preGetRSGroupInfoOfServer(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        final Address server) throws IOException {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      preGetRSGroupInfoOfServerCalled = true;<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>    @Override<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    public void postGetRSGroupInfoOfServer(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        final Address server) throws IOException {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      postGetRSGroupInfoOfServerCalled = true;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    public void preAddRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        String name) throws IOException {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      preAddRSGroupCalled = true;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    @Override<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    public void postAddRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        String name) throws IOException {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      postAddRSGroupCalled = true;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    @Override<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    public void preMoveTables(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      preMoveTablesCalled = true;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    @Override<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    public void postMoveTables(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.385"></a>
+<span class="sourceLineNo">386</span>        Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      postMoveTablesCalled = true;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    @Override<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    public void preMoveServers(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        Set&lt;Address&gt; servers, String targetGroup) throws IOException {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      preMoveServersCalled = true;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>    @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    public void postMoveServers(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        Set&lt;Address&gt; servers, String targetGroup) throws IOException {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      postMoveServersCalled = true;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    @Override<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    public void preBalanceRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        String groupName) throws IOException {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      preBalanceRSGroupCalled = true;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    }<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    @Override<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    public void postBalanceRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        String groupName, boolean balancerRan) throws IOException {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      postBalanceRSGroupCalled = true;<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
+<span class="sourceLineNo">410</span><a name="line.410"></a>
+<span class="sourceLineNo">411</span>    @Override<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    public void preGetRSGroupInfo(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        final String groupName) throws IOException {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      preGetRSGroupInfoCalled = true;<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    }<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>    @Override<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    public void postGetRSGroupInfo(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        final String groupName) throws IOException {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      postGetRSGroupInfoCalled = true;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>    @Override<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    public void preGetRSGroupInfoOfTable(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        final TableName tableName) throws IOException {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      preGetRSGroupInfoOfTableCalled = true;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span>    @Override<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    public void postGetRSGroupInfoOfTable(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        final TableName tableName) throws IOException {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      postGetRSGroupInfoOfTableCalled = true;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
 <span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>  @Test<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  public void testGetRSGroupInfoCPHookCalled() throws Exception {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    rsGroupAdmin.getRSGroupInfo(RSGroupInfo.DEFAULT_GROUP);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    assertTrue(observer.preGetRSGroupInfoCalled);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    assertTrue(observer.postGetRSGroupInfoCalled);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>  }<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  @Test<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  public void testGetRSGroupInfoOfTableCPHookCalled() throws Exception {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    rsGroupAdmin.getRSGroupInfoOfTable(TableName.META_TABLE_NAME);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    assertTrue(observer.preGetRSGroupInfoOfTableCalled);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    assertTrue(observer.postGetRSGroupInfoOfTableCalled);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>  @Test<a name="line.449"></a>
-<span class="sourceLineNo">450</span>  public void testListRSGroupsCPHookCalled() throws Exception {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    rsGroupAdmin.listRSGroups();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    assertTrue(observer.preListRSGroupsCalled);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    assertTrue(observer.postListRSGroupsCalled);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  @Test<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public void testGetRSGroupInfoOfServerCPHookCalled() throws Exception {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    ServerName masterServerName = ((MiniHBaseCluster) cluster).getMaster().getServerName();<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    rsGroupAdmin.getRSGroupOfServer(masterServerName.getAddress());<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    assertTrue(observer.preGetRSGroupInfoOfServerCalled);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    assertTrue(observer.postGetRSGroupInfoOfServerCalled);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>  @Test<a name="line.464"></a>
-<span class="sourceLineNo">465</span>  public void testMoveServersAndTables() throws Exception {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    super.testMoveServersAndTables();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    assertTrue(observer.preMoveServersAndTables);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    assertTrue(observer.postMoveServersAndTables);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>  @Test<a name="line.470"></a>
-<span class="sourceLineNo">471</span>  public void testTableMoveTruncateAndDrop() throws Exception {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    super.testTableMoveTruncateAndDrop();<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    assertTrue(observer.preMoveTablesCalled);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    assertTrue(observer.postMoveTablesCalled);<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>  @Test<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  public void testRemoveServers() throws Exception {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    super.testRemoveServers();<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    assertTrue(observer.preRemoveServersCalled);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    assertTrue(observer.postRemoveServersCalled);<a name="line.481"></a>
-<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>  @Test<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  public void testMisplacedRegions() throws Exception {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    final TableName tableName = TableName.valueOf(tablePrefix+"_testMisplacedRegions");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    LOG.info("testMisplacedRegions");<a name="line.487"></a>
+<span class="sourceLineNo">435</span>    @Override<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    public void preListRSGroups(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx)<a name="line.436"></a>
+<span class="sourceLineNo">437</span>        throws IOException {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      preListRSGroupsCalled = true;<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>    @Override<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    public void postListRSGroups(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx)<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        throws IOException {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      postListRSGroupsCalled = true;<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>    @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    public void preGetRSGroupInfoOfServer(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        final Address server) throws IOException {<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      preGetRSGroupInfoOfServerCalled = true;<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>    @Override<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    public void postGetRSGroupInfoOfServer(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        final Address server) throws IOException {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      postGetRSGroupInfoOfServerCalled = true;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
+<span class="sourceLineNo">458</span>  }<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span>  @Test<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  public void testGetRSGroupInfoCPHookCalled() throws Exception {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    rsGroupAdmin.getRSGroupInfo(RSGroupInfo.DEFAULT_GROUP);<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    assertTrue(observer.preGetRSGroupInfoCalled);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>    assertTrue(observer.postGetRSGroupInfoCalled);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  }<a name="line.465"></a>
+<span class="sourceLineNo">466</span><a name="line.466"></a>
+<span class="sourceLineNo">467</span>  @Test<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  public void testGetRSGroupInfoOfTableCPHookCalled() throws Exception {<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    rsGroupAdmin.getRSGroupInfoOfTable(TableName.META_TABLE_NAME);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    assertTrue(observer.preGetRSGroupInfoOfTableCalled);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    assertTrue(observer.postGetRSGroupInfoOfTableCalled);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>  @Test<a name="line.474"></a>
+<span class="sourceLineNo">475</span>  public void testListRSGroupsCPHookCalled() throws Exception {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    rsGroupAdmin.listRSGroups();<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    assertTrue(observer.preListRSGroupsCalled);<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    assertTrue(observer.postListRSGroupsCalled);<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
+<span class="sourceLineNo">480</span><a name="line.480"></a>
+<span class="sourceLineNo">481</span>  @Test<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  public void testGetRSGroupInfoOfServerCPHookCalled() throws Exception {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    ServerName masterServerName = ((MiniHBaseCluster) cluster).getMaster().getServerName();<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    rsGroupAdmin.getRSGroupOfServer(masterServerName.getAddress());<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    assertTrue(observer.preGetRSGroupInfoOfServerCalled);<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    assertTrue(observer.postGetRSGroupInfoOfServerCalled);<a name="line.486"></a>
+<span class="sourceLineNo">487</span>  }<a name="line.487"></a>
 <span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    final RSGroupInfo RSGroupInfo = addGroup("testMisplacedRegions", 1);<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>    TEST_UTIL.createMultiRegionTable(tableName, new byte[]{'f'}, 15);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    TEST_UTIL.waitUntilAllRegionsAssigned(tableName);<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>    rsGroupAdminEndpoint.getGroupInfoManager()<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        .moveTables(Sets.newHashSet(tableName), RSGroupInfo.getName());<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    admin.setBalancerRunning(true,true);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    assertTrue(rsGroupAdmin.balanceRSGroup(RSGroupInfo.getName()));<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    admin.setBalancerRunning(false,true);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    assertTrue(observer.preBalanceRSGroupCalled);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    assertTrue(observer.postBalanceRSGroupCalled);<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>    TEST_UTIL.waitFor(60000, new Predicate&lt;Exception&gt;() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      @Override<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      public boolean evaluate() throws Exception {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        ServerName serverName =<a name="line.506"></a>
-<span class="sourceLineNo">507</span>            ServerName.valueOf(RSGroupInfo.getServers().iterator().next().toString(), 1);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>        return admin.getConnection().getAdmin()<a name="line.508"></a>
-<span class="sourceLineNo">509</span>            .getOnlineRegions(serverName).size() == 15;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    });<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  }<a name="line.512"></a>
+<span class="sourceLineNo">489</span>  @Test<a name="line.489"></a>
+<span class="sourceLineNo">490</span>  public void testMoveServersAndTables() throws Exception {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>    super.testMoveServersAndTables();<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    assertTrue(observer.preMoveServersAndTables);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    assertTrue(observer.postMoveServersAndTables);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  @Test<a name="line.495"></a>
+<span class="sourceLineNo">496</span>  public void testTableMoveTruncateAndDrop() throws Exception {<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    super.testTableMoveTruncateAndDrop();<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    assertTrue(observer.preMoveTablesCalled);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    assertTrue(observer.postMoveTablesCalled);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>  }<a name="line.500"></a>
+<span class="sourceLineNo">501</span><a name="line.501"></a>
+<span class="sourceLineNo">502</span>  @Test<a name="line.502"></a>
+<span class="sourceLineNo">503</span>  public void testRemoveServers() throws Exception {<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    super.testRemoveServers();<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    assertTrue(observer.preRemoveServersCalled);<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    assertTrue(observer.postRemoveServersCalled);<a name="line.506"></a>
+<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>  @Test<a name="line.509"></a>
+<span class="sourceLineNo">510</span>  public void testMisplacedRegions() throws Exception {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    final TableName tableName = TableName.valueOf(tablePrefix+"_testMisplacedRegions");<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    LOG.info("testMisplacedRegions");<a name="line.512"></a>
 <span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>  @Test<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  public void testCloneSnapshot() throws Exception {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    byte[] FAMILY = Bytes.toBytes("test");<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    String snapshotName = tableName.getNameAsString() + "_snap";<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    TableName clonedTableName = TableName.valueOf(tableName.getNameAsString() + "_clone");<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>    // create base table<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    TEST_UTIL.createTable(tableName, FAMILY);<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    // create snapshot<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    admin.snapshot(snapshotName, tableName);<a name="line.524"></a>
-<span class="sourceLineNo">525</span><a name="line.525"></a>
-<span class="sourceLineNo">526</span>    // clone<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    admin.cloneSnapshot(snapshotName, clonedTableName);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>  @Test<a name="line.530"></a>
-<span class="sourceLineNo">531</span>  public void testRSGroupsWithHBaseQuota() throws Exception {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    TEST_UTIL.getConfiguration().setBoolean(QuotaUtil.QUOTA_CONF_KEY, true);<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    restartHBaseCluster();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    try {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      TEST_UTIL.waitFor(90000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        @Override<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        public boolean evaluate() throws Exception {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          return admin.isTableAvailable(QuotaTableUtil.QUOTA_TABLE_NAME);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      });<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    } finally {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      TEST_UTIL.getConfiguration().setBoolean(QuotaUtil.QUOTA_CONF_KEY, false);<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      restartHBaseCluster();<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
-<span class="sourceLineNo">546</span><a name="line.546"></a>
-<span class="sourceLineNo">547</span>  @Test<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  public void testRSGroupListDoesNotContainFailedTableCreation() throws Exception {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    toggleQuotaCheckAndRestartMiniCluster(true);<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    String nsp = "np1";<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    NamespaceDescriptor nspDesc =<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        NamespaceDescriptor.create(nsp).addConfiguration(TableNamespaceManager.KEY_MAX_REGIONS, "5")<a name="line.552"></a>
-<span class="sourceLineNo">553</span>            .addConfiguration(TableNamespaceManager.KEY_MAX_TABLES, "2").build();<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    admin.createNamespace(nspDesc);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    assertEquals(3, admin.listNamespaceDescriptors().length);<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    HColumnDescriptor fam1 = new HColumnDescriptor("fam1");<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    HTableDescriptor tableDescOne =<a name="line.557"></a>
-<span class="sourceLineNo">558</span>        new HTableDescriptor(TableName.valueOf(nsp + TableName.NAMESPACE_DELIM + "table1"));<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    tableDescOne.addFamily(fam1);<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    admin.createTable(tableDescOne);<a name="line.560"></a>
-<span class="sourceLineNo">561</span><a name="line.561"></a>
-<span class="sourceLineNo">562</span>    HTableDescriptor tableDescTwo =<a name="line.562"></a>
-<span class="sourceLineNo">563</span>        new HTableDescriptor(TableName.valueOf(nsp + TableName.NAMESPACE_DELIM + "table2"));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    tableDescTwo.addFamily(fam1);<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    boolean constraintViolated = false;<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span>    try {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      admin.createTable(tableDescTwo, Bytes.toBytes("AAA"), Bytes.toBytes("ZZZ"),<a name="line.568"></a>
-<span class="sourceLineNo">569</span>          6);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      Assert.fail("Creation table should fail because of quota violation.");<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    } catch (Exception exp) {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      assertTrue(exp instanceof IOException);<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      constraintViolated = true;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    } finally {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      assertTrue("Constraint not violated for table " + tableDescTwo.getTableName(),<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          constraintViolated);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    List&lt;RSGroupInfo&gt; rsGroupInfoList = rsGroupAdmin.listRSGroups();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    boolean foundTable2 = false;<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    boolean foundTable1 = false;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    for(int i = 0; i &lt; rsGroupInfoList.size(); i++){<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      if(rsGroupInfoList.get(i).getTables().contains(tableDescTwo.getTableName())){<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        foundTable2 = true;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>      }<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      if(rsGroupInfoList.get(i).getTables().contains(tableDescOne.getTableName())){<a name="line.585"></a>
-<span class="sourceLineNo">586</span>        foundTable1 = true;<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>    assertFalse("Found table2 in rsgroup list.", foundTable2);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    assertTrue("Did not find table1 in rsgroup list", foundTable1);<a name="line.590"></a>
+<span class="sourceLineNo">514</span>    final RSGroupInfo RSGroupInfo = addGroup("testMisplacedRegions", 1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span><a name="line.515"></a>
+<span class="sourceLineNo">516</span>    TEST_UTIL.createMultiRegionTable(tableName, new byte[]{'f'}, 15);<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    TEST_UTIL.waitUntilAllRegionsAssigned(tableName);<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>    rsGroupAdminEndpoint.getGroupInfoManager()<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        .moveTables(Sets.newHashSet(tableName), RSGroupInfo.getName());<a name="line.520"></a>
+<span class="sourceLineNo">521</span><a name="line.521"></a>
+<span class="sourceLineNo">522</span>    admin.setBalancerRunning(true,true);<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    assertTrue(rsGroupAdmin.balanceRSGroup(RSGroupInfo.getName()));<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    admin.setBalancerRunning(false,true);<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    assertTrue(observer.preBalanceRSGroupCalled);<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    assertTrue(observer.postBalanceRSGroupCalled);<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>    TEST_UTIL.waitFor(60000, new Predicate&lt;Exception&gt;() {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      @Override<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      public boolean evaluate() throws Exception {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>        ServerName serverName =<a name="line.531"></a>
+<span class="sourceLineNo">532</span>            ServerName.valueOf(RSGroupInfo.getServers().iterator().next().toString(), 1);<a name="line.532"></a>
+<span class="sourceLineNo">533</span>        return admin.getConnection().getAdmin()<a name="line.533"></a>
+<span class="sourceLineNo">534</span>            .getOnlineRegions(serverName).size() == 15;<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      }<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    });<a name="line.536"></a>
+<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
+<span class="sourceLineNo">538</span><a name="line.538"></a>
+<span class="sourceLineNo">539</span>  @Test<a name="line.539"></a>
+<span class="sourceLineNo">540</span>  public void testCloneSnapshot() throws Exception {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    byte[] FAMILY = Bytes.toBytes("test");<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    String snapshotName = tableName.getNameAsString() + "_snap";<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    TableName clonedTableName = TableName.valueOf(tableName.getNameAsString() + "_clone");<a name="line.543"></a>
+<span class="sourceLineNo">544</span><a name="line.544"></a>
+<span class="sourceLineNo">545</span>    // create base table<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    TEST_UTIL.createTable(tableName, FAMILY);<a name="line.546"></a>
+<span class="sourceLineNo">547</span><a name="line.547"></a>
+<span class="sourceLineNo">548</span>    // create snapshot<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    admin.snapshot(snapshotName, tableName);<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    // clone<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    admin.cloneSnapshot(snapshotName, clonedTableName);<a name="line.552"></a>
+<span class="sourceLineNo">553</span>  }<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>  @Test<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  public void testRSGroupsWithHBaseQuota() throws Exception {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    TEST_UTIL.getConfiguration().setBoolean(QuotaUtil.QUOTA_CONF_KEY, true);<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    restartHBaseCluster();<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    try {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      TEST_UTIL.waitFor(90000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.560"></a>
+<span class="sourceLineNo">561</span>        @Override<a name="line.561"></a>
+<span class="sourceLineNo">562</span>        public boolean evaluate() throws Exception {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>          return admin.isTableAvailable(QuotaTableUtil.QUOTA_TABLE_NAME);<a name="line.563"></a>
+<span class="sourceLineNo">564</span>        }<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      });<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    } finally {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>      TEST_UTIL.getConfiguration().setBoolean(QuotaUtil.QUOTA_CONF_KEY, false);<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      restartHBaseCluster();<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
+<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
+<span class="sourceLineNo">571</span><a name="line.571"></a>
+<span class="sourceLineNo">572</span>  @Test<a name="line.572"></a>
+<span class="sourceLineNo">573</span>  public void testRSGroupListDoesNotContainFailedTableCreation() throws Exception {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    toggleQuotaCheckAndRestartMiniCluster(true);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    String nsp = "np1";<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    NamespaceDescriptor nspDesc =<a name="line.576"></a>
+<span class="sourceLineNo">577</span>        NamespaceDescriptor.create(nsp).addConfiguration(TableNamespaceManager.KEY_MAX_REGIONS, "5")<a name="line.577"></a>
+<span class="sourceLineNo">578</span>            .addConfiguration(TableNamespaceManager.KEY_MAX_TABLES, "2").build();<a name="line.578"></a>
+<span class="sourceLineNo">579</span>    admin.createNamespace(nspDesc);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    assertEquals(3, admin.listNamespaceDescriptors().length);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    HColumnDescriptor fam1 = new HColumnDescriptor("fam1");<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    HTableDescriptor tableDescOne =<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        new HTableDescriptor(TableName.valueOf(nsp + TableName.NAMESPACE_DELIM + "table1"));<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    tableDescOne.addFamily(fam1);<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    admin.createTable(tableDescOne);<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span>    HTableDescriptor tableDescTwo =<a name="line.587"></a>
+<span class="sourceLineNo">588</span>        new HTableDescriptor(TableName.valueOf(nsp + TableName.NAMESPACE_DELIM + "table2"));<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    tableDescTwo.addFamily(fam1);<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    boolean constraintViolated = false;<a name="line.590"></a>
 <span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>    TEST_UTIL.deleteTable(tableDescOne.getTableName());<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    admin.deleteNamespace(nspDesc.getName());<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    toggleQuotaCheckAndRestartMiniCluster(false);<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span>  }<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  private void toggleQuotaCheckAndRestartMiniCluster(boolean enable) throws Exception{<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    TEST_UTIL.getConfiguration().setBoolean(QuotaUtil.QUOTA_CONF_KEY, enable);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    TEST_UTIL.startMiniCluster(NUM_SLAVES_BASE - 1);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    TEST_UTIL.getConfiguration().setInt(<a name="line.601"></a>
-<span class="sourceLineNo">602</span>        ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART,<a name="line.602"></a>
-<span class="sourceLineNo">603</span>        NUM_SLAVES_BASE - 1);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    TEST_UTIL.getConfiguration().setBoolean(SnapshotManager.HBASE_SNAPSHOT_ENABLED, true);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    initialize();<a name="line.605"></a>
-<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>  private void restartHBaseCluster() throws Exception {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    LOG.info("\n\nShutting down cluster");<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    TEST_UTIL.shutdownMiniHBaseCluster();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    LOG.info("\n\nSleeping a bit");<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    Thread.sleep(2000);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    TEST_UTIL.restartHBaseCluster(NUM_SLAVES_BASE - 1);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    initialize();<a name="line.614"></a>
-<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>}<a name="line.616"></a>
+<span class="sourceLineNo">592</span>    try {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      admin.createTable(tableDescTwo, Bytes.toBytes("AAA"), Bytes.toBytes("ZZZ"),<a name="line.593"></a>
+<span class="sourceLineNo">594</span>          6);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      Assert.fail("Creation table should fail because of quota violation.");<a name="line.595"></a>
+<span class="sourceLineNo">596</span>    } catch (Exception exp) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      assertTrue(exp instanceof IOException);<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      constraintViolated = true;<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    } finally {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      assertTrue("Constraint not violated for table " + tableDescTwo.getTableName(),<a name="line.600"></a>
+<span class="sourceLineNo">601</span>          constraintViolated);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    }<a name="line.602"></a>
+<span class="sourceLineNo">603</span>    List&lt;RSGroupInfo&gt; rsGroupInfoList = rsGroupAdmin.listRSGroups();<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    boolean foundTable2 = false;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    boolean foundTable1 = false;<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    for(int i = 0; i &lt; rsGroupInfoList.size(); i++){<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      if(rsGroupInfoList.get(i).getTables().contains(tableDescTwo.getTableName())){<a name="line.607"></a>
+<span class="sourceLineNo">608</span>        foundTable2 = true;<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>      if(rsGroupInfoList.get(i).getTables().contains(tableDescOne.getTableName())){<a name="line.610"></a>
+<span class="sourceLineNo">611</span>        foundTable1 = true;<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      }<a name="line.612"></a>
+<span class="sourceLineNo">613</span>    }<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    assertFalse("Found table2 in rsgroup list.", foundTable2);<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    assertTrue("Did not find table1 in rsgroup list", foundTable1);<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>    TEST_UTIL.deleteTable(tableDescOne.getTableName());<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    admin.deleteNamespace(nspDesc.getName());<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    toggleQuotaCheckAndRestartMiniCluster(false);<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>  private void toggleQuotaCheckAndRestartMiniCluster(boolean enable) throws Exception{<a name="line.622"></a>
+<span class="sourceLineNo">623</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    TEST_UTIL.getConfiguration().setBoolean(QuotaUtil.QUOTA_CONF_KEY, enable);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    TEST_UTIL.startMiniCluster(NUM_SLAVES_BASE - 1);<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    TEST_UTIL.getConfiguration().setInt(<a name="line.626"></a>
+<span class="sourceLineNo">627</span>        ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART,<a name="line.627"></a>
+<span class="sourceLineNo">628</span>        NUM_SLAVES_BASE - 1);<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    TEST_UTIL.getConfiguration().setBoolean(SnapshotManager.HBASE_SNAPSHOT_ENABLED, true);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    initialize();<a name="line.630"></a>
+<span class="sourceLineNo">631</span>  }<a name="line.631"></a>
+<span class="sourceLineNo">632</span><a name="line.632"></a>
+<span class="sourceLineNo">633</span>  private void restartHBaseCluster() throws Exception {<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    LOG.info("\n\nShutting down cluster");<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    TEST_UTIL.shutdownMiniHBaseCluster();<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    LOG.info("\n\nSleeping a bit");<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    Thread.sleep(2000);<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    TEST_UTIL.restartHBaseCluster(NUM_SLAVES_BASE - 1);<a name="line.638"></a>
+<span class="sourceLineNo">639</span>    initialize();<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  }<a name="line.640"></a>
+<span class="sourceLineNo">641</span>}<a name="line.641"></a>
 
 
 


[10/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html
index 9319626..201cbdc 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html
@@ -76,230 +76,226 @@
 <span class="sourceLineNo">068</span><a name="line.68"></a>
 <span class="sourceLineNo">069</span>  private static final Logger LOG = LoggerFactory.getLogger(TestSnapshotFileCache.class);<a name="line.69"></a>
 <span class="sourceLineNo">070</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private static long sequenceId = 0;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private static FileSystem fs;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private static Path rootDir;<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  @BeforeClass<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  public static void startCluster() throws Exception {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    UTIL.startMiniDFSCluster(1);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    fs = UTIL.getDFSCluster().getFileSystem();<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    rootDir = UTIL.getDefaultRootDirPath();<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>  @AfterClass<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  public static void stopCluster() throws Exception {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    UTIL.shutdownMiniDFSCluster();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @After<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public void cleanupFiles() throws Exception {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // cleanup the snapshot directory<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    Path snapshotDir = SnapshotDescriptionUtils.getSnapshotsDir(rootDir);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    fs.delete(snapshotDir, true);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  @Test<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public void testLoadAndDelete() throws IOException {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    // don't refresh the cache unless we tell it to<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    long period = Long.MAX_VALUE;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    SnapshotFileCache cache = new SnapshotFileCache(fs, rootDir, period, 10000000,<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        "test-snapshot-file-cache-refresh", new SnapshotFiles());<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>    createAndTestSnapshotV1(cache, "snapshot1a", false, true);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    createAndTestSnapshotV1(cache, "snapshot1b", true, true);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    createAndTestSnapshotV2(cache, "snapshot2a", false, true);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    createAndTestSnapshotV2(cache, "snapshot2b", true, true);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  @Test<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  public void testReloadModifiedDirectory() throws IOException {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    // don't refresh the cache unless we tell it to<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    long period = Long.MAX_VALUE;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    SnapshotFileCache cache = new SnapshotFileCache(fs, rootDir, period, 10000000,<a name="line.112"></a>
-<span class="sourceLineNo">113</span>        "test-snapshot-file-cache-refresh", new SnapshotFiles());<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>    createAndTestSnapshotV1(cache, "snapshot1", false, true);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    // now delete the snapshot and add a file with a different name<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    createAndTestSnapshotV1(cache, "snapshot1", false, false);<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    createAndTestSnapshotV2(cache, "snapshot2", false, true);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    // now delete the snapshot and add a file with a different name<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    createAndTestSnapshotV2(cache, "snapshot2", false, false);<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>  @Test<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  public void testSnapshotTempDirReload() throws IOException {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    long period = Long.MAX_VALUE;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    // This doesn't refresh cache until we invoke it explicitly<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    SnapshotFileCache cache = new SnapshotFileCache(fs, rootDir, period, 10000000,<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        "test-snapshot-file-cache-refresh", new SnapshotFiles());<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    // Add a new non-tmp snapshot<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    createAndTestSnapshotV1(cache, "snapshot0v1", false, false);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    createAndTestSnapshotV1(cache, "snapshot0v2", false, false);<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>    // Add a new tmp snapshot<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    createAndTestSnapshotV2(cache, "snapshot1", true, false);<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>    // Add another tmp snapshot<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    createAndTestSnapshotV2(cache, "snapshot2", true, false);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  @Test<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public void testWeNeverCacheTmpDirAndLoadIt() throws Exception {<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>    final AtomicInteger count = new AtomicInteger(0);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    // don't refresh the cache unless we tell it to<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    long period = Long.MAX_VALUE;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    SnapshotFileCache cache = new SnapshotFileCache(fs, rootDir, period, 10000000,<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        "test-snapshot-file-cache-refresh", new SnapshotFiles()) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      @Override<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      List&lt;String&gt; getSnapshotsInProgress(final SnapshotManager snapshotManager)<a name="line.151"></a>
-<span class="sourceLineNo">152</span>              throws IOException {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        List&lt;String&gt; result = super.getSnapshotsInProgress(snapshotManager);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        count.incrementAndGet();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        return result;<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 public void triggerCacheRefreshForTesting() {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        super.triggerCacheRefreshForTesting();<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    };<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>    SnapshotMock.SnapshotBuilder complete =<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        createAndTestSnapshotV1(cache, "snapshot", false, false);<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>    SnapshotMock.SnapshotBuilder inProgress =<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        createAndTestSnapshotV1(cache, "snapshotInProgress", true, false);<a name="line.167"></a>
+<span class="sourceLineNo">071</span>  private static FileSystem fs;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private static Path rootDir;<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  @BeforeClass<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  public static void startCluster() throws Exception {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    UTIL.startMiniDFSCluster(1);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    fs = UTIL.getDFSCluster().getFileSystem();<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    rootDir = UTIL.getDefaultRootDirPath();<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  @AfterClass<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  public static void stopCluster() throws Exception {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    UTIL.shutdownMiniDFSCluster();<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  @After<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  public void cleanupFiles() throws Exception {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    // cleanup the snapshot directory<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    Path snapshotDir = SnapshotDescriptionUtils.getSnapshotsDir(rootDir);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    fs.delete(snapshotDir, true);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  }<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  @Test<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  public void testLoadAndDelete() throws IOException {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    // don't refresh the cache unless we tell it to<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    long period = Long.MAX_VALUE;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    SnapshotFileCache cache = new SnapshotFileCache(fs, rootDir, period, 10000000,<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        "test-snapshot-file-cache-refresh", new SnapshotFiles());<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>    createAndTestSnapshotV1(cache, "snapshot1a", false, true);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    createAndTestSnapshotV1(cache, "snapshot1b", true, true);<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>    createAndTestSnapshotV2(cache, "snapshot2a", false, true);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    createAndTestSnapshotV2(cache, "snapshot2b", true, true);<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>  @Test<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  public void testReloadModifiedDirectory() throws IOException {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    // don't refresh the cache unless we tell it to<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    long period = Long.MAX_VALUE;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    SnapshotFileCache cache = new SnapshotFileCache(fs, rootDir, period, 10000000,<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        "test-snapshot-file-cache-refresh", new SnapshotFiles());<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>    createAndTestSnapshotV1(cache, "snapshot1", false, true);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    // now delete the snapshot and add a file with a different name<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    createAndTestSnapshotV1(cache, "snapshot1", false, false);<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>    createAndTestSnapshotV2(cache, "snapshot2", false, true);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    // now delete the snapshot and add a file with a different name<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    createAndTestSnapshotV2(cache, "snapshot2", false, false);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  @Test<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public void testSnapshotTempDirReload() throws IOException {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    long period = Long.MAX_VALUE;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    // This doesn't refresh cache until we invoke it explicitly<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    SnapshotFileCache cache = new SnapshotFileCache(fs, rootDir, period, 10000000,<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        "test-snapshot-file-cache-refresh", new SnapshotFiles());<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>    // Add a new non-tmp snapshot<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    createAndTestSnapshotV1(cache, "snapshot0v1", false, false);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    createAndTestSnapshotV1(cache, "snapshot0v2", false, false);<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>    // Add a new tmp snapshot<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    createAndTestSnapshotV2(cache, "snapshot1", true, false);<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span>    // Add another tmp snapshot<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    createAndTestSnapshotV2(cache, "snapshot2", true, false);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  @Test<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  public void testWeNeverCacheTmpDirAndLoadIt() throws Exception {<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>    final AtomicInteger count = new AtomicInteger(0);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // don't refresh the cache unless we tell it to<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    long period = Long.MAX_VALUE;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    SnapshotFileCache cache = new SnapshotFileCache(fs, rootDir, period, 10000000,<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        "test-snapshot-file-cache-refresh", new SnapshotFiles()) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      @Override<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      List&lt;String&gt; getSnapshotsInProgress(final SnapshotManager snapshotManager)<a name="line.150"></a>
+<span class="sourceLineNo">151</span>              throws IOException {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        List&lt;String&gt; result = super.getSnapshotsInProgress(snapshotManager);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        count.incrementAndGet();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>        return result;<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>      @Override public void triggerCacheRefreshForTesting() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        super.triggerCacheRefreshForTesting();<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    };<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>    SnapshotMock.SnapshotBuilder complete =<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        createAndTestSnapshotV1(cache, "snapshot", false, false);<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>    int countBeforeCheck = count.get();<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>    FSUtils.logFileSystemState(fs, rootDir, LOG);<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>    int countBeforeCheck = count.get();<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    FSUtils.logFileSystemState(fs, rootDir, LOG);<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>    List&lt;FileStatus&gt; allStoreFiles = getStoreFilesForSnapshot(complete);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    Iterable&lt;FileStatus&gt; deletableFiles = cache.getUnreferencedFiles(allStoreFiles, null);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    assertTrue(Iterables.isEmpty(deletableFiles));<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    // no need for tmp dir check as all files are accounted for.<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    assertEquals(0, count.get() - countBeforeCheck);<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>    // add a random file to make sure we refresh<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    FileStatus randomFile = mockStoreFile(UTIL.getRandomUUID().toString());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    allStoreFiles.add(randomFile);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    deletableFiles = cache.getUnreferencedFiles(allStoreFiles, null);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    assertEquals(randomFile, Iterables.getOnlyElement(deletableFiles));<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    assertEquals(1, count.get() - countBeforeCheck); // we check the tmp directory<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>  private List&lt;FileStatus&gt; getStoreFilesForSnapshot(SnapshotMock.SnapshotBuilder builder)<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      throws IOException {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    final List&lt;FileStatus&gt; allStoreFiles = Lists.newArrayList();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    SnapshotReferenceUtil<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        .visitReferencedFiles(UTIL.getConfiguration(), fs, builder.getSnapshotsDir(),<a name="line.192"></a>
-<span class="sourceLineNo">193</span>            new SnapshotReferenceUtil.SnapshotVisitor() {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>              @Override public void storeFile(RegionInfo regionInfo, String familyName,<a name="line.194"></a>
-<span class="sourceLineNo">195</span>                  SnapshotProtos.SnapshotRegionManifest.StoreFile storeFile) throws IOException {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>                FileStatus status = mockStoreFile(storeFile.getName());<a name="line.196"></a>
-<span class="sourceLineNo">197</span>                allStoreFiles.add(status);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>              }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            });<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    return allStoreFiles;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>  private FileStatus mockStoreFile(String storeFileName) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    FileStatus status = mock(FileStatus.class);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    Path path = mock(Path.class);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    when(path.getName()).thenReturn(storeFileName);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    when(status.getPath()).thenReturn(path);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    return status;<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>  class SnapshotFiles implements SnapshotFileCache.SnapshotFileInspector {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    @Override<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    public Collection&lt;String&gt; filesUnderSnapshot(final Path snapshotDir) throws IOException {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      Collection&lt;String&gt; files =  new HashSet&lt;&gt;();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      files.addAll(SnapshotReferenceUtil.getHFileNames(UTIL.getConfiguration(), fs, snapshotDir));<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      return files;<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>  private SnapshotMock.SnapshotBuilder createAndTestSnapshotV1(final SnapshotFileCache cache,<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      final String name, final boolean tmp, final boolean removeOnExit) throws IOException {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    SnapshotMock snapshotMock = new SnapshotMock(UTIL.getConfiguration(), fs, rootDir);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    SnapshotMock.SnapshotBuilder builder = snapshotMock.createSnapshotV1(name, name);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    createAndTestSnapshot(cache, builder, tmp, removeOnExit);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    return builder;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  }<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>  private void createAndTestSnapshotV2(final SnapshotFileCache cache, final String name,<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      final boolean tmp, final boolean removeOnExit) throws IOException {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    SnapshotMock snapshotMock = new SnapshotMock(UTIL.getConfiguration(), fs, rootDir);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    SnapshotMock.SnapshotBuilder builder = snapshotMock.createSnapshotV2(name, name);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    createAndTestSnapshot(cache, builder, tmp, removeOnExit);<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>  private void createAndTestSnapshot(final SnapshotFileCache cache,<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      final SnapshotMock.SnapshotBuilder builder,<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      final boolean tmp, final boolean removeOnExit) throws IOException {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    List&lt;Path&gt; files = new ArrayList&lt;&gt;();<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    for (int i = 0; i &lt; 3; ++i) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      for (Path filePath: builder.addRegion()) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        String fileName = filePath.getName();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        if (tmp) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          // We should be able to find all the files while the snapshot creation is in-progress<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          FSUtils.logFileSystemState(fs, rootDir, LOG);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          Iterable&lt;FileStatus&gt; nonSnapshot = getNonSnapshotFiles(cache, filePath);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>          assertFalse("Cache didn't find " + fileName, Iterables.contains(nonSnapshot, fileName));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        files.add(filePath);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
+<span class="sourceLineNo">169</span>    List&lt;FileStatus&gt; allStoreFiles = getStoreFilesForSnapshot(complete);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    Iterable&lt;FileStatus&gt; deletableFiles = cache.getUnreferencedFiles(allStoreFiles, null);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    assertTrue(Iterables.isEmpty(deletableFiles));<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    // no need for tmp dir check as all files are accounted for.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    assertEquals(0, count.get() - countBeforeCheck);<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>    // add a random file to make sure we refresh<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    FileStatus randomFile = mockStoreFile(UTIL.getRandomUUID().toString());<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    allStoreFiles.add(randomFile);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    deletableFiles = cache.getUnreferencedFiles(allStoreFiles, null);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    assertEquals(randomFile, Iterables.getOnlyElement(deletableFiles));<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    assertEquals(1, count.get() - countBeforeCheck); // we check the tmp directory<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  private List&lt;FileStatus&gt; getStoreFilesForSnapshot(SnapshotMock.SnapshotBuilder builder)<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      throws IOException {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    final List&lt;FileStatus&gt; allStoreFiles = Lists.newArrayList();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    SnapshotReferenceUtil<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .visitReferencedFiles(UTIL.getConfiguration(), fs, builder.getSnapshotsDir(),<a name="line.188"></a>
+<span class="sourceLineNo">189</span>            new SnapshotReferenceUtil.SnapshotVisitor() {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>              @Override public void storeFile(RegionInfo regionInfo, String familyName,<a name="line.190"></a>
+<span class="sourceLineNo">191</span>                  SnapshotProtos.SnapshotRegionManifest.StoreFile storeFile) throws IOException {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>                FileStatus status = mockStoreFile(storeFile.getName());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>                allStoreFiles.add(status);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>              }<a name="line.194"></a>
+<span class="sourceLineNo">195</span>            });<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    return allStoreFiles;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  }<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>  private FileStatus mockStoreFile(String storeFileName) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    FileStatus status = mock(FileStatus.class);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    Path path = mock(Path.class);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    when(path.getName()).thenReturn(storeFileName);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    when(status.getPath()).thenReturn(path);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    return status;<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>  class SnapshotFiles implements SnapshotFileCache.SnapshotFileInspector {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    @Override<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    public Collection&lt;String&gt; filesUnderSnapshot(final Path snapshotDir) throws IOException {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      Collection&lt;String&gt; files =  new HashSet&lt;&gt;();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      files.addAll(SnapshotReferenceUtil.getHFileNames(UTIL.getConfiguration(), fs, snapshotDir));<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      return files;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>  private SnapshotMock.SnapshotBuilder createAndTestSnapshotV1(final SnapshotFileCache cache,<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      final String name, final boolean tmp, final boolean removeOnExit) throws IOException {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    SnapshotMock snapshotMock = new SnapshotMock(UTIL.getConfiguration(), fs, rootDir);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    SnapshotMock.SnapshotBuilder builder = snapshotMock.createSnapshotV1(name, name);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    createAndTestSnapshot(cache, builder, tmp, removeOnExit);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    return builder;<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  private void createAndTestSnapshotV2(final SnapshotFileCache cache, final String name,<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      final boolean tmp, final boolean removeOnExit) throws IOException {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    SnapshotMock snapshotMock = new SnapshotMock(UTIL.getConfiguration(), fs, rootDir);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    SnapshotMock.SnapshotBuilder builder = snapshotMock.createSnapshotV2(name, name);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    createAndTestSnapshot(cache, builder, tmp, removeOnExit);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  private void createAndTestSnapshot(final SnapshotFileCache cache,<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      final SnapshotMock.SnapshotBuilder builder,<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      final boolean tmp, final boolean removeOnExit) throws IOException {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    List&lt;Path&gt; files = new ArrayList&lt;&gt;();<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    for (int i = 0; i &lt; 3; ++i) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      for (Path filePath: builder.addRegion()) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        if (tmp) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>          // We should be able to find all the files while the snapshot creation is in-progress<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          FSUtils.logFileSystemState(fs, rootDir, LOG);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>          assertFalse("Cache didn't find " + filePath,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>            contains(getNonSnapshotFiles(cache, filePath), filePath));<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        }<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        files.add(filePath);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      }<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // Finalize the snapshot<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    if (!tmp) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      builder.commit();<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>    // Finalize the snapshot<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    if (!tmp) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      builder.commit();<a name="line.254"></a>
+<span class="sourceLineNo">252</span>    // Make sure that all files are still present<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    for (Path path: files) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      assertFalse("Cache didn't find " + path, contains(getNonSnapshotFiles(cache, path), path));<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>    // Make sure that all files are still present<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    for (Path path: files) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      Iterable&lt;FileStatus&gt; nonSnapshotFiles = getNonSnapshotFiles(cache, path);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      assertFalse("Cache didn't find " + path.getName(),<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          Iterables.contains(nonSnapshotFiles, path.getName()));<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>    FSUtils.logFileSystemState(fs, rootDir, LOG);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    if (removeOnExit) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      LOG.debug("Deleting snapshot.");<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      fs.delete(builder.getSnapshotsDir(), true);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      FSUtils.logFileSystemState(fs, rootDir, LOG);<a name="line.268"></a>
+<span class="sourceLineNo">257</span>    FSUtils.logFileSystemState(fs, rootDir, LOG);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    if (removeOnExit) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      LOG.debug("Deleting snapshot.");<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      fs.delete(builder.getSnapshotsDir(), true);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      FSUtils.logFileSystemState(fs, rootDir, LOG);<a name="line.261"></a>
+<span class="sourceLineNo">262</span><a name="line.262"></a>
+<span class="sourceLineNo">263</span>      // then trigger a refresh<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      cache.triggerCacheRefreshForTesting();<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      // and not it shouldn't find those files<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      for (Path filePath: files) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        assertTrue("Cache found '" + filePath + "', but it shouldn't have.",<a name="line.267"></a>
+<span class="sourceLineNo">268</span>          contains(getNonSnapshotFiles(cache, filePath), filePath));<a name="line.268"></a>
 <span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>      // The files should be in cache until next refresh<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      for (Path filePath: files) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        Iterable&lt;FileStatus&gt; nonSnapshotFiles = getNonSnapshotFiles(cache, filePath);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        assertFalse("Cache didn't find " + filePath.getName(), Iterables.contains(nonSnapshotFiles,<a name="line.273"></a>
-<span class="sourceLineNo">274</span>            filePath.getName()));<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      }<a name="line.275"></a>
-<span class="sourceLineNo">276</span><a name="line.276"></a>
-<span class="sourceLineNo">277</span>      // then trigger a refresh<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      cache.triggerCacheRefreshForTesting();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      // and not it shouldn't find those files<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      for (Path filePath: files) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        Iterable&lt;FileStatus&gt; nonSnapshotFiles = getNonSnapshotFiles(cache, filePath);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        assertTrue("Cache found '" + filePath.getName() + "', but it shouldn't have.",<a name="line.282"></a>
-<span class="sourceLineNo">283</span>            !Iterables.contains(nonSnapshotFiles, filePath.getName()));<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      }<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>  private Iterable&lt;FileStatus&gt; getNonSnapshotFiles(SnapshotFileCache cache, Path storeFile)<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      throws IOException {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return cache.getUnreferencedFiles(<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        Arrays.asList(FSUtils.listStatus(fs, storeFile.getParent())), null<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    );<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
-<span class="sourceLineNo">294</span>}<a name="line.294"></a>
+<span class="sourceLineNo">270</span>      }<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>  private static boolean contains(Iterable&lt;FileStatus&gt; files, Path filePath) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    for (FileStatus status: files) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      LOG.debug("debug in contains, 3.1: " + status.getPath() + " filePath:" + filePath);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      if (filePath.equals(status.getPath())) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        return true;<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>    return false;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>  private static Iterable&lt;FileStatus&gt; getNonSnapshotFiles(SnapshotFileCache cache, Path storeFile)<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      throws IOException {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    return cache.getUnreferencedFiles(<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        Arrays.asList(FSUtils.listStatus(fs, storeFile.getParent())), null<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    );<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>}<a name="line.290"></a>
 
 
 


[07/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html
index ef39f9e..f188fed 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html
@@ -25,543 +25,555 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <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 static org.mockito.Mockito.mock;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.mockito.Mockito.verify;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.mockito.Mockito.when;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.HashMap;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Map;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.UUID;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.Callable;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.Cell;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Waiter;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Put;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Table;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.AfterClass;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.Assert;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.Before;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.BeforeClass;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.ClassRule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Test;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.experimental.categories.Category;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.slf4j.Logger;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.slf4j.LoggerFactory;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>/**<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.68"></a>
-<span class="sourceLineNo">069</span> */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.70"></a>
-<span class="sourceLineNo">071</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  @ClassRule<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.77"></a>
+<span class="sourceLineNo">020</span>import static org.mockito.Mockito.doNothing;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.mockito.Mockito.mock;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.mockito.Mockito.spy;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.mockito.Mockito.verify;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.mockito.Mockito.when;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.ArrayList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.List;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Map;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.UUID;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.Callable;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.Waiter;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Put;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.Table;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.junit.AfterClass;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.junit.Assert;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.Before;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.BeforeClass;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.ClassRule;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Test;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.experimental.categories.Category;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.slf4j.Logger;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.LoggerFactory;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>/**<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.70"></a>
+<span class="sourceLineNo">071</span> */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.72"></a>
+<span class="sourceLineNo">073</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  @ClassRule<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.77"></a>
 <span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  static int numRegionServers;<a name="line.79"></a>
+<span class="sourceLineNo">079</span>  private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.79"></a>
 <span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  @BeforeClass<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public static void setUpBeforeClass() throws Exception {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    TestReplicationBase.setUpBeforeClass();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<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>  @AfterClass<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public static void tearDownAfterClass() throws Exception {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    TestReplicationBase.tearDownAfterClass();<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    // check stop is called<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() &gt; 0);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  @Before<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public void setup() throws Exception {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    ReplicationEndpointForTest.contructedCount.set(0);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    ReplicationEndpointForTest.startedCount.set(0);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    ReplicationEndpointForTest.replicateCount.set(0);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    ReplicationEndpointForTest.lastEntries = null;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    final List&lt;RegionServerThread&gt; rsThreads =<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    for (RegionServerThread rs : rsThreads) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    // Wait for  all log roll to finish<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    utility1.waitFor(3000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      @Override<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      public boolean evaluate() throws Exception {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        for (RegionServerThread rs : rsThreads) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>            return false;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>          }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        return true;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      }<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>      @Override<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      public String explainFailure() throws Exception {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        List&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        for (RegionServerThread rs : rsThreads) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>            logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.123"></a>
-<span class="sourceLineNo">124</span>          }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<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><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  @Test<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public void testCustomReplicationEndpoint() throws Exception {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    // test installing a custom replication endpoint other than the default one.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    admin.addPeer("testCustomReplicationEndpoint",<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.135"></a>
-<span class="sourceLineNo">136</span>            .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>    // check whether the class has been constructed and started<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      @Override<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      public boolean evaluate() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        return ReplicationEndpointForTest.contructedCount.get() &gt;= numRegionServers;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    });<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      @Override<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      public boolean evaluate() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        return ReplicationEndpointForTest.startedCount.get() &gt;= numRegionServers;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    });<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.153"></a>
+<span class="sourceLineNo">081</span>  static int numRegionServers;<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  @BeforeClass<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static void setUpBeforeClass() throws Exception {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    TestReplicationBase.setUpBeforeClass();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  @AfterClass<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public static void tearDownAfterClass() throws Exception {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    TestReplicationBase.tearDownAfterClass();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    // check stop is called<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() &gt; 0);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  @Before<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public void setup() throws Exception {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    ReplicationEndpointForTest.contructedCount.set(0);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    ReplicationEndpointForTest.startedCount.set(0);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    ReplicationEndpointForTest.replicateCount.set(0);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    ReplicationEndpointForTest.lastEntries = null;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    final List&lt;RegionServerThread&gt; rsThreads =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    for (RegionServerThread rs : rsThreads) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    // Wait for  all log roll to finish<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    utility1.waitFor(3000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      @Override<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      public boolean evaluate() throws Exception {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        for (RegionServerThread rs : rsThreads) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>            return false;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        return true;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>      @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      public String explainFailure() throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        List&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        for (RegionServerThread rs : rsThreads) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>            logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>          }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<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>  }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  @Test<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  public void testCustomReplicationEndpoint() throws Exception {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // test installing a custom replication endpoint other than the default one.<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    admin.addPeer("testCustomReplicationEndpoint",<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.137"></a>
+<span class="sourceLineNo">138</span>            .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // check whether the class has been constructed and started<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      @Override<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      public boolean evaluate() throws Exception {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        return ReplicationEndpointForTest.contructedCount.get() &gt;= numRegionServers;<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      @Override<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      public boolean evaluate() throws Exception {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        return ReplicationEndpointForTest.startedCount.get() &gt;= numRegionServers;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    });<a name="line.153"></a>
 <span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // now replicate some data.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    doPut(Bytes.toBytes("row42"));<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      @Override<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      public boolean evaluate() throws Exception {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<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>    doAssert(Bytes.toBytes("row42"));<a name="line.165"></a>
+<span class="sourceLineNo">155</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>    // now replicate some data.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    doPut(Bytes.toBytes("row42"));<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      @Override<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      public boolean evaluate() throws Exception {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<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><a name="line.166"></a>
-<span class="sourceLineNo">167</span>    admin.removePeer("testCustomReplicationEndpoint");<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  @Test<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    int peerCount = admin.getPeersCount();<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    admin.addPeer(id,<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    // debug.  Peer needs to be up for the edit to make it across. This wait on<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // peer count seems to be a hack that has us not progress till peer is up.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (admin.getPeersCount() &lt;= peerCount) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      Threads.sleep(100);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // now replicate some data<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    doPut(row);<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public boolean evaluate() throws Exception {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        // only send over one edit.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        LOG.info("count=" + count);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        return ReplicationEndpointReturningFalse.replicated.get();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    });<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      throw ReplicationEndpointReturningFalse.ex.get();<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>    admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<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>  @Test<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  public void testInterClusterReplication() throws Exception {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    final String id = "testInterClusterReplication";<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    List&lt;HRegion&gt; regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    int totEdits = 0;<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // Make sure edits are spread across regions because we do region based batching<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    // before shipping edits.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    for(HRegion region: regions) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      RegionInfo hri = region.getRegionInfo();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      byte[] row = hri.getStartKey();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      for (int i = 0; i &lt; 100; i++) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        if (row.length &gt; 0) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          Put put = new Put(row);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          put.addColumn(famName, row, row);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          region.put(put);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          totEdits++;<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>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>    admin.addPeer(id,<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.229"></a>
-<span class="sourceLineNo">230</span>            .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        null);<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>    final int numEdits = totEdits;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      @Override<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      public boolean evaluate() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>      @Override<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      public String explainFailure() throws Exception {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.242"></a>
-<span class="sourceLineNo">243</span>            + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        return failure;<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>    admin.removePeer("testInterClusterReplication");<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    utility1.deleteTableData(tableName);<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>  @Test<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    //test that we can create mutliple WALFilters reflectively<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        EverythingPassesWALEntryFilter.class.getName() +<a name="line.258"></a>
-<span class="sourceLineNo">259</span>            "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // now replicate some data.<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      doPut(connection, Bytes.toBytes("row1"));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      doPut(connection, row);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      doPut(connection, Bytes.toBytes("row2"));<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      public boolean evaluate() throws Exception {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    });<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    //make sure our reflectively created filter is in the filter chain<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<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>  @Test (expected=IOException.class)<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  public void testWALEntryFilterAddValidation() throws Exception {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    //test that we can create mutliple WALFilters reflectively<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        "IAmNotARealWalEntryFilter");<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    admin.addPeer("testWALEntryFilterAddValidation", rpc);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  @Test (expected=IOException.class)<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    //test that we can create mutliple WALFilters reflectively<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        "IAmNotARealWalEntryFilter");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  }<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  @Test<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  public void testMetricsSourceBaseSourcePassthrough(){<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    /*<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    allows for custom JMX metrics.<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    the two layers of wrapping to the actual BaseSource.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    */<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    String id = "id";<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    Map&lt;String, MetricsReplicationSourceSource&gt; singleSourceSourceByTable = new HashMap&lt;&gt;();<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    MetricsSource source = new MetricsSource(id, singleSourceSource, globalSourceSource,<a name="line.322"></a>
-<span class="sourceLineNo">323</span>        singleSourceSourceByTable);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    String gaugeName = "gauge";<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    String singleGaugeName = "source.id." + gaugeName;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    String globalGaugeName = "source." + gaugeName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    long delta = 1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    String counterName = "counter";<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    String singleCounterName = "source.id." + counterName;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    String globalCounterName = "source." + counterName;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    long count = 2;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    source.decGauge(gaugeName, delta);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    source.getMetricsContext();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    source.getMetricsDescription();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    source.getMetricsJmxContext();<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    source.getMetricsName();<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    source.incCounters(counterName, count);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    source.incGauge(gaugeName, delta);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    source.init();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    source.removeMetric(gaugeName);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    source.setGauge(gaugeName, delta);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    source.updateHistogram(counterName, count);<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    verify(globalRms).getMetricsContext();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    verify(globalRms).getMetricsJmxContext();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    verify(globalRms).getMetricsName();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    verify(singleRms).incCounters(singleCounterName, count);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    verify(globalRms).incCounters(globalCounterName, count);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    verify(globalRms).init();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    verify(singleRms).removeMetric(singleGaugeName);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    verify(globalRms).removeMetric(globalGaugeName);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    //check singleSourceSourceByTable metrics.<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    // singleSourceSourceByTable map entry will be created only<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    // after calling #setAgeOfLastShippedOpByTable<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    boolean containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        .containsKey("RandomNewTable");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    Assert.assertEquals(false, containsRandomNewTable);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    source.setAgeOfLastShippedOpByTable(123L, "RandomNewTable");<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        .containsKey("RandomNewTable");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    Assert.assertEquals(true, containsRandomNewTable);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    MetricsReplicationSourceSource msr = source.getSingleSourceSourceByTable()<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        .get("RandomNewTable");<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // cannot put more concreate value here to verify because the age is arbitrary.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    // as long as it's greater than 0, we see it as correct answer.<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    Assert.assertTrue(msr.getLastShippedAge() &gt; 0);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private void doPut(byte[] row) throws IOException {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      doPut(connection, row);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    try (Table t = connection.getTable(tableName)) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      Put put = new Put(row);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      put.addColumn(famName, row, row);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      t.put(put);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>  private static void doAssert(byte[] row) throws Exception {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      return; // first call<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    List&lt;Cell&gt; cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    Assert.assertEquals(1, cells.size());<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      cells.get(0).getRowLength(), row, 0, row.length));<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    static UUID uuid = utility1.getRandomUUID();<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    static AtomicInteger contructedCount = new AtomicInteger();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    static AtomicInteger startedCount = new AtomicInteger();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    static volatile List&lt;Entry&gt; lastEntries = null;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public ReplicationEndpointForTest() {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      replicateCount.set(0);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      contructedCount.incrementAndGet();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    @Override<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    public UUID getPeerUUID() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      return uuid;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>    @Override<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      replicateCount.incrementAndGet();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      lastEntries = new ArrayList&lt;&gt;(replicateContext.entries);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      return true;<a name="line.425"></a>
+<span class="sourceLineNo">167</span>    doAssert(Bytes.toBytes("row42"));<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    admin.removePeer("testCustomReplicationEndpoint");<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  @Test<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    int peerCount = admin.getPeersCount();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    admin.addPeer(id,<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    // debug.  Peer needs to be up for the edit to make it across. This wait on<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    // peer count seems to be a hack that has us not progress till peer is up.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    if (admin.getPeersCount() &lt;= peerCount) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      Threads.sleep(100);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    // now replicate some data<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    doPut(row);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<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>        // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        // only send over one edit.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        LOG.info("count=" + count);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        return ReplicationEndpointReturningFalse.replicated.get();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    });<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      throw ReplicationEndpointReturningFalse.ex.get();<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>    admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  @Test<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  public void testInterClusterReplication() throws Exception {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    final String id = "testInterClusterReplication";<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>    List&lt;HRegion&gt; regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    int totEdits = 0;<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // Make sure edits are spread across regions because we do region based batching<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    // before shipping edits.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    for(HRegion region: regions) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      RegionInfo hri = region.getRegionInfo();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      byte[] row = hri.getStartKey();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      for (int i = 0; i &lt; 100; i++) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        if (row.length &gt; 0) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          Put put = new Put(row);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          put.addColumn(famName, row, row);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          region.put(put);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>          totEdits++;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>    admin.addPeer(id,<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.231"></a>
+<span class="sourceLineNo">232</span>            .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        null);<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>    final int numEdits = totEdits;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      @Override<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      public boolean evaluate() throws Exception {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<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>      public String explainFailure() throws Exception {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.244"></a>
+<span class="sourceLineNo">245</span>            + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        return failure;<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>    admin.removePeer("testInterClusterReplication");<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    utility1.deleteTableData(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">254</span>  @Test<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    //test that we can create mutliple WALFilters reflectively<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        EverythingPassesWALEntryFilter.class.getName() +<a name="line.260"></a>
+<span class="sourceLineNo">261</span>            "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    // now replicate some data.<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      doPut(connection, Bytes.toBytes("row1"));<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      doPut(connection, row);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      doPut(connection, Bytes.toBytes("row2"));<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      public boolean evaluate() throws Exception {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 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><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    //make sure our reflectively created filter is in the filter chain<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<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>  @Test (expected=IOException.class)<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  public void testWALEntryFilterAddValidation() throws Exception {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    //test that we can create mutliple WALFilters reflectively<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        "IAmNotARealWalEntryFilter");<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    admin.addPeer("testWALEntryFilterAddValidation", rpc);<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>  @Test (expected=IOException.class)<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    //test that we can create mutliple WALFilters reflectively<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        "IAmNotARealWalEntryFilter");<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  @Test<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public void testMetricsSourceBaseSourcePassthrough(){<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    /*<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    allows for custom JMX metrics.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    the two layers of wrapping to the actual BaseSource.<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    String id = "id";<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    MetricsReplicationSourceSource spyglobalSourceSource = spy(globalSourceSource);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    doNothing().when(spyglobalSourceSource).incrFailedRecoveryQueue();<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    Map&lt;String, MetricsReplicationSourceSource&gt; singleSourceSourceByTable = new HashMap&lt;&gt;();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    MetricsSource source = new MetricsSource(id, singleSourceSource, spyglobalSourceSource,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        singleSourceSourceByTable);<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    String gaugeName = "gauge";<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    String singleGaugeName = "source.id." + gaugeName;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    String globalGaugeName = "source." + gaugeName;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    long delta = 1;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    String counterName = "counter";<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    String singleCounterName = "source.id." + counterName;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    String globalCounterName = "source." + counterName;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    long count = 2;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    source.decGauge(gaugeName, delta);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    source.getMetricsContext();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    source.getMetricsDescription();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    source.getMetricsJmxContext();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    source.getMetricsName();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    source.incCounters(counterName, count);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    source.incGauge(gaugeName, delta);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    source.init();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    source.removeMetric(gaugeName);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    source.setGauge(gaugeName, delta);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    source.updateHistogram(counterName, count);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    source.incrFailedRecoveryQueue();<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>    verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    verify(globalRms).getMetricsContext();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    verify(globalRms).getMetricsJmxContext();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    verify(globalRms).getMetricsName();<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    verify(singleRms).incCounters(singleCounterName, count);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    verify(globalRms).incCounters(globalCounterName, count);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    verify(globalRms).init();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    verify(singleRms).removeMetric(singleGaugeName);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    verify(globalRms).removeMetric(globalGaugeName);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    verify(spyglobalSourceSource).incrFailedRecoveryQueue();<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    //check singleSourceSourceByTable metrics.<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    // singleSourceSourceByTable map entry will be created only<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    // after calling #setAgeOfLastShippedOpByTable<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    boolean containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        .containsKey("RandomNewTable");<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    Assert.assertEquals(false, containsRandomNewTable);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    source.setAgeOfLastShippedOpByTable(123L, "RandomNewTable");<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        .containsKey("RandomNewTable");<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    Assert.assertEquals(true, containsRandomNewTable);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    MetricsReplicationSourceSource msr = source.getSingleSourceSourceByTable()<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        .get("RandomNewTable");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    // cannot put more concreate value here to verify because the age is arbitrary.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    // as long as it's greater than 0, we see it as correct answer.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    Assert.assertTrue(msr.getLastShippedAge() &gt; 0);<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  private void doPut(byte[] row) throws IOException {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      doPut(connection, row);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    try (Table t = connection.getTable(tableName)) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      Put put = new Put(row);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      put.addColumn(famName, row, row);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      t.put(put);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  private static void doAssert(byte[] row) throws Exception {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      return; // first call<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    List&lt;Cell&gt; cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    Assert.assertEquals(1, cells.size());<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      cells.get(0).getRowLength(), row, 0, row.length));<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>  public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    static UUID uuid = utility1.getRandomUUID();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    static AtomicInteger contructedCount = new AtomicInteger();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    static AtomicInteger startedCount = new AtomicInteger();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    static volatile List&lt;Entry&gt; lastEntries = null;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>    public ReplicationEndpointForTest() {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      replicateCount.set(0);<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      contructedCount.incrementAndGet();<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>    @Override<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    public void start() {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      startAsync();<a name="line.430"></a>
+<span class="sourceLineNo">429</span>    public UUID getPeerUUID() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      return uuid;<a name="line.430"></a>
 <span class="sourceLineNo">431</span>    }<a name="line.431"></a>
 <span class="sourceLineNo">432</span><a name="line.432"></a>
 <span class="sourceLineNo">433</span>    @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    public void stop() {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      stopAsync();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    protected void doStart() {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      startedCount.incrementAndGet();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      notifyStarted();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>    @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    protected void doStop() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      stoppedCount.incrementAndGet();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      notifyStopped();<a name="line.447"></a>
+<span class="sourceLineNo">434</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      replicateCount.incrementAndGet();<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      lastEntries = new ArrayList&lt;&gt;(replicateContext.entries);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      return true;<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>    @Override<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    public void start() {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      startAsync();<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>    @Override<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    public void stop() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      stopAsync();<a name="line.447"></a>
 <span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  public static class InterClusterReplicationEndpointForTest<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      extends HBaseInterClusterReplicationEndpoint {<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    static boolean failedOnce;<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    public InterClusterReplicationEndpointForTest() {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      replicateCount.set(0);<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>    @Override<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      boolean success = super.replicate(replicateContext);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      if (succ

<TRUNCATED>

[05/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html
index ef39f9e..f188fed 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html
@@ -25,543 +25,555 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <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 static org.mockito.Mockito.mock;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.mockito.Mockito.verify;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.mockito.Mockito.when;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.HashMap;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Map;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.UUID;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.Callable;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.Cell;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Waiter;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Put;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Table;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.AfterClass;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.Assert;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.Before;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.BeforeClass;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.ClassRule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Test;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.experimental.categories.Category;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.slf4j.Logger;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.slf4j.LoggerFactory;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>/**<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.68"></a>
-<span class="sourceLineNo">069</span> */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.70"></a>
-<span class="sourceLineNo">071</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  @ClassRule<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.77"></a>
+<span class="sourceLineNo">020</span>import static org.mockito.Mockito.doNothing;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.mockito.Mockito.mock;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.mockito.Mockito.spy;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.mockito.Mockito.verify;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.mockito.Mockito.when;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.ArrayList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.List;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Map;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.UUID;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.Callable;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.Waiter;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Put;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.Table;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.junit.AfterClass;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.junit.Assert;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.Before;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.BeforeClass;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.ClassRule;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Test;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.experimental.categories.Category;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.slf4j.Logger;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.LoggerFactory;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>/**<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.70"></a>
+<span class="sourceLineNo">071</span> */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.72"></a>
+<span class="sourceLineNo">073</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  @ClassRule<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.77"></a>
 <span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  static int numRegionServers;<a name="line.79"></a>
+<span class="sourceLineNo">079</span>  private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.79"></a>
 <span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  @BeforeClass<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public static void setUpBeforeClass() throws Exception {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    TestReplicationBase.setUpBeforeClass();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<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>  @AfterClass<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public static void tearDownAfterClass() throws Exception {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    TestReplicationBase.tearDownAfterClass();<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    // check stop is called<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() &gt; 0);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  @Before<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public void setup() throws Exception {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    ReplicationEndpointForTest.contructedCount.set(0);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    ReplicationEndpointForTest.startedCount.set(0);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    ReplicationEndpointForTest.replicateCount.set(0);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    ReplicationEndpointForTest.lastEntries = null;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    final List&lt;RegionServerThread&gt; rsThreads =<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    for (RegionServerThread rs : rsThreads) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    // Wait for  all log roll to finish<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    utility1.waitFor(3000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      @Override<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      public boolean evaluate() throws Exception {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        for (RegionServerThread rs : rsThreads) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>            return false;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>          }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        return true;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      }<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>      @Override<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      public String explainFailure() throws Exception {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        List&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        for (RegionServerThread rs : rsThreads) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>            logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.123"></a>
-<span class="sourceLineNo">124</span>          }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<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><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  @Test<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public void testCustomReplicationEndpoint() throws Exception {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    // test installing a custom replication endpoint other than the default one.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    admin.addPeer("testCustomReplicationEndpoint",<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.135"></a>
-<span class="sourceLineNo">136</span>            .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>    // check whether the class has been constructed and started<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      @Override<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      public boolean evaluate() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        return ReplicationEndpointForTest.contructedCount.get() &gt;= numRegionServers;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    });<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      @Override<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      public boolean evaluate() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        return ReplicationEndpointForTest.startedCount.get() &gt;= numRegionServers;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    });<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.153"></a>
+<span class="sourceLineNo">081</span>  static int numRegionServers;<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  @BeforeClass<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static void setUpBeforeClass() throws Exception {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    TestReplicationBase.setUpBeforeClass();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  @AfterClass<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public static void tearDownAfterClass() throws Exception {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    TestReplicationBase.tearDownAfterClass();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    // check stop is called<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() &gt; 0);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  @Before<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public void setup() throws Exception {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    ReplicationEndpointForTest.contructedCount.set(0);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    ReplicationEndpointForTest.startedCount.set(0);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    ReplicationEndpointForTest.replicateCount.set(0);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    ReplicationEndpointForTest.lastEntries = null;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    final List&lt;RegionServerThread&gt; rsThreads =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    for (RegionServerThread rs : rsThreads) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    // Wait for  all log roll to finish<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    utility1.waitFor(3000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      @Override<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      public boolean evaluate() throws Exception {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        for (RegionServerThread rs : rsThreads) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>            return false;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        return true;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>      @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      public String explainFailure() throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        List&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        for (RegionServerThread rs : rsThreads) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>            logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>          }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<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>  }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  @Test<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  public void testCustomReplicationEndpoint() throws Exception {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // test installing a custom replication endpoint other than the default one.<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    admin.addPeer("testCustomReplicationEndpoint",<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.137"></a>
+<span class="sourceLineNo">138</span>            .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // check whether the class has been constructed and started<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      @Override<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      public boolean evaluate() throws Exception {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        return ReplicationEndpointForTest.contructedCount.get() &gt;= numRegionServers;<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      @Override<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      public boolean evaluate() throws Exception {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        return ReplicationEndpointForTest.startedCount.get() &gt;= numRegionServers;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    });<a name="line.153"></a>
 <span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // now replicate some data.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    doPut(Bytes.toBytes("row42"));<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      @Override<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      public boolean evaluate() throws Exception {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<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>    doAssert(Bytes.toBytes("row42"));<a name="line.165"></a>
+<span class="sourceLineNo">155</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>    // now replicate some data.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    doPut(Bytes.toBytes("row42"));<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      @Override<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      public boolean evaluate() throws Exception {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<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><a name="line.166"></a>
-<span class="sourceLineNo">167</span>    admin.removePeer("testCustomReplicationEndpoint");<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  @Test<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    int peerCount = admin.getPeersCount();<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    admin.addPeer(id,<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    // debug.  Peer needs to be up for the edit to make it across. This wait on<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // peer count seems to be a hack that has us not progress till peer is up.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (admin.getPeersCount() &lt;= peerCount) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      Threads.sleep(100);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // now replicate some data<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    doPut(row);<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public boolean evaluate() throws Exception {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        // only send over one edit.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        LOG.info("count=" + count);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        return ReplicationEndpointReturningFalse.replicated.get();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    });<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      throw ReplicationEndpointReturningFalse.ex.get();<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>    admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<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>  @Test<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  public void testInterClusterReplication() throws Exception {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    final String id = "testInterClusterReplication";<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    List&lt;HRegion&gt; regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    int totEdits = 0;<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // Make sure edits are spread across regions because we do region based batching<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    // before shipping edits.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    for(HRegion region: regions) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      RegionInfo hri = region.getRegionInfo();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      byte[] row = hri.getStartKey();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      for (int i = 0; i &lt; 100; i++) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        if (row.length &gt; 0) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          Put put = new Put(row);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          put.addColumn(famName, row, row);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          region.put(put);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          totEdits++;<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>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>    admin.addPeer(id,<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.229"></a>
-<span class="sourceLineNo">230</span>            .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        null);<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>    final int numEdits = totEdits;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      @Override<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      public boolean evaluate() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>      @Override<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      public String explainFailure() throws Exception {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.242"></a>
-<span class="sourceLineNo">243</span>            + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        return failure;<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>    admin.removePeer("testInterClusterReplication");<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    utility1.deleteTableData(tableName);<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>  @Test<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    //test that we can create mutliple WALFilters reflectively<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        EverythingPassesWALEntryFilter.class.getName() +<a name="line.258"></a>
-<span class="sourceLineNo">259</span>            "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // now replicate some data.<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      doPut(connection, Bytes.toBytes("row1"));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      doPut(connection, row);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      doPut(connection, Bytes.toBytes("row2"));<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      public boolean evaluate() throws Exception {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    });<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    //make sure our reflectively created filter is in the filter chain<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<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>  @Test (expected=IOException.class)<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  public void testWALEntryFilterAddValidation() throws Exception {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    //test that we can create mutliple WALFilters reflectively<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        "IAmNotARealWalEntryFilter");<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    admin.addPeer("testWALEntryFilterAddValidation", rpc);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  @Test (expected=IOException.class)<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    //test that we can create mutliple WALFilters reflectively<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        "IAmNotARealWalEntryFilter");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  }<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  @Test<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  public void testMetricsSourceBaseSourcePassthrough(){<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    /*<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    allows for custom JMX metrics.<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    the two layers of wrapping to the actual BaseSource.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    */<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    String id = "id";<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    Map&lt;String, MetricsReplicationSourceSource&gt; singleSourceSourceByTable = new HashMap&lt;&gt;();<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    MetricsSource source = new MetricsSource(id, singleSourceSource, globalSourceSource,<a name="line.322"></a>
-<span class="sourceLineNo">323</span>        singleSourceSourceByTable);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    String gaugeName = "gauge";<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    String singleGaugeName = "source.id." + gaugeName;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    String globalGaugeName = "source." + gaugeName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    long delta = 1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    String counterName = "counter";<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    String singleCounterName = "source.id." + counterName;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    String globalCounterName = "source." + counterName;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    long count = 2;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    source.decGauge(gaugeName, delta);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    source.getMetricsContext();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    source.getMetricsDescription();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    source.getMetricsJmxContext();<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    source.getMetricsName();<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    source.incCounters(counterName, count);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    source.incGauge(gaugeName, delta);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    source.init();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    source.removeMetric(gaugeName);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    source.setGauge(gaugeName, delta);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    source.updateHistogram(counterName, count);<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    verify(globalRms).getMetricsContext();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    verify(globalRms).getMetricsJmxContext();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    verify(globalRms).getMetricsName();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    verify(singleRms).incCounters(singleCounterName, count);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    verify(globalRms).incCounters(globalCounterName, count);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    verify(globalRms).init();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    verify(singleRms).removeMetric(singleGaugeName);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    verify(globalRms).removeMetric(globalGaugeName);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    //check singleSourceSourceByTable metrics.<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    // singleSourceSourceByTable map entry will be created only<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    // after calling #setAgeOfLastShippedOpByTable<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    boolean containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        .containsKey("RandomNewTable");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    Assert.assertEquals(false, containsRandomNewTable);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    source.setAgeOfLastShippedOpByTable(123L, "RandomNewTable");<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        .containsKey("RandomNewTable");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    Assert.assertEquals(true, containsRandomNewTable);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    MetricsReplicationSourceSource msr = source.getSingleSourceSourceByTable()<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        .get("RandomNewTable");<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // cannot put more concreate value here to verify because the age is arbitrary.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    // as long as it's greater than 0, we see it as correct answer.<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    Assert.assertTrue(msr.getLastShippedAge() &gt; 0);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private void doPut(byte[] row) throws IOException {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      doPut(connection, row);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    try (Table t = connection.getTable(tableName)) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      Put put = new Put(row);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      put.addColumn(famName, row, row);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      t.put(put);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>  private static void doAssert(byte[] row) throws Exception {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      return; // first call<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    List&lt;Cell&gt; cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    Assert.assertEquals(1, cells.size());<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      cells.get(0).getRowLength(), row, 0, row.length));<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    static UUID uuid = utility1.getRandomUUID();<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    static AtomicInteger contructedCount = new AtomicInteger();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    static AtomicInteger startedCount = new AtomicInteger();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    static volatile List&lt;Entry&gt; lastEntries = null;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public ReplicationEndpointForTest() {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      replicateCount.set(0);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      contructedCount.incrementAndGet();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    @Override<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    public UUID getPeerUUID() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      return uuid;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>    @Override<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      replicateCount.incrementAndGet();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      lastEntries = new ArrayList&lt;&gt;(replicateContext.entries);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      return true;<a name="line.425"></a>
+<span class="sourceLineNo">167</span>    doAssert(Bytes.toBytes("row42"));<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    admin.removePeer("testCustomReplicationEndpoint");<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  @Test<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    int peerCount = admin.getPeersCount();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    admin.addPeer(id,<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    // debug.  Peer needs to be up for the edit to make it across. This wait on<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    // peer count seems to be a hack that has us not progress till peer is up.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    if (admin.getPeersCount() &lt;= peerCount) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      Threads.sleep(100);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    // now replicate some data<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    doPut(row);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<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>        // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        // only send over one edit.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        LOG.info("count=" + count);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        return ReplicationEndpointReturningFalse.replicated.get();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    });<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      throw ReplicationEndpointReturningFalse.ex.get();<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>    admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  @Test<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  public void testInterClusterReplication() throws Exception {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    final String id = "testInterClusterReplication";<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>    List&lt;HRegion&gt; regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    int totEdits = 0;<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // Make sure edits are spread across regions because we do region based batching<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    // before shipping edits.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    for(HRegion region: regions) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      RegionInfo hri = region.getRegionInfo();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      byte[] row = hri.getStartKey();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      for (int i = 0; i &lt; 100; i++) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        if (row.length &gt; 0) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          Put put = new Put(row);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          put.addColumn(famName, row, row);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          region.put(put);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>          totEdits++;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>    admin.addPeer(id,<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.231"></a>
+<span class="sourceLineNo">232</span>            .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        null);<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>    final int numEdits = totEdits;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      @Override<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      public boolean evaluate() throws Exception {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<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>      public String explainFailure() throws Exception {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.244"></a>
+<span class="sourceLineNo">245</span>            + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        return failure;<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>    admin.removePeer("testInterClusterReplication");<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    utility1.deleteTableData(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">254</span>  @Test<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    //test that we can create mutliple WALFilters reflectively<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        EverythingPassesWALEntryFilter.class.getName() +<a name="line.260"></a>
+<span class="sourceLineNo">261</span>            "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    // now replicate some data.<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      doPut(connection, Bytes.toBytes("row1"));<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      doPut(connection, row);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      doPut(connection, Bytes.toBytes("row2"));<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      public boolean evaluate() throws Exception {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 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><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    //make sure our reflectively created filter is in the filter chain<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<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>  @Test (expected=IOException.class)<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  public void testWALEntryFilterAddValidation() throws Exception {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    //test that we can create mutliple WALFilters reflectively<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        "IAmNotARealWalEntryFilter");<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    admin.addPeer("testWALEntryFilterAddValidation", rpc);<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>  @Test (expected=IOException.class)<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    //test that we can create mutliple WALFilters reflectively<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        "IAmNotARealWalEntryFilter");<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  @Test<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public void testMetricsSourceBaseSourcePassthrough(){<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    /*<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    allows for custom JMX metrics.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    the two layers of wrapping to the actual BaseSource.<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    String id = "id";<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    MetricsReplicationSourceSource spyglobalSourceSource = spy(globalSourceSource);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    doNothing().when(spyglobalSourceSource).incrFailedRecoveryQueue();<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    Map&lt;String, MetricsReplicationSourceSource&gt; singleSourceSourceByTable = new HashMap&lt;&gt;();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    MetricsSource source = new MetricsSource(id, singleSourceSource, spyglobalSourceSource,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        singleSourceSourceByTable);<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    String gaugeName = "gauge";<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    String singleGaugeName = "source.id." + gaugeName;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    String globalGaugeName = "source." + gaugeName;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    long delta = 1;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    String counterName = "counter";<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    String singleCounterName = "source.id." + counterName;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    String globalCounterName = "source." + counterName;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    long count = 2;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    source.decGauge(gaugeName, delta);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    source.getMetricsContext();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    source.getMetricsDescription();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    source.getMetricsJmxContext();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    source.getMetricsName();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    source.incCounters(counterName, count);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    source.incGauge(gaugeName, delta);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    source.init();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    source.removeMetric(gaugeName);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    source.setGauge(gaugeName, delta);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    source.updateHistogram(counterName, count);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    source.incrFailedRecoveryQueue();<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>    verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    verify(globalRms).getMetricsContext();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    verify(globalRms).getMetricsJmxContext();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    verify(globalRms).getMetricsName();<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    verify(singleRms).incCounters(singleCounterName, count);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    verify(globalRms).incCounters(globalCounterName, count);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    verify(globalRms).init();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    verify(singleRms).removeMetric(singleGaugeName);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    verify(globalRms).removeMetric(globalGaugeName);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    verify(spyglobalSourceSource).incrFailedRecoveryQueue();<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    //check singleSourceSourceByTable metrics.<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    // singleSourceSourceByTable map entry will be created only<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    // after calling #setAgeOfLastShippedOpByTable<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    boolean containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        .containsKey("RandomNewTable");<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    Assert.assertEquals(false, containsRandomNewTable);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    source.setAgeOfLastShippedOpByTable(123L, "RandomNewTable");<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        .containsKey("RandomNewTable");<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    Assert.assertEquals(true, containsRandomNewTable);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    MetricsReplicationSourceSource msr = source.getSingleSourceSourceByTable()<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        .get("RandomNewTable");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    // cannot put more concreate value here to verify because the age is arbitrary.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    // as long as it's greater than 0, we see it as correct answer.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    Assert.assertTrue(msr.getLastShippedAge() &gt; 0);<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  private void doPut(byte[] row) throws IOException {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      doPut(connection, row);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    try (Table t = connection.getTable(tableName)) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      Put put = new Put(row);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      put.addColumn(famName, row, row);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      t.put(put);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  private static void doAssert(byte[] row) throws Exception {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      return; // first call<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    List&lt;Cell&gt; cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    Assert.assertEquals(1, cells.size());<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      cells.get(0).getRowLength(), row, 0, row.length));<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>  public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    static UUID uuid = utility1.getRandomUUID();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    static AtomicInteger contructedCount = new AtomicInteger();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    static AtomicInteger startedCount = new AtomicInteger();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    static volatile List&lt;Entry&gt; lastEntries = null;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>    public ReplicationEndpointForTest() {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      replicateCount.set(0);<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      contructedCount.incrementAndGet();<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>    @Override<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    public void start() {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      startAsync();<a name="line.430"></a>
+<span class="sourceLineNo">429</span>    public UUID getPeerUUID() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      return uuid;<a name="line.430"></a>
 <span class="sourceLineNo">431</span>    }<a name="line.431"></a>
 <span class="sourceLineNo">432</span><a name="line.432"></a>
 <span class="sourceLineNo">433</span>    @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    public void stop() {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      stopAsync();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    protected void doStart() {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      startedCount.incrementAndGet();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      notifyStarted();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>    @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    protected void doStop() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      stoppedCount.incrementAndGet();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      notifyStopped();<a name="line.447"></a>
+<span class="sourceLineNo">434</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      replicateCount.incrementAndGet();<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      lastEntries = new ArrayList&lt;&gt;(replicateContext.entries);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      return true;<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>    @Override<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    public void start() {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      startAsync();<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>    @Override<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    public void stop() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      stopAsync();<a name="line.447"></a>
 <span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  public static class InterClusterReplicationEndpointForTest<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      extends HBaseInterClusterReplicationEndpoint {<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    static boolean failedOnce;<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    public InterClusterReplicationEndpointForTest() {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      replicateCount.set(0);<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>    @Override<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      boolean success = super.replicate(replicateContext);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      if (success) {<a name="line.464">

<TRUNCATED>

[22/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html
index d031298..f9fa8ff 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6};
+var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -148,61 +148,65 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.ht
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_EDITS_FILTERED">SOURCE_LOG_EDITS_FILTERED</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_FAILED_RECOVERY_QUEUES">SOURCE_FAILED_RECOVERY_QUEUES</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_READ_IN_BYTES">SOURCE_LOG_READ_IN_BYTES</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_EDITS_FILTERED">SOURCE_LOG_EDITS_FILTERED</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_READ_IN_EDITS">SOURCE_LOG_READ_IN_EDITS</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_READ_IN_BYTES">SOURCE_LOG_READ_IN_BYTES</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_REPEATED_LOG_FILE_BYTES">SOURCE_REPEATED_LOG_FILE_BYTES</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_READ_IN_EDITS">SOURCE_LOG_READ_IN_EDITS</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_RESTARTED_LOG_READING">SOURCE_RESTARTED_LOG_READING</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_REPEATED_LOG_FILE_BYTES">SOURCE_REPEATED_LOG_FILE_BYTES</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_BATCHES">SOURCE_SHIPPED_BATCHES</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_RESTARTED_LOG_READING">SOURCE_RESTARTED_LOG_READING</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_BYTES">SOURCE_SHIPPED_BYTES</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_BATCHES">SOURCE_SHIPPED_BATCHES</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_HFILES">SOURCE_SHIPPED_HFILES</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_BYTES">SOURCE_SHIPPED_BYTES</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_HFILES">SOURCE_SHIPPED_HFILES</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_KBS">SOURCE_SHIPPED_KBS</a></span></code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
 <div class="block"><span class="deprecationComment">Use <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_BYTES"><code>SOURCE_SHIPPED_BYTES</code></a> instead</span></div>
 </div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_OPS">SOURCE_SHIPPED_OPS</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SIZE_OF_HFILE_REFS_QUEUE">SOURCE_SIZE_OF_HFILE_REFS_QUEUE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SIZE_OF_LOG_QUEUE">SOURCE_SIZE_OF_LOG_QUEUE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_UNCLEANLY_CLOSED_IGNORED_IN_BYTES">SOURCE_UNCLEANLY_CLOSED_IGNORED_IN_BYTES</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_UNCLEANLY_CLOSED_LOGS">SOURCE_UNCLEANLY_CLOSED_LOGS</a></span></code>&nbsp;</td>
 </tr>
@@ -266,54 +270,58 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.ht
 </tr>
 <tr id="i9" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrHFilesShipped-long-">incrHFilesShipped</a></span>(long&nbsp;hfiles)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrFailedRecoveryQueue--">incrFailedRecoveryQueue</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i10" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrLogEditsFiltered-long-">incrLogEditsFiltered</a></span>(long&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrHFilesShipped-long-">incrHFilesShipped</a></span>(long&nbsp;hfiles)</code>&nbsp;</td>
 </tr>
 <tr id="i11" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrLogReadInBytes-long-">incrLogReadInBytes</a></span>(long&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrLogEditsFiltered-long-">incrLogEditsFiltered</a></span>(long&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i12" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrLogReadInEdits-long-">incrLogReadInEdits</a></span>(long&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrLogReadInBytes-long-">incrLogReadInBytes</a></span>(long&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i13" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrOpsShipped-long-">incrOpsShipped</a></span>(long&nbsp;ops)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrLogReadInEdits-long-">incrLogReadInEdits</a></span>(long&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i14" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrRepeatedFileBytes-long-">incrRepeatedFileBytes</a></span>(long&nbsp;bytes)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrOpsShipped-long-">incrOpsShipped</a></span>(long&nbsp;ops)</code>&nbsp;</td>
 </tr>
 <tr id="i15" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrRestartedWALReading--">incrRestartedWALReading</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrRepeatedFileBytes-long-">incrRepeatedFileBytes</a></span>(long&nbsp;bytes)</code>&nbsp;</td>
 </tr>
 <tr id="i16" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrShippedBytes-long-">incrShippedBytes</a></span>(long&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrRestartedWALReading--">incrRestartedWALReading</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i17" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrSizeOfHFileRefsQueue-long-">incrSizeOfHFileRefsQueue</a></span>(long&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrShippedBytes-long-">incrShippedBytes</a></span>(long&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i18" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrSizeOfLogQueue-int-">incrSizeOfLogQueue</a></span>(int&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrSizeOfHFileRefsQueue-long-">incrSizeOfHFileRefsQueue</a></span>(long&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i19" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrUncleanlyClosedWALs--">incrUncleanlyClosedWALs</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrSizeOfLogQueue-int-">incrSizeOfLogQueue</a></span>(int&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i20" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrUnknownFileLengthForClosedWAL--">incrUnknownFileLengthForClosedWAL</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrUncleanlyClosedWALs--">incrUncleanlyClosedWALs</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i21" class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrUnknownFileLengthForClosedWAL--">incrUnknownFileLengthForClosedWAL</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i22" class="altColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#setLastShippedAge-long-">setLastShippedAge</a></span>(long&nbsp;age)</code>&nbsp;</td>
 </tr>
 </table>
@@ -564,7 +572,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <a name="SOURCE_COMPLETED_RECOVERY_QUEUES">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>SOURCE_COMPLETED_RECOVERY_QUEUES</h4>
 <pre>static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.55">SOURCE_COMPLETED_RECOVERY_QUEUES</a></pre>
@@ -574,6 +582,19 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 </dl>
 </li>
 </ul>
+<a name="SOURCE_FAILED_RECOVERY_QUEUES">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>SOURCE_FAILED_RECOVERY_QUEUES</h4>
+<pre>static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.56">SOURCE_FAILED_RECOVERY_QUEUES</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.SOURCE_FAILED_RECOVERY_QUEUES">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ============ METHOD DETAIL ========== -->
@@ -588,7 +609,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>setLastShippedAge</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.57">setLastShippedAge</a>(long&nbsp;age)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.58">setLastShippedAge</a>(long&nbsp;age)</pre>
 </li>
 </ul>
 <a name="incrSizeOfLogQueue-int-">
@@ -597,7 +618,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>incrSizeOfLogQueue</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.58">incrSizeOfLogQueue</a>(int&nbsp;size)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.59">incrSizeOfLogQueue</a>(int&nbsp;size)</pre>
 </li>
 </ul>
 <a name="decrSizeOfLogQueue-int-">
@@ -606,7 +627,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>decrSizeOfLogQueue</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.59">decrSizeOfLogQueue</a>(int&nbsp;size)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.60">decrSizeOfLogQueue</a>(int&nbsp;size)</pre>
 </li>
 </ul>
 <a name="incrLogEditsFiltered-long-">
@@ -615,7 +636,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>incrLogEditsFiltered</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.60">incrLogEditsFiltered</a>(long&nbsp;size)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.61">incrLogEditsFiltered</a>(long&nbsp;size)</pre>
 </li>
 </ul>
 <a name="incrBatchesShipped-int-">
@@ -624,7 +645,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>incrBatchesShipped</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.61">incrBatchesShipped</a>(int&nbsp;batches)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.62">incrBatchesShipped</a>(int&nbsp;batches)</pre>
 </li>
 </ul>
 <a name="incrOpsShipped-long-">
@@ -633,7 +654,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>incrOpsShipped</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.62">incrOpsShipped</a>(long&nbsp;ops)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.63">incrOpsShipped</a>(long&nbsp;ops)</pre>
 </li>
 </ul>
 <a name="incrShippedBytes-long-">
@@ -642,7 +663,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>incrShippedBytes</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.63">incrShippedBytes</a>(long&nbsp;size)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.64">incrShippedBytes</a>(long&nbsp;size)</pre>
 </li>
 </ul>
 <a name="incrLogReadInBytes-long-">
@@ -651,7 +672,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>incrLogReadInBytes</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.64">incrLogReadInBytes</a>(long&nbsp;size)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.65">incrLogReadInBytes</a>(long&nbsp;size)</pre>
 </li>
 </ul>
 <a name="incrLogReadInEdits-long-">
@@ -660,7 +681,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>incrLogReadInEdits</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.65">incrLogReadInEdits</a>(long&nbsp;size)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.66">incrLogReadInEdits</a>(long&nbsp;size)</pre>
 </li>
 </ul>
 <a name="clear--">
@@ -669,7 +690,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>clear</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.66">clear</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.67">clear</a>()</pre>
 </li>
 </ul>
 <a name="getLastShippedAge--">
@@ -678,7 +699,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastShippedAge</h4>
-<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.67">getLastShippedAge</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.68">getLastShippedAge</a>()</pre>
 </li>
 </ul>
 <a name="getSizeOfLogQueue--">
@@ -687,7 +708,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>getSizeOfLogQueue</h4>
-<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.68">getSizeOfLogQueue</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.69">getSizeOfLogQueue</a>()</pre>
 </li>
 </ul>
 <a name="incrHFilesShipped-long-">
@@ -696,7 +717,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>incrHFilesShipped</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.69">incrHFilesShipped</a>(long&nbsp;hfiles)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.70">incrHFilesShipped</a>(long&nbsp;hfiles)</pre>
 </li>
 </ul>
 <a name="incrSizeOfHFileRefsQueue-long-">
@@ -705,7 +726,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>incrSizeOfHFileRefsQueue</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.70">incrSizeOfHFileRefsQueue</a>(long&nbsp;size)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.71">incrSizeOfHFileRefsQueue</a>(long&nbsp;size)</pre>
 </li>
 </ul>
 <a name="decrSizeOfHFileRefsQueue-long-">
@@ -714,7 +735,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>decrSizeOfHFileRefsQueue</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.71">decrSizeOfHFileRefsQueue</a>(long&nbsp;size)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.72">decrSizeOfHFileRefsQueue</a>(long&nbsp;size)</pre>
 </li>
 </ul>
 <a name="incrUnknownFileLengthForClosedWAL--">
@@ -723,7 +744,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>incrUnknownFileLengthForClosedWAL</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.72">incrUnknownFileLengthForClosedWAL</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.73">incrUnknownFileLengthForClosedWAL</a>()</pre>
 </li>
 </ul>
 <a name="incrUncleanlyClosedWALs--">
@@ -732,7 +753,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>incrUncleanlyClosedWALs</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.73">incrUncleanlyClosedWALs</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.74">incrUncleanlyClosedWALs</a>()</pre>
 </li>
 </ul>
 <a name="incrBytesSkippedInUncleanlyClosedWALs-long-">
@@ -741,7 +762,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>incrBytesSkippedInUncleanlyClosedWALs</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.74">incrBytesSkippedInUncleanlyClosedWALs</a>(long&nbsp;bytes)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.75">incrBytesSkippedInUncleanlyClosedWALs</a>(long&nbsp;bytes)</pre>
 </li>
 </ul>
 <a name="incrRestartedWALReading--">
@@ -750,7 +771,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>incrRestartedWALReading</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.75">incrRestartedWALReading</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.76">incrRestartedWALReading</a>()</pre>
 </li>
 </ul>
 <a name="incrRepeatedFileBytes-long-">
@@ -759,7 +780,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>incrRepeatedFileBytes</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.76">incrRepeatedFileBytes</a>(long&nbsp;bytes)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.77">incrRepeatedFileBytes</a>(long&nbsp;bytes)</pre>
 </li>
 </ul>
 <a name="incrCompletedWAL--">
@@ -768,16 +789,25 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>incrCompletedWAL</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.77">incrCompletedWAL</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.78">incrCompletedWAL</a>()</pre>
 </li>
 </ul>
 <a name="incrCompletedRecoveryQueue--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>incrCompletedRecoveryQueue</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.78">incrCompletedRecoveryQueue</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.79">incrCompletedRecoveryQueue</a>()</pre>
+</li>
+</ul>
+<a name="incrFailedRecoveryQueue--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>incrFailedRecoveryQueue</h4>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#line.80">incrFailedRecoveryQueue</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html
index 7a440dc..f38f671 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -301,7 +301,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <!--   -->
 </a>
 <h3>Fields inherited from interface&nbsp;org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_AGE_OF_LAST_SHIPPED_OP">SOURCE_AGE_OF_LAST_SHIPPED_OP</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_CLOSED_LOGS_WITH_UNKNOWN_LENGTH">SOURCE_CLOSED_LOGS_WITH_UNKNOWN_LENGTH</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_COMPLETED_LOGS">SOURCE_COMPLETED_LOGS</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_COMPLETED_RECOVERY_QUEUES">SOURCE_COMPLETED_RECOVERY_QUEUES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_EDITS_FILTERED">SOURCE_LOG_EDITS_FILTERED</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceS
 ource.html#SOURCE_LOG_READ_IN_BYTES">SOURCE_LOG_READ_IN_BYTES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_READ_IN_EDITS">SOURCE_LOG_READ_IN_EDITS</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_REPEATED_LOG_FILE_BYTES">SOURCE_REPEATED_LOG_FILE_BYTES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_RESTARTED_LOG_READING">SOURCE_RESTARTED_LOG_READING</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_BATCHES">SOURCE_SHIPPED_BATCHES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_BYTES">SOURCE_SHIPPED_BYTES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Metric
 sReplicationSourceSource.html#SOURCE_SHIPPED_HFILES">SOURCE_SHIPPED_HFILES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_KBS">SOURCE_SHIPPED_KBS</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_OPS">SOURCE_SHIPPED_OPS</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SIZE_OF_HFILE_REFS_QUEUE">SOURCE_SIZE_OF_HFILE_REFS_QUEUE</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SIZE_OF_LOG_QUEUE">SOURCE_SIZE_OF_LOG_QUEUE</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_UNCLEANLY_CLOSED_IGNORED_IN_BYTES">SOURCE_UNCLEANLY_CLOSED_IGNORED_IN_BYTES</a>, <a href="../../../../../../org/apache/hadoop/hbase/repl
 ication/regionserver/MetricsReplicationSourceSource.html#SOURCE_UNCLEANLY_CLOSED_LOGS">SOURCE_UNCLEANLY_CLOSED_LOGS</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_AGE_OF_LAST_SHIPPED_OP">SOURCE_AGE_OF_LAST_SHIPPED_OP</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_CLOSED_LOGS_WITH_UNKNOWN_LENGTH">SOURCE_CLOSED_LOGS_WITH_UNKNOWN_LENGTH</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_COMPLETED_LOGS">SOURCE_COMPLETED_LOGS</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_COMPLETED_RECOVERY_QUEUES">SOURCE_COMPLETED_RECOVERY_QUEUES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_FAILED_RECOVERY_QUEUES">SOURCE_FAILED_RECOVERY_QUEUES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicatio
 nSourceSource.html#SOURCE_LOG_EDITS_FILTERED">SOURCE_LOG_EDITS_FILTERED</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_READ_IN_BYTES">SOURCE_LOG_READ_IN_BYTES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_READ_IN_EDITS">SOURCE_LOG_READ_IN_EDITS</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_REPEATED_LOG_FILE_BYTES">SOURCE_REPEATED_LOG_FILE_BYTES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_RESTARTED_LOG_READING">SOURCE_RESTARTED_LOG_READING</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_BATCHES">SOURCE_SHIPPED_BATCHES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/r
 egionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_BYTES">SOURCE_SHIPPED_BYTES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_HFILES">SOURCE_SHIPPED_HFILES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_KBS">SOURCE_SHIPPED_KBS</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_OPS">SOURCE_SHIPPED_OPS</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SIZE_OF_HFILE_REFS_QUEUE">SOURCE_SIZE_OF_HFILE_REFS_QUEUE</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SIZE_OF_LOG_QUEUE">SOURCE_SIZE_OF_LOG_QUEUE</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/M
 etricsReplicationSourceSource.html#SOURCE_UNCLEANLY_CLOSED_IGNORED_IN_BYTES">SOURCE_UNCLEANLY_CLOSED_IGNORED_IN_BYTES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_UNCLEANLY_CLOSED_LOGS">SOURCE_UNCLEANLY_CLOSED_LOGS</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.metrics.BaseSource">
@@ -425,76 +425,80 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 </tr>
 <tr id="i16" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrHFilesShipped-long-">incrHFilesShipped</a></span>(long&nbsp;hfiles)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrFailedRecoveryQueue--">incrFailedRecoveryQueue</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i17" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrLogEditsFiltered-long-">incrLogEditsFiltered</a></span>(long&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrHFilesShipped-long-">incrHFilesShipped</a></span>(long&nbsp;hfiles)</code>&nbsp;</td>
 </tr>
 <tr id="i18" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrLogReadInBytes-long-">incrLogReadInBytes</a></span>(long&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrLogEditsFiltered-long-">incrLogEditsFiltered</a></span>(long&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i19" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrLogReadInEdits-long-">incrLogReadInEdits</a></span>(long&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrLogReadInBytes-long-">incrLogReadInBytes</a></span>(long&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i20" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrOpsShipped-long-">incrOpsShipped</a></span>(long&nbsp;ops)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrLogReadInEdits-long-">incrLogReadInEdits</a></span>(long&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i21" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrRepeatedFileBytes-long-">incrRepeatedFileBytes</a></span>(long&nbsp;bytes)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrOpsShipped-long-">incrOpsShipped</a></span>(long&nbsp;ops)</code>&nbsp;</td>
 </tr>
 <tr id="i22" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrRestartedWALReading--">incrRestartedWALReading</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrRepeatedFileBytes-long-">incrRepeatedFileBytes</a></span>(long&nbsp;bytes)</code>&nbsp;</td>
 </tr>
 <tr id="i23" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrShippedBytes-long-">incrShippedBytes</a></span>(long&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrRestartedWALReading--">incrRestartedWALReading</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i24" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrSizeOfHFileRefsQueue-long-">incrSizeOfHFileRefsQueue</a></span>(long&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrShippedBytes-long-">incrShippedBytes</a></span>(long&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i25" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrSizeOfLogQueue-int-">incrSizeOfLogQueue</a></span>(int&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrSizeOfHFileRefsQueue-long-">incrSizeOfHFileRefsQueue</a></span>(long&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i26" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrUncleanlyClosedWALs--">incrUncleanlyClosedWALs</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrSizeOfLogQueue-int-">incrSizeOfLogQueue</a></span>(int&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i27" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrUnknownFileLengthForClosedWAL--">incrUnknownFileLengthForClosedWAL</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrUncleanlyClosedWALs--">incrUncleanlyClosedWALs</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i28" class="altColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrUnknownFileLengthForClosedWAL--">incrUnknownFileLengthForClosedWAL</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i29" class="rowColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#init--">init</a></span>()</code>
 <div class="block">Clear out the metrics and re-prepare the source.</div>
 </td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#removeMetric-java.lang.String-">removeMetric</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;key)</code>
 <div class="block">Remove a metric and no longer announce it.</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#setGauge-java.lang.String-long-">setGauge</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;gaugeName,
         long&nbsp;value)</code>
 <div class="block">Set a gauge to a specific value.</div>
 </td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#setLastShippedAge-long-">setLastShippedAge</a></span>(long&nbsp;age)</code>&nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#updateHistogram-java.lang.String-long-">updateHistogram</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                long&nbsp;value)</code>
@@ -1195,13 +1199,26 @@ private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 </dl>
 </li>
 </ul>
+<a name="incrFailedRecoveryQueue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>incrFailedRecoveryQueue</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#line.261">incrFailedRecoveryQueue</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrFailedRecoveryQueue--">incrFailedRecoveryQueue</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="init--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#line.261">init</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#line.264">init</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#init--">BaseSource</a></code></span></div>
 <div class="block">Clear out the metrics and re-prepare the source.</div>
 <dl>
@@ -1216,7 +1233,7 @@ private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>setGauge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#line.266">setGauge</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;gaugeName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#line.269">setGauge</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;gaugeName,
                      long&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#setGauge-java.lang.String-long-">BaseSource</a></code></span></div>
 <div class="block">Set a gauge to a specific value.</div>
@@ -1235,7 +1252,7 @@ private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>incGauge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#line.271">incGauge</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;gaugeName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#line.274">incGauge</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;gaugeName,
                      long&nbsp;delta)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#incGauge-java.lang.String-long-">BaseSource</a></code></span></div>
 <div class="block">Add some amount to a gauge.</div>
@@ -1254,7 +1271,7 @@ private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>decGauge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#line.276">decGauge</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;gaugeName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#line.279">decGauge</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;gaugeName,
                      long&nbsp;delta)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#decGauge-java.lang.String-long-">BaseSource</a></code></span></div>
 <div class="block">Subtract some amount from a gauge.</div>
@@ -1273,7 +1290,7 @@ private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>removeMetric</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#line.281">removeMetric</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;key)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#line.284">removeMetric</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;key)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#removeMetric-java.lang.String-">BaseSource</a></code></span></div>
 <div class="block">Remove a metric and no longer announce it.</div>
 <dl>
@@ -1290,7 +1307,7 @@ private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>incCounters</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#line.286">incCounters</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;counterName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#line.289">incCounters</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;counterName,
                         long&nbsp;delta)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#incCounters-java.lang.String-long-">BaseSource</a></code></span></div>
 <div class="block">Add some amount to a counter.</div>
@@ -1309,7 +1326,7 @@ private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>updateHistogram</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#line.291">updateHistogram</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#line.294">updateHistogram</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                             long&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#updateHistogram-java.lang.String-long-">BaseSource</a></code></span></div>
 <div class="block">Add some value to a histogram.</div>
@@ -1328,7 +1345,7 @@ private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetricsContext</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/MetricsReplicationSourceSourceImpl.html#line.296">getMetricsContext</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/MetricsReplicationSourceSourceImpl.html#line.299">getMetricsContext</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#getMetricsContext--">BaseSource</a></code></span></div>
 <div class="block">Get the metrics context.  For hadoop metrics2 system this is usually an all lowercased string.
  eg. regionserver, master, thriftserver</div>
@@ -1346,7 +1363,7 @@ private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetricsDescription</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/MetricsReplicationSourceSourceImpl.html#line.301">getMetricsDescription</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/MetricsReplicationSourceSourceImpl.html#line.304">getMetricsDescription</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#getMetricsDescription--">BaseSource</a></code></span></div>
 <div class="block">Get the description of what this source exposes.</div>
 <dl>
@@ -1361,7 +1378,7 @@ private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetricsJmxContext</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/MetricsReplicationSourceSourceImpl.html#line.306">getMetricsJmxContext</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/MetricsReplicationSourceSourceImpl.html#line.309">getMetricsJmxContext</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#getMetricsJmxContext--">BaseSource</a></code></span></div>
 <div class="block">Get the name of the context in JMX that this source will be exposed through.
  This is in ObjectName format. With the default context being Hadoop -&gt; HBase</div>
@@ -1377,7 +1394,7 @@ private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getMetricsName</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/MetricsReplicationSourceSourceImpl.html#line.311">getMetricsName</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/MetricsReplicationSourceSourceImpl.html#line.314">getMetricsName</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#getMetricsName--">BaseSource</a></code></span></div>
 <div class="block">Get the name of the metrics that are being exported by this source.
  Eg. IPC, GC, WAL</div>


[03/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html
index ef39f9e..f188fed 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html
@@ -25,543 +25,555 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <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 static org.mockito.Mockito.mock;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.mockito.Mockito.verify;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.mockito.Mockito.when;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.HashMap;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Map;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.UUID;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.Callable;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.Cell;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Waiter;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Put;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Table;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.AfterClass;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.Assert;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.Before;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.BeforeClass;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.ClassRule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Test;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.experimental.categories.Category;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.slf4j.Logger;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.slf4j.LoggerFactory;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>/**<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.68"></a>
-<span class="sourceLineNo">069</span> */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.70"></a>
-<span class="sourceLineNo">071</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  @ClassRule<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.77"></a>
+<span class="sourceLineNo">020</span>import static org.mockito.Mockito.doNothing;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.mockito.Mockito.mock;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.mockito.Mockito.spy;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.mockito.Mockito.verify;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.mockito.Mockito.when;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.ArrayList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.List;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Map;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.UUID;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.Callable;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.Waiter;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Put;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.Table;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.junit.AfterClass;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.junit.Assert;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.Before;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.BeforeClass;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.ClassRule;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Test;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.experimental.categories.Category;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.slf4j.Logger;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.LoggerFactory;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>/**<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.70"></a>
+<span class="sourceLineNo">071</span> */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.72"></a>
+<span class="sourceLineNo">073</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  @ClassRule<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.77"></a>
 <span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  static int numRegionServers;<a name="line.79"></a>
+<span class="sourceLineNo">079</span>  private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.79"></a>
 <span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  @BeforeClass<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public static void setUpBeforeClass() throws Exception {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    TestReplicationBase.setUpBeforeClass();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<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>  @AfterClass<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public static void tearDownAfterClass() throws Exception {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    TestReplicationBase.tearDownAfterClass();<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    // check stop is called<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() &gt; 0);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  @Before<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public void setup() throws Exception {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    ReplicationEndpointForTest.contructedCount.set(0);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    ReplicationEndpointForTest.startedCount.set(0);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    ReplicationEndpointForTest.replicateCount.set(0);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    ReplicationEndpointForTest.lastEntries = null;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    final List&lt;RegionServerThread&gt; rsThreads =<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    for (RegionServerThread rs : rsThreads) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    // Wait for  all log roll to finish<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    utility1.waitFor(3000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      @Override<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      public boolean evaluate() throws Exception {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        for (RegionServerThread rs : rsThreads) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>            return false;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>          }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        return true;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      }<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>      @Override<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      public String explainFailure() throws Exception {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        List&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        for (RegionServerThread rs : rsThreads) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>            logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.123"></a>
-<span class="sourceLineNo">124</span>          }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<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><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  @Test<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public void testCustomReplicationEndpoint() throws Exception {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    // test installing a custom replication endpoint other than the default one.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    admin.addPeer("testCustomReplicationEndpoint",<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.135"></a>
-<span class="sourceLineNo">136</span>            .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>    // check whether the class has been constructed and started<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      @Override<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      public boolean evaluate() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        return ReplicationEndpointForTest.contructedCount.get() &gt;= numRegionServers;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    });<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      @Override<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      public boolean evaluate() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        return ReplicationEndpointForTest.startedCount.get() &gt;= numRegionServers;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    });<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.153"></a>
+<span class="sourceLineNo">081</span>  static int numRegionServers;<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  @BeforeClass<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static void setUpBeforeClass() throws Exception {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    TestReplicationBase.setUpBeforeClass();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  @AfterClass<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public static void tearDownAfterClass() throws Exception {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    TestReplicationBase.tearDownAfterClass();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    // check stop is called<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() &gt; 0);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  @Before<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public void setup() throws Exception {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    ReplicationEndpointForTest.contructedCount.set(0);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    ReplicationEndpointForTest.startedCount.set(0);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    ReplicationEndpointForTest.replicateCount.set(0);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    ReplicationEndpointForTest.lastEntries = null;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    final List&lt;RegionServerThread&gt; rsThreads =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    for (RegionServerThread rs : rsThreads) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    // Wait for  all log roll to finish<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    utility1.waitFor(3000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      @Override<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      public boolean evaluate() throws Exception {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        for (RegionServerThread rs : rsThreads) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>            return false;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        return true;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>      @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      public String explainFailure() throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        List&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        for (RegionServerThread rs : rsThreads) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>            logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>          }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<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>  }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  @Test<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  public void testCustomReplicationEndpoint() throws Exception {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // test installing a custom replication endpoint other than the default one.<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    admin.addPeer("testCustomReplicationEndpoint",<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.137"></a>
+<span class="sourceLineNo">138</span>            .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // check whether the class has been constructed and started<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      @Override<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      public boolean evaluate() throws Exception {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        return ReplicationEndpointForTest.contructedCount.get() &gt;= numRegionServers;<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      @Override<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      public boolean evaluate() throws Exception {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        return ReplicationEndpointForTest.startedCount.get() &gt;= numRegionServers;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    });<a name="line.153"></a>
 <span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // now replicate some data.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    doPut(Bytes.toBytes("row42"));<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      @Override<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      public boolean evaluate() throws Exception {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<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>    doAssert(Bytes.toBytes("row42"));<a name="line.165"></a>
+<span class="sourceLineNo">155</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>    // now replicate some data.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    doPut(Bytes.toBytes("row42"));<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      @Override<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      public boolean evaluate() throws Exception {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<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><a name="line.166"></a>
-<span class="sourceLineNo">167</span>    admin.removePeer("testCustomReplicationEndpoint");<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  @Test<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    int peerCount = admin.getPeersCount();<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    admin.addPeer(id,<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    // debug.  Peer needs to be up for the edit to make it across. This wait on<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // peer count seems to be a hack that has us not progress till peer is up.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (admin.getPeersCount() &lt;= peerCount) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      Threads.sleep(100);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // now replicate some data<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    doPut(row);<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public boolean evaluate() throws Exception {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        // only send over one edit.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        LOG.info("count=" + count);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        return ReplicationEndpointReturningFalse.replicated.get();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    });<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      throw ReplicationEndpointReturningFalse.ex.get();<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>    admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<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>  @Test<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  public void testInterClusterReplication() throws Exception {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    final String id = "testInterClusterReplication";<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    List&lt;HRegion&gt; regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    int totEdits = 0;<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // Make sure edits are spread across regions because we do region based batching<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    // before shipping edits.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    for(HRegion region: regions) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      RegionInfo hri = region.getRegionInfo();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      byte[] row = hri.getStartKey();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      for (int i = 0; i &lt; 100; i++) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        if (row.length &gt; 0) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          Put put = new Put(row);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          put.addColumn(famName, row, row);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          region.put(put);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          totEdits++;<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>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>    admin.addPeer(id,<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.229"></a>
-<span class="sourceLineNo">230</span>            .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        null);<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>    final int numEdits = totEdits;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      @Override<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      public boolean evaluate() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>      @Override<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      public String explainFailure() throws Exception {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.242"></a>
-<span class="sourceLineNo">243</span>            + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        return failure;<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>    admin.removePeer("testInterClusterReplication");<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    utility1.deleteTableData(tableName);<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>  @Test<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    //test that we can create mutliple WALFilters reflectively<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        EverythingPassesWALEntryFilter.class.getName() +<a name="line.258"></a>
-<span class="sourceLineNo">259</span>            "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // now replicate some data.<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      doPut(connection, Bytes.toBytes("row1"));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      doPut(connection, row);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      doPut(connection, Bytes.toBytes("row2"));<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      public boolean evaluate() throws Exception {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    });<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    //make sure our reflectively created filter is in the filter chain<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<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>  @Test (expected=IOException.class)<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  public void testWALEntryFilterAddValidation() throws Exception {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    //test that we can create mutliple WALFilters reflectively<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        "IAmNotARealWalEntryFilter");<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    admin.addPeer("testWALEntryFilterAddValidation", rpc);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  @Test (expected=IOException.class)<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    //test that we can create mutliple WALFilters reflectively<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        "IAmNotARealWalEntryFilter");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  }<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  @Test<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  public void testMetricsSourceBaseSourcePassthrough(){<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    /*<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    allows for custom JMX metrics.<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    the two layers of wrapping to the actual BaseSource.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    */<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    String id = "id";<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    Map&lt;String, MetricsReplicationSourceSource&gt; singleSourceSourceByTable = new HashMap&lt;&gt;();<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    MetricsSource source = new MetricsSource(id, singleSourceSource, globalSourceSource,<a name="line.322"></a>
-<span class="sourceLineNo">323</span>        singleSourceSourceByTable);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    String gaugeName = "gauge";<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    String singleGaugeName = "source.id." + gaugeName;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    String globalGaugeName = "source." + gaugeName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    long delta = 1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    String counterName = "counter";<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    String singleCounterName = "source.id." + counterName;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    String globalCounterName = "source." + counterName;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    long count = 2;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    source.decGauge(gaugeName, delta);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    source.getMetricsContext();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    source.getMetricsDescription();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    source.getMetricsJmxContext();<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    source.getMetricsName();<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    source.incCounters(counterName, count);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    source.incGauge(gaugeName, delta);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    source.init();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    source.removeMetric(gaugeName);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    source.setGauge(gaugeName, delta);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    source.updateHistogram(counterName, count);<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    verify(globalRms).getMetricsContext();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    verify(globalRms).getMetricsJmxContext();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    verify(globalRms).getMetricsName();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    verify(singleRms).incCounters(singleCounterName, count);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    verify(globalRms).incCounters(globalCounterName, count);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    verify(globalRms).init();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    verify(singleRms).removeMetric(singleGaugeName);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    verify(globalRms).removeMetric(globalGaugeName);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    //check singleSourceSourceByTable metrics.<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    // singleSourceSourceByTable map entry will be created only<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    // after calling #setAgeOfLastShippedOpByTable<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    boolean containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        .containsKey("RandomNewTable");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    Assert.assertEquals(false, containsRandomNewTable);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    source.setAgeOfLastShippedOpByTable(123L, "RandomNewTable");<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        .containsKey("RandomNewTable");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    Assert.assertEquals(true, containsRandomNewTable);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    MetricsReplicationSourceSource msr = source.getSingleSourceSourceByTable()<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        .get("RandomNewTable");<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // cannot put more concreate value here to verify because the age is arbitrary.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    // as long as it's greater than 0, we see it as correct answer.<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    Assert.assertTrue(msr.getLastShippedAge() &gt; 0);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private void doPut(byte[] row) throws IOException {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      doPut(connection, row);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    try (Table t = connection.getTable(tableName)) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      Put put = new Put(row);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      put.addColumn(famName, row, row);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      t.put(put);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>  private static void doAssert(byte[] row) throws Exception {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      return; // first call<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    List&lt;Cell&gt; cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    Assert.assertEquals(1, cells.size());<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      cells.get(0).getRowLength(), row, 0, row.length));<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    static UUID uuid = utility1.getRandomUUID();<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    static AtomicInteger contructedCount = new AtomicInteger();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    static AtomicInteger startedCount = new AtomicInteger();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    static volatile List&lt;Entry&gt; lastEntries = null;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public ReplicationEndpointForTest() {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      replicateCount.set(0);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      contructedCount.incrementAndGet();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    @Override<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    public UUID getPeerUUID() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      return uuid;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>    @Override<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      replicateCount.incrementAndGet();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      lastEntries = new ArrayList&lt;&gt;(replicateContext.entries);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      return true;<a name="line.425"></a>
+<span class="sourceLineNo">167</span>    doAssert(Bytes.toBytes("row42"));<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    admin.removePeer("testCustomReplicationEndpoint");<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  @Test<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    int peerCount = admin.getPeersCount();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    admin.addPeer(id,<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    // debug.  Peer needs to be up for the edit to make it across. This wait on<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    // peer count seems to be a hack that has us not progress till peer is up.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    if (admin.getPeersCount() &lt;= peerCount) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      Threads.sleep(100);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    // now replicate some data<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    doPut(row);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<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>        // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        // only send over one edit.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        LOG.info("count=" + count);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        return ReplicationEndpointReturningFalse.replicated.get();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    });<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      throw ReplicationEndpointReturningFalse.ex.get();<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>    admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  @Test<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  public void testInterClusterReplication() throws Exception {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    final String id = "testInterClusterReplication";<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>    List&lt;HRegion&gt; regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    int totEdits = 0;<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // Make sure edits are spread across regions because we do region based batching<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    // before shipping edits.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    for(HRegion region: regions) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      RegionInfo hri = region.getRegionInfo();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      byte[] row = hri.getStartKey();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      for (int i = 0; i &lt; 100; i++) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        if (row.length &gt; 0) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          Put put = new Put(row);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          put.addColumn(famName, row, row);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          region.put(put);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>          totEdits++;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>    admin.addPeer(id,<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.231"></a>
+<span class="sourceLineNo">232</span>            .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        null);<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>    final int numEdits = totEdits;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      @Override<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      public boolean evaluate() throws Exception {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<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>      public String explainFailure() throws Exception {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.244"></a>
+<span class="sourceLineNo">245</span>            + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        return failure;<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>    admin.removePeer("testInterClusterReplication");<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    utility1.deleteTableData(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">254</span>  @Test<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    //test that we can create mutliple WALFilters reflectively<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        EverythingPassesWALEntryFilter.class.getName() +<a name="line.260"></a>
+<span class="sourceLineNo">261</span>            "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    // now replicate some data.<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      doPut(connection, Bytes.toBytes("row1"));<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      doPut(connection, row);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      doPut(connection, Bytes.toBytes("row2"));<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      public boolean evaluate() throws Exception {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 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><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    //make sure our reflectively created filter is in the filter chain<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<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>  @Test (expected=IOException.class)<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  public void testWALEntryFilterAddValidation() throws Exception {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    //test that we can create mutliple WALFilters reflectively<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        "IAmNotARealWalEntryFilter");<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    admin.addPeer("testWALEntryFilterAddValidation", rpc);<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>  @Test (expected=IOException.class)<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    //test that we can create mutliple WALFilters reflectively<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        "IAmNotARealWalEntryFilter");<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  @Test<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public void testMetricsSourceBaseSourcePassthrough(){<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    /*<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    allows for custom JMX metrics.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    the two layers of wrapping to the actual BaseSource.<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    String id = "id";<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    MetricsReplicationSourceSource spyglobalSourceSource = spy(globalSourceSource);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    doNothing().when(spyglobalSourceSource).incrFailedRecoveryQueue();<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    Map&lt;String, MetricsReplicationSourceSource&gt; singleSourceSourceByTable = new HashMap&lt;&gt;();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    MetricsSource source = new MetricsSource(id, singleSourceSource, spyglobalSourceSource,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        singleSourceSourceByTable);<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    String gaugeName = "gauge";<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    String singleGaugeName = "source.id." + gaugeName;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    String globalGaugeName = "source." + gaugeName;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    long delta = 1;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    String counterName = "counter";<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    String singleCounterName = "source.id." + counterName;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    String globalCounterName = "source." + counterName;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    long count = 2;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    source.decGauge(gaugeName, delta);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    source.getMetricsContext();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    source.getMetricsDescription();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    source.getMetricsJmxContext();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    source.getMetricsName();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    source.incCounters(counterName, count);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    source.incGauge(gaugeName, delta);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    source.init();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    source.removeMetric(gaugeName);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    source.setGauge(gaugeName, delta);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    source.updateHistogram(counterName, count);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    source.incrFailedRecoveryQueue();<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>    verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    verify(globalRms).getMetricsContext();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    verify(globalRms).getMetricsJmxContext();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    verify(globalRms).getMetricsName();<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    verify(singleRms).incCounters(singleCounterName, count);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    verify(globalRms).incCounters(globalCounterName, count);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    verify(globalRms).init();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    verify(singleRms).removeMetric(singleGaugeName);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    verify(globalRms).removeMetric(globalGaugeName);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    verify(spyglobalSourceSource).incrFailedRecoveryQueue();<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    //check singleSourceSourceByTable metrics.<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    // singleSourceSourceByTable map entry will be created only<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    // after calling #setAgeOfLastShippedOpByTable<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    boolean containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        .containsKey("RandomNewTable");<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    Assert.assertEquals(false, containsRandomNewTable);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    source.setAgeOfLastShippedOpByTable(123L, "RandomNewTable");<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        .containsKey("RandomNewTable");<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    Assert.assertEquals(true, containsRandomNewTable);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    MetricsReplicationSourceSource msr = source.getSingleSourceSourceByTable()<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        .get("RandomNewTable");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    // cannot put more concreate value here to verify because the age is arbitrary.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    // as long as it's greater than 0, we see it as correct answer.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    Assert.assertTrue(msr.getLastShippedAge() &gt; 0);<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  private void doPut(byte[] row) throws IOException {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      doPut(connection, row);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    try (Table t = connection.getTable(tableName)) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      Put put = new Put(row);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      put.addColumn(famName, row, row);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      t.put(put);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  private static void doAssert(byte[] row) throws Exception {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      return; // first call<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    List&lt;Cell&gt; cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    Assert.assertEquals(1, cells.size());<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      cells.get(0).getRowLength(), row, 0, row.length));<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>  public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    static UUID uuid = utility1.getRandomUUID();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    static AtomicInteger contructedCount = new AtomicInteger();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    static AtomicInteger startedCount = new AtomicInteger();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    static volatile List&lt;Entry&gt; lastEntries = null;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>    public ReplicationEndpointForTest() {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      replicateCount.set(0);<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      contructedCount.incrementAndGet();<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>    @Override<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    public void start() {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      startAsync();<a name="line.430"></a>
+<span class="sourceLineNo">429</span>    public UUID getPeerUUID() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      return uuid;<a name="line.430"></a>
 <span class="sourceLineNo">431</span>    }<a name="line.431"></a>
 <span class="sourceLineNo">432</span><a name="line.432"></a>
 <span class="sourceLineNo">433</span>    @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    public void stop() {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      stopAsync();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    protected void doStart() {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      startedCount.incrementAndGet();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      notifyStarted();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>    @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    protected void doStop() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      stoppedCount.incrementAndGet();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      notifyStopped();<a name="line.447"></a>
+<span class="sourceLineNo">434</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      replicateCount.incrementAndGet();<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      lastEntries = new ArrayList&lt;&gt;(replicateContext.entries);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      return true;<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>    @Override<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    public void start() {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      startAsync();<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>    @Override<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    public void stop() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      stopAsync();<a name="line.447"></a>
 <span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  public static class InterClusterReplicationEndpointForTest<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      extends HBaseInterClusterReplicationEndpoint {<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    static boolean failedOnce;<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    public InterClusterReplicationEndpointForTest() {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      replicateCount.set(0);<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>    @Override<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      boolean success = super.replicate(replicateContext);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      if (success) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>        replicateCount.addAndGet(replicateContext.entries.size());<a name="line.465"></a>
-<span class="sourceLineNo">466</span

<TRUNCATED>

[11/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.SnapshotFiles.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.SnapshotFiles.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.SnapshotFiles.html
index 9319626..201cbdc 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.SnapshotFiles.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.SnapshotFiles.html
@@ -76,230 +76,226 @@
 <span class="sourceLineNo">068</span><a name="line.68"></a>
 <span class="sourceLineNo">069</span>  private static final Logger LOG = LoggerFactory.getLogger(TestSnapshotFileCache.class);<a name="line.69"></a>
 <span class="sourceLineNo">070</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private static long sequenceId = 0;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private static FileSystem fs;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private static Path rootDir;<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  @BeforeClass<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  public static void startCluster() throws Exception {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    UTIL.startMiniDFSCluster(1);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    fs = UTIL.getDFSCluster().getFileSystem();<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    rootDir = UTIL.getDefaultRootDirPath();<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>  @AfterClass<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  public static void stopCluster() throws Exception {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    UTIL.shutdownMiniDFSCluster();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @After<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public void cleanupFiles() throws Exception {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // cleanup the snapshot directory<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    Path snapshotDir = SnapshotDescriptionUtils.getSnapshotsDir(rootDir);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    fs.delete(snapshotDir, true);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  @Test<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public void testLoadAndDelete() throws IOException {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    // don't refresh the cache unless we tell it to<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    long period = Long.MAX_VALUE;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    SnapshotFileCache cache = new SnapshotFileCache(fs, rootDir, period, 10000000,<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        "test-snapshot-file-cache-refresh", new SnapshotFiles());<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>    createAndTestSnapshotV1(cache, "snapshot1a", false, true);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    createAndTestSnapshotV1(cache, "snapshot1b", true, true);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    createAndTestSnapshotV2(cache, "snapshot2a", false, true);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    createAndTestSnapshotV2(cache, "snapshot2b", true, true);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  @Test<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  public void testReloadModifiedDirectory() throws IOException {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    // don't refresh the cache unless we tell it to<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    long period = Long.MAX_VALUE;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    SnapshotFileCache cache = new SnapshotFileCache(fs, rootDir, period, 10000000,<a name="line.112"></a>
-<span class="sourceLineNo">113</span>        "test-snapshot-file-cache-refresh", new SnapshotFiles());<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>    createAndTestSnapshotV1(cache, "snapshot1", false, true);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    // now delete the snapshot and add a file with a different name<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    createAndTestSnapshotV1(cache, "snapshot1", false, false);<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    createAndTestSnapshotV2(cache, "snapshot2", false, true);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    // now delete the snapshot and add a file with a different name<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    createAndTestSnapshotV2(cache, "snapshot2", false, false);<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>  @Test<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  public void testSnapshotTempDirReload() throws IOException {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    long period = Long.MAX_VALUE;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    // This doesn't refresh cache until we invoke it explicitly<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    SnapshotFileCache cache = new SnapshotFileCache(fs, rootDir, period, 10000000,<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        "test-snapshot-file-cache-refresh", new SnapshotFiles());<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    // Add a new non-tmp snapshot<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    createAndTestSnapshotV1(cache, "snapshot0v1", false, false);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    createAndTestSnapshotV1(cache, "snapshot0v2", false, false);<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>    // Add a new tmp snapshot<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    createAndTestSnapshotV2(cache, "snapshot1", true, false);<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>    // Add another tmp snapshot<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    createAndTestSnapshotV2(cache, "snapshot2", true, false);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  @Test<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public void testWeNeverCacheTmpDirAndLoadIt() throws Exception {<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>    final AtomicInteger count = new AtomicInteger(0);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    // don't refresh the cache unless we tell it to<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    long period = Long.MAX_VALUE;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    SnapshotFileCache cache = new SnapshotFileCache(fs, rootDir, period, 10000000,<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        "test-snapshot-file-cache-refresh", new SnapshotFiles()) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      @Override<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      List&lt;String&gt; getSnapshotsInProgress(final SnapshotManager snapshotManager)<a name="line.151"></a>
-<span class="sourceLineNo">152</span>              throws IOException {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        List&lt;String&gt; result = super.getSnapshotsInProgress(snapshotManager);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        count.incrementAndGet();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        return result;<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 public void triggerCacheRefreshForTesting() {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        super.triggerCacheRefreshForTesting();<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    };<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>    SnapshotMock.SnapshotBuilder complete =<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        createAndTestSnapshotV1(cache, "snapshot", false, false);<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>    SnapshotMock.SnapshotBuilder inProgress =<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        createAndTestSnapshotV1(cache, "snapshotInProgress", true, false);<a name="line.167"></a>
+<span class="sourceLineNo">071</span>  private static FileSystem fs;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private static Path rootDir;<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  @BeforeClass<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  public static void startCluster() throws Exception {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    UTIL.startMiniDFSCluster(1);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    fs = UTIL.getDFSCluster().getFileSystem();<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    rootDir = UTIL.getDefaultRootDirPath();<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  @AfterClass<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  public static void stopCluster() throws Exception {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    UTIL.shutdownMiniDFSCluster();<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  @After<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  public void cleanupFiles() throws Exception {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    // cleanup the snapshot directory<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    Path snapshotDir = SnapshotDescriptionUtils.getSnapshotsDir(rootDir);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    fs.delete(snapshotDir, true);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  }<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  @Test<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  public void testLoadAndDelete() throws IOException {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    // don't refresh the cache unless we tell it to<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    long period = Long.MAX_VALUE;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    SnapshotFileCache cache = new SnapshotFileCache(fs, rootDir, period, 10000000,<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        "test-snapshot-file-cache-refresh", new SnapshotFiles());<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>    createAndTestSnapshotV1(cache, "snapshot1a", false, true);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    createAndTestSnapshotV1(cache, "snapshot1b", true, true);<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>    createAndTestSnapshotV2(cache, "snapshot2a", false, true);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    createAndTestSnapshotV2(cache, "snapshot2b", true, true);<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>  @Test<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  public void testReloadModifiedDirectory() throws IOException {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    // don't refresh the cache unless we tell it to<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    long period = Long.MAX_VALUE;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    SnapshotFileCache cache = new SnapshotFileCache(fs, rootDir, period, 10000000,<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        "test-snapshot-file-cache-refresh", new SnapshotFiles());<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>    createAndTestSnapshotV1(cache, "snapshot1", false, true);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    // now delete the snapshot and add a file with a different name<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    createAndTestSnapshotV1(cache, "snapshot1", false, false);<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>    createAndTestSnapshotV2(cache, "snapshot2", false, true);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    // now delete the snapshot and add a file with a different name<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    createAndTestSnapshotV2(cache, "snapshot2", false, false);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  @Test<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public void testSnapshotTempDirReload() throws IOException {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    long period = Long.MAX_VALUE;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    // This doesn't refresh cache until we invoke it explicitly<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    SnapshotFileCache cache = new SnapshotFileCache(fs, rootDir, period, 10000000,<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        "test-snapshot-file-cache-refresh", new SnapshotFiles());<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>    // Add a new non-tmp snapshot<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    createAndTestSnapshotV1(cache, "snapshot0v1", false, false);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    createAndTestSnapshotV1(cache, "snapshot0v2", false, false);<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>    // Add a new tmp snapshot<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    createAndTestSnapshotV2(cache, "snapshot1", true, false);<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span>    // Add another tmp snapshot<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    createAndTestSnapshotV2(cache, "snapshot2", true, false);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  @Test<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  public void testWeNeverCacheTmpDirAndLoadIt() throws Exception {<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>    final AtomicInteger count = new AtomicInteger(0);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // don't refresh the cache unless we tell it to<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    long period = Long.MAX_VALUE;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    SnapshotFileCache cache = new SnapshotFileCache(fs, rootDir, period, 10000000,<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        "test-snapshot-file-cache-refresh", new SnapshotFiles()) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      @Override<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      List&lt;String&gt; getSnapshotsInProgress(final SnapshotManager snapshotManager)<a name="line.150"></a>
+<span class="sourceLineNo">151</span>              throws IOException {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        List&lt;String&gt; result = super.getSnapshotsInProgress(snapshotManager);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        count.incrementAndGet();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>        return result;<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>      @Override public void triggerCacheRefreshForTesting() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        super.triggerCacheRefreshForTesting();<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    };<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>    SnapshotMock.SnapshotBuilder complete =<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        createAndTestSnapshotV1(cache, "snapshot", false, false);<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>    int countBeforeCheck = count.get();<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>    FSUtils.logFileSystemState(fs, rootDir, LOG);<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>    int countBeforeCheck = count.get();<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    FSUtils.logFileSystemState(fs, rootDir, LOG);<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>    List&lt;FileStatus&gt; allStoreFiles = getStoreFilesForSnapshot(complete);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    Iterable&lt;FileStatus&gt; deletableFiles = cache.getUnreferencedFiles(allStoreFiles, null);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    assertTrue(Iterables.isEmpty(deletableFiles));<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    // no need for tmp dir check as all files are accounted for.<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    assertEquals(0, count.get() - countBeforeCheck);<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>    // add a random file to make sure we refresh<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    FileStatus randomFile = mockStoreFile(UTIL.getRandomUUID().toString());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    allStoreFiles.add(randomFile);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    deletableFiles = cache.getUnreferencedFiles(allStoreFiles, null);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    assertEquals(randomFile, Iterables.getOnlyElement(deletableFiles));<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    assertEquals(1, count.get() - countBeforeCheck); // we check the tmp directory<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>  private List&lt;FileStatus&gt; getStoreFilesForSnapshot(SnapshotMock.SnapshotBuilder builder)<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      throws IOException {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    final List&lt;FileStatus&gt; allStoreFiles = Lists.newArrayList();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    SnapshotReferenceUtil<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        .visitReferencedFiles(UTIL.getConfiguration(), fs, builder.getSnapshotsDir(),<a name="line.192"></a>
-<span class="sourceLineNo">193</span>            new SnapshotReferenceUtil.SnapshotVisitor() {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>              @Override public void storeFile(RegionInfo regionInfo, String familyName,<a name="line.194"></a>
-<span class="sourceLineNo">195</span>                  SnapshotProtos.SnapshotRegionManifest.StoreFile storeFile) throws IOException {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>                FileStatus status = mockStoreFile(storeFile.getName());<a name="line.196"></a>
-<span class="sourceLineNo">197</span>                allStoreFiles.add(status);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>              }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            });<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    return allStoreFiles;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>  private FileStatus mockStoreFile(String storeFileName) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    FileStatus status = mock(FileStatus.class);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    Path path = mock(Path.class);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    when(path.getName()).thenReturn(storeFileName);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    when(status.getPath()).thenReturn(path);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    return status;<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>  class SnapshotFiles implements SnapshotFileCache.SnapshotFileInspector {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    @Override<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    public Collection&lt;String&gt; filesUnderSnapshot(final Path snapshotDir) throws IOException {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      Collection&lt;String&gt; files =  new HashSet&lt;&gt;();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      files.addAll(SnapshotReferenceUtil.getHFileNames(UTIL.getConfiguration(), fs, snapshotDir));<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      return files;<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>  private SnapshotMock.SnapshotBuilder createAndTestSnapshotV1(final SnapshotFileCache cache,<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      final String name, final boolean tmp, final boolean removeOnExit) throws IOException {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    SnapshotMock snapshotMock = new SnapshotMock(UTIL.getConfiguration(), fs, rootDir);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    SnapshotMock.SnapshotBuilder builder = snapshotMock.createSnapshotV1(name, name);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    createAndTestSnapshot(cache, builder, tmp, removeOnExit);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    return builder;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  }<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>  private void createAndTestSnapshotV2(final SnapshotFileCache cache, final String name,<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      final boolean tmp, final boolean removeOnExit) throws IOException {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    SnapshotMock snapshotMock = new SnapshotMock(UTIL.getConfiguration(), fs, rootDir);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    SnapshotMock.SnapshotBuilder builder = snapshotMock.createSnapshotV2(name, name);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    createAndTestSnapshot(cache, builder, tmp, removeOnExit);<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>  private void createAndTestSnapshot(final SnapshotFileCache cache,<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      final SnapshotMock.SnapshotBuilder builder,<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      final boolean tmp, final boolean removeOnExit) throws IOException {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    List&lt;Path&gt; files = new ArrayList&lt;&gt;();<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    for (int i = 0; i &lt; 3; ++i) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      for (Path filePath: builder.addRegion()) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        String fileName = filePath.getName();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        if (tmp) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          // We should be able to find all the files while the snapshot creation is in-progress<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          FSUtils.logFileSystemState(fs, rootDir, LOG);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          Iterable&lt;FileStatus&gt; nonSnapshot = getNonSnapshotFiles(cache, filePath);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>          assertFalse("Cache didn't find " + fileName, Iterables.contains(nonSnapshot, fileName));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        files.add(filePath);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
+<span class="sourceLineNo">169</span>    List&lt;FileStatus&gt; allStoreFiles = getStoreFilesForSnapshot(complete);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    Iterable&lt;FileStatus&gt; deletableFiles = cache.getUnreferencedFiles(allStoreFiles, null);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    assertTrue(Iterables.isEmpty(deletableFiles));<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    // no need for tmp dir check as all files are accounted for.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    assertEquals(0, count.get() - countBeforeCheck);<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>    // add a random file to make sure we refresh<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    FileStatus randomFile = mockStoreFile(UTIL.getRandomUUID().toString());<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    allStoreFiles.add(randomFile);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    deletableFiles = cache.getUnreferencedFiles(allStoreFiles, null);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    assertEquals(randomFile, Iterables.getOnlyElement(deletableFiles));<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    assertEquals(1, count.get() - countBeforeCheck); // we check the tmp directory<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  private List&lt;FileStatus&gt; getStoreFilesForSnapshot(SnapshotMock.SnapshotBuilder builder)<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      throws IOException {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    final List&lt;FileStatus&gt; allStoreFiles = Lists.newArrayList();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    SnapshotReferenceUtil<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .visitReferencedFiles(UTIL.getConfiguration(), fs, builder.getSnapshotsDir(),<a name="line.188"></a>
+<span class="sourceLineNo">189</span>            new SnapshotReferenceUtil.SnapshotVisitor() {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>              @Override public void storeFile(RegionInfo regionInfo, String familyName,<a name="line.190"></a>
+<span class="sourceLineNo">191</span>                  SnapshotProtos.SnapshotRegionManifest.StoreFile storeFile) throws IOException {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>                FileStatus status = mockStoreFile(storeFile.getName());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>                allStoreFiles.add(status);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>              }<a name="line.194"></a>
+<span class="sourceLineNo">195</span>            });<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    return allStoreFiles;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  }<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>  private FileStatus mockStoreFile(String storeFileName) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    FileStatus status = mock(FileStatus.class);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    Path path = mock(Path.class);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    when(path.getName()).thenReturn(storeFileName);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    when(status.getPath()).thenReturn(path);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    return status;<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>  class SnapshotFiles implements SnapshotFileCache.SnapshotFileInspector {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    @Override<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    public Collection&lt;String&gt; filesUnderSnapshot(final Path snapshotDir) throws IOException {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      Collection&lt;String&gt; files =  new HashSet&lt;&gt;();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      files.addAll(SnapshotReferenceUtil.getHFileNames(UTIL.getConfiguration(), fs, snapshotDir));<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      return files;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>  private SnapshotMock.SnapshotBuilder createAndTestSnapshotV1(final SnapshotFileCache cache,<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      final String name, final boolean tmp, final boolean removeOnExit) throws IOException {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    SnapshotMock snapshotMock = new SnapshotMock(UTIL.getConfiguration(), fs, rootDir);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    SnapshotMock.SnapshotBuilder builder = snapshotMock.createSnapshotV1(name, name);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    createAndTestSnapshot(cache, builder, tmp, removeOnExit);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    return builder;<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  private void createAndTestSnapshotV2(final SnapshotFileCache cache, final String name,<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      final boolean tmp, final boolean removeOnExit) throws IOException {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    SnapshotMock snapshotMock = new SnapshotMock(UTIL.getConfiguration(), fs, rootDir);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    SnapshotMock.SnapshotBuilder builder = snapshotMock.createSnapshotV2(name, name);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    createAndTestSnapshot(cache, builder, tmp, removeOnExit);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  private void createAndTestSnapshot(final SnapshotFileCache cache,<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      final SnapshotMock.SnapshotBuilder builder,<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      final boolean tmp, final boolean removeOnExit) throws IOException {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    List&lt;Path&gt; files = new ArrayList&lt;&gt;();<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    for (int i = 0; i &lt; 3; ++i) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      for (Path filePath: builder.addRegion()) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        if (tmp) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>          // We should be able to find all the files while the snapshot creation is in-progress<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          FSUtils.logFileSystemState(fs, rootDir, LOG);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>          assertFalse("Cache didn't find " + filePath,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>            contains(getNonSnapshotFiles(cache, filePath), filePath));<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        }<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        files.add(filePath);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      }<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // Finalize the snapshot<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    if (!tmp) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      builder.commit();<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>    // Finalize the snapshot<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    if (!tmp) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      builder.commit();<a name="line.254"></a>
+<span class="sourceLineNo">252</span>    // Make sure that all files are still present<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    for (Path path: files) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      assertFalse("Cache didn't find " + path, contains(getNonSnapshotFiles(cache, path), path));<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>    // Make sure that all files are still present<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    for (Path path: files) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      Iterable&lt;FileStatus&gt; nonSnapshotFiles = getNonSnapshotFiles(cache, path);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      assertFalse("Cache didn't find " + path.getName(),<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          Iterables.contains(nonSnapshotFiles, path.getName()));<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>    FSUtils.logFileSystemState(fs, rootDir, LOG);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    if (removeOnExit) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      LOG.debug("Deleting snapshot.");<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      fs.delete(builder.getSnapshotsDir(), true);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      FSUtils.logFileSystemState(fs, rootDir, LOG);<a name="line.268"></a>
+<span class="sourceLineNo">257</span>    FSUtils.logFileSystemState(fs, rootDir, LOG);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    if (removeOnExit) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      LOG.debug("Deleting snapshot.");<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      fs.delete(builder.getSnapshotsDir(), true);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      FSUtils.logFileSystemState(fs, rootDir, LOG);<a name="line.261"></a>
+<span class="sourceLineNo">262</span><a name="line.262"></a>
+<span class="sourceLineNo">263</span>      // then trigger a refresh<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      cache.triggerCacheRefreshForTesting();<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      // and not it shouldn't find those files<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      for (Path filePath: files) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        assertTrue("Cache found '" + filePath + "', but it shouldn't have.",<a name="line.267"></a>
+<span class="sourceLineNo">268</span>          contains(getNonSnapshotFiles(cache, filePath), filePath));<a name="line.268"></a>
 <span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>      // The files should be in cache until next refresh<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      for (Path filePath: files) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        Iterable&lt;FileStatus&gt; nonSnapshotFiles = getNonSnapshotFiles(cache, filePath);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        assertFalse("Cache didn't find " + filePath.getName(), Iterables.contains(nonSnapshotFiles,<a name="line.273"></a>
-<span class="sourceLineNo">274</span>            filePath.getName()));<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      }<a name="line.275"></a>
-<span class="sourceLineNo">276</span><a name="line.276"></a>
-<span class="sourceLineNo">277</span>      // then trigger a refresh<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      cache.triggerCacheRefreshForTesting();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      // and not it shouldn't find those files<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      for (Path filePath: files) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        Iterable&lt;FileStatus&gt; nonSnapshotFiles = getNonSnapshotFiles(cache, filePath);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        assertTrue("Cache found '" + filePath.getName() + "', but it shouldn't have.",<a name="line.282"></a>
-<span class="sourceLineNo">283</span>            !Iterables.contains(nonSnapshotFiles, filePath.getName()));<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      }<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>  private Iterable&lt;FileStatus&gt; getNonSnapshotFiles(SnapshotFileCache cache, Path storeFile)<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      throws IOException {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return cache.getUnreferencedFiles(<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        Arrays.asList(FSUtils.listStatus(fs, storeFile.getParent())), null<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    );<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
-<span class="sourceLineNo">294</span>}<a name="line.294"></a>
+<span class="sourceLineNo">270</span>      }<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>  private static boolean contains(Iterable&lt;FileStatus&gt; files, Path filePath) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    for (FileStatus status: files) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      LOG.debug("debug in contains, 3.1: " + status.getPath() + " filePath:" + filePath);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      if (filePath.equals(status.getPath())) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        return true;<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>    return false;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>  private static Iterable&lt;FileStatus&gt; getNonSnapshotFiles(SnapshotFileCache cache, Path storeFile)<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      throws IOException {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    return cache.getUnreferencedFiles(<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        Arrays.asList(FSUtils.listStatus(fs, storeFile.getParent())), null<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    );<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>}<a name="line.290"></a>
 
 
 


[20/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/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 cfe9811..576c53f 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.122">ReplicationSourceManager</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.123">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
@@ -608,7 +608,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.123">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.124">LOG</a></pre>
 </li>
 </ul>
 <a name="sources">
@@ -617,7 +617,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.125">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.126">sources</a></pre>
 </li>
 </ul>
 <a name="oldsources">
@@ -626,7 +626,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.127">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.128">oldsources</a></pre>
 </li>
 </ul>
 <a name="queueStorage">
@@ -635,7 +635,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.128">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.129">queueStorage</a></pre>
 </li>
 </ul>
 <a name="replicationTracker">
@@ -644,7 +644,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.129">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.130">replicationTracker</a></pre>
 </li>
 </ul>
 <a name="replicationPeers">
@@ -653,7 +653,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.130">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.131">replicationPeers</a></pre>
 </li>
 </ul>
 <a name="clusterId">
@@ -662,7 +662,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.132">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.133">clusterId</a></pre>
 </li>
 </ul>
 <a name="server">
@@ -671,7 +671,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.134">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.135">server</a></pre>
 </li>
 </ul>
 <a name="walsById">
@@ -680,7 +680,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.139">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.140">walsById</a></pre>
 </li>
 </ul>
 <a name="walsByIdRecoveredQueues">
@@ -689,7 +689,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.143">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.144">walsByIdRecoveredQueues</a></pre>
 </li>
 </ul>
 <a name="syncReplicationPeerMappingManager">
@@ -698,7 +698,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>syncReplicationPeerMappingManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/SyncReplicationPeerMappingManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">SyncReplicationPeerMappingManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.145">syncReplicationPeerMappingManager</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/SyncReplicationPeerMappingManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">SyncReplicationPeerMappingManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.146">syncReplicationPeerMappingManager</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -707,7 +707,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.147">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.148">conf</a></pre>
 </li>
 </ul>
 <a name="fs">
@@ -716,7 +716,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.148">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.149">fs</a></pre>
 </li>
 </ul>
 <a name="latestPaths">
@@ -725,7 +725,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.150">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.151">latestPaths</a></pre>
 </li>
 </ul>
 <a name="logDir">
@@ -734,7 +734,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.152">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.153">logDir</a></pre>
 </li>
 </ul>
 <a name="oldLogDir">
@@ -743,7 +743,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.154">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.155">oldLogDir</a></pre>
 </li>
 </ul>
 <a name="walFileLengthProvider">
@@ -752,7 +752,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.155">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.156">walFileLengthProvider</a></pre>
 </li>
 </ul>
 <a name="sleepBeforeFailover">
@@ -761,7 +761,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.157">sleepBeforeFailover</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.158">sleepBeforeFailover</a></pre>
 </li>
 </ul>
 <a name="executor">
@@ -770,7 +770,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.159">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.160">executor</a></pre>
 </li>
 </ul>
 <a name="replicationForBulkLoadDataEnabled">
@@ -779,7 +779,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.161">replicationForBulkLoadDataEnabled</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.162">replicationForBulkLoadDataEnabled</a></pre>
 </li>
 </ul>
 <a name="totalBufferUsed">
@@ -788,7 +788,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>totalBufferUsed</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.163">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.164">totalBufferUsed</a></pre>
 </li>
 </ul>
 <a name="sleepForRetries">
@@ -797,7 +797,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>sleepForRetries</h4>
-<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.167">sleepForRetries</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.168">sleepForRetries</a></pre>
 </li>
 </ul>
 <a name="maxRetriesMultiplier">
@@ -806,7 +806,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockListLast">
 <li class="blockList">
 <h4>maxRetriesMultiplier</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.170">maxRetriesMultiplier</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.171">maxRetriesMultiplier</a></pre>
 </li>
 </ul>
 </li>
@@ -823,7 +823,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.184">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.185">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,
@@ -866,7 +866,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.232">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.233">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
@@ -884,7 +884,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.244">adoptAbandonedQueues</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.245">adoptAbandonedQueues</a>()</pre>
 </li>
 </ul>
 <a name="addPeer-java.lang.String-">
@@ -893,7 +893,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.276">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.277">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"><ol>
  <li>Add peer to replicationPeers</li>
@@ -914,7 +914,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.300">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.301">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"><ol>
  <li>Remove peer for replicationPeers</li>
  <li>Remove all the recovered sources for the specified id and related replication queues</li>
@@ -933,7 +933,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.345">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.346">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>
@@ -953,7 +953,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.364">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.365">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
@@ -974,7 +974,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>drainSources</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.410">drainSources</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.411">drainSources</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>,
                          <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block"><p>
@@ -1004,7 +1004,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.474">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.475">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
@@ -1023,7 +1023,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>removeRecoveredSource</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.522">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>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.523">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>
@@ -1037,7 +1037,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>finishRecoveredSource</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.533">finishRecoveredSource</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.534">finishRecoveredSource</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>
 </li>
 </ul>
 <a name="removeSource-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceInterface-">
@@ -1046,7 +1046,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.547">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.548">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>
@@ -1060,7 +1060,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.560">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.561">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>
@@ -1074,7 +1074,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>interruptOrAbortWhenFail</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.573">interruptOrAbortWhenFail</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.574">interruptOrAbortWhenFail</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>
 <div class="block">Refresh replication source will terminate the old source first, then the source thread will be
  interrupted. Need to handle it instead of abort the region server.</div>
 </li>
@@ -1085,7 +1085,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.587">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.588">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-">
@@ -1094,7 +1094,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.595">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.596">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>
@@ -1108,7 +1108,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.603">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.604">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>
@@ -1122,7 +1122,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.618">logPositionAndCleanOldLogs</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&nbsp;source,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.619">logPositionAndCleanOldLogs</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&nbsp;source,
                                        <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
  replication queue.</div>
@@ -1139,7 +1139,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.634">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.635">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="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&nbsp;source)</pre>
 <div class="block">Cleans a log file and all older logs from replication queue. Called when we are sure that a log
@@ -1158,7 +1158,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
 <ul class="blockList">
 <li class="blockList">
 <h4>removeRemoteWALs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.672">removeRemoteWALs</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;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.673">removeRemoteWALs</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/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;remoteWALDir,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="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)
                        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>
@@ -1174,7 +1174,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.692">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.693">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="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&nbsp;source)</pre>
 </li>
 </ul>
@@ -1184,7 +1184,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.738">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.739">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>
@@ -1198,7 +1198,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.796">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.797">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>
@@ -1212,7 +1212,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.804">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.805">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>
@@ -1229,7 +1229,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.814">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.815">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>
@@ -1242,7 +1242,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.980">join</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.988">join</a>()</pre>
 <div class="block">Terminate the replication on this region server</div>
 </li>
 </ul>
@@ -1252,7 +1252,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.992">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.1000">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>
@@ -1266,7 +1266,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.1001">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.1009">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>
@@ -1280,7 +1280,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.1009">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.1017">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>
@@ -1294,7 +1294,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.1017">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.1025">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>
@@ -1308,7 +1308,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.1026">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.1034">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>
@@ -1322,7 +1322,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.1031">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.1039">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>
@@ -1336,7 +1336,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.1042">getSizeOfLatestPath</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.1050">getSizeOfLatestPath</a>()</pre>
 </li>
 </ul>
 <a name="getTotalBufferUsed--">
@@ -1345,7 +1345,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.1049">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.1057">getTotalBufferUsed</a>()</pre>
 </li>
 </ul>
 <a name="getOldLogDir--">
@@ -1354,7 +1354,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.1057">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.1065">getOldLogDir</a>()</pre>
 <div class="block">Get the directory where wals are archived</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1368,7 +1368,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.1065">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.1073">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>
@@ -1382,7 +1382,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.1073">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.1081">getFs</a>()</pre>
 <div class="block">Get the handle on the local file system</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1396,7 +1396,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.1081">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.1089">getReplicationPeers</a>()</pre>
 <div class="block">Get the ReplicationPeers used by this ReplicationSourceManager</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1410,7 +1410,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.1088">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.1096">getStats</a>()</pre>
 <div class="block">Get a string representation of all the sources' metrics</div>
 </li>
 </ul>
@@ -1420,7 +1420,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.1101">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.1109">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>
@@ -1436,7 +1436,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.1108">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.1116">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>
@@ -1446,7 +1446,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.1112">activeFailoverTaskCount</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.1120">activeFailoverTaskCount</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index 034077c..c20ff47 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -110,8 +110,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.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
 </ul>
 </li>
 </ul>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/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 8f0f39b..bf39fdf 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -520,14 +520,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.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/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/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/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/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.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/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
 </ul>
 </li>
 </ul>


[02/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html
index 16827da..beaa49d 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html
@@ -141,7 +141,7 @@
 <span class="sourceLineNo">133</span>      INIT = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>      afterMethod();<a name="line.134"></a>
 <span class="sourceLineNo">135</span>    }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">136</span>    observer.resetFlags();<a name="line.136"></a>
 <span class="sourceLineNo">137</span>  }<a name="line.137"></a>
 <span class="sourceLineNo">138</span><a name="line.138"></a>
 <span class="sourceLineNo">139</span>  @After<a name="line.139"></a>
@@ -313,315 +313,340 @@
 <span class="sourceLineNo">305</span>    boolean preGetRSGroupInfoOfServerCalled = false;<a name="line.305"></a>
 <span class="sourceLineNo">306</span>    boolean postGetRSGroupInfoOfServerCalled = false;<a name="line.306"></a>
 <span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    public Optional&lt;MasterObserver&gt; getMasterObserver() {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return Optional.of(this);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    @Override<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    public void preMoveServersAndTables(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      preMoveServersAndTables = true;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    @Override<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    public void postMoveServersAndTables(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      postMoveServersAndTables = true;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    @Override<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    public void preRemoveServers(<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        Set&lt;Address&gt; servers) throws IOException {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      preRemoveServersCalled = true;<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>    public void postRemoveServers(<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        Set&lt;Address&gt; servers) throws IOException {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      postRemoveServersCalled = true;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    public void preRemoveRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        String name) throws IOException {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      preRemoveRSGroupCalled = true;<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>    public void postRemoveRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        String name) throws IOException {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      postRemoveRSGroupCalled = true;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    public void preAddRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        String name) throws IOException {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      preAddRSGroupCalled = true;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public void postAddRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        String name) throws IOException {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      postAddRSGroupCalled = true;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    }<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    @Override<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    public void preMoveTables(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      preMoveTablesCalled = true;<a name="line.357"></a>
+<span class="sourceLineNo">308</span>    void resetFlags() {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      preBalanceRSGroupCalled = false;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      postBalanceRSGroupCalled = false;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      preMoveServersCalled = false;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      postMoveServersCalled = false;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      preMoveTablesCalled = false;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      postMoveTablesCalled = false;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      preAddRSGroupCalled = false;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      postAddRSGroupCalled = false;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      preRemoveRSGroupCalled = false;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      postRemoveRSGroupCalled = false;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      preRemoveServersCalled = false;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      postRemoveServersCalled = false;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      preMoveServersAndTables = false;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      postMoveServersAndTables = false;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      preGetRSGroupInfoCalled = false;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      postGetRSGroupInfoCalled = false;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      preGetRSGroupInfoOfTableCalled = false;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      postGetRSGroupInfoOfTableCalled = false;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      preListRSGroupsCalled = false;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      postListRSGroupsCalled = false;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      preGetRSGroupInfoOfServerCalled = false;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      postGetRSGroupInfoOfServerCalled = false;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>    @Override<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    public Optional&lt;MasterObserver&gt; getMasterObserver() {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      return Optional.of(this);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    public void preMoveServersAndTables(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      preMoveServersAndTables = true;<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>    public void postMoveServersAndTables(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      postMoveServersAndTables = true;<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>    public void preRemoveServers(<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.349"></a>
+<span class="sourceLineNo">350</span>        Set&lt;Address&gt; servers) throws IOException {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      preRemoveServersCalled = true;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    @Override<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    public void postRemoveServers(<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        Set&lt;Address&gt; servers) throws IOException {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      postRemoveServersCalled = true;<a name="line.357"></a>
 <span class="sourceLineNo">358</span>    }<a name="line.358"></a>
 <span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public void postMoveTables(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      postMoveTablesCalled = true;<a name="line.362"></a>
+<span class="sourceLineNo">360</span>    public void preRemoveRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        String name) throws IOException {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      preRemoveRSGroupCalled = true;<a name="line.362"></a>
 <span class="sourceLineNo">363</span>    }<a name="line.363"></a>
 <span class="sourceLineNo">364</span>    @Override<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    public void preMoveServers(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.365"></a>
-<span class="sourceLineNo">366</span>        Set&lt;Address&gt; servers, String targetGroup) throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      preMoveServersCalled = true;<a name="line.367"></a>
+<span class="sourceLineNo">365</span>    public void postRemoveRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        String name) throws IOException {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      postRemoveRSGroupCalled = true;<a name="line.367"></a>
 <span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    @Override<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    public void postMoveServers(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        Set&lt;Address&gt; servers, String targetGroup) throws IOException {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      postMoveServersCalled = true;<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    }<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    @Override<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    public void preBalanceRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        String groupName) throws IOException {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      preBalanceRSGroupCalled = true;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    public void postBalanceRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        String groupName, boolean balancerRan) throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      postBalanceRSGroupCalled = true;<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>    @Override<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    public void preGetRSGroupInfo(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        final String groupName) throws IOException {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      preGetRSGroupInfoCalled = true;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>    @Override<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    public void postGetRSGroupInfo(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        final String groupName) throws IOException {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      postGetRSGroupInfoCalled = true;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>    @Override<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    public void preGetRSGroupInfoOfTable(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        final TableName tableName) throws IOException {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      preGetRSGroupInfoOfTableCalled = true;<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
-<span class="sourceLineNo">403</span><a name="line.403"></a>
-<span class="sourceLineNo">404</span>    @Override<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    public void postGetRSGroupInfoOfTable(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        final TableName tableName) throws IOException {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      postGetRSGroupInfoOfTableCalled = true;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
-<span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span>    @Override<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public void preListRSGroups(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx)<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        throws IOException {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      preListRSGroupsCalled = true;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    @Override<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    public void postListRSGroups(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx)<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        throws IOException {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      postListRSGroupsCalled = true;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>    @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    public void preGetRSGroupInfoOfServer(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        final Address server) throws IOException {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      preGetRSGroupInfoOfServerCalled = true;<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>    @Override<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    public void postGetRSGroupInfoOfServer(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        final Address server) throws IOException {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      postGetRSGroupInfoOfServerCalled = true;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    public void preAddRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        String name) throws IOException {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      preAddRSGroupCalled = true;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    @Override<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    public void postAddRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        String name) throws IOException {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      postAddRSGroupCalled = true;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    @Override<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    public void preMoveTables(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      preMoveTablesCalled = true;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    @Override<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    public void postMoveTables(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.385"></a>
+<span class="sourceLineNo">386</span>        Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      postMoveTablesCalled = true;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    @Override<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    public void preMoveServers(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        Set&lt;Address&gt; servers, String targetGroup) throws IOException {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      preMoveServersCalled = true;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>    @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    public void postMoveServers(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        Set&lt;Address&gt; servers, String targetGroup) throws IOException {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      postMoveServersCalled = true;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    @Override<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    public void preBalanceRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        String groupName) throws IOException {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      preBalanceRSGroupCalled = true;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    }<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    @Override<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    public void postBalanceRSGroup(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        String groupName, boolean balancerRan) throws IOException {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      postBalanceRSGroupCalled = true;<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
+<span class="sourceLineNo">410</span><a name="line.410"></a>
+<span class="sourceLineNo">411</span>    @Override<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    public void preGetRSGroupInfo(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        final String groupName) throws IOException {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      preGetRSGroupInfoCalled = true;<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    }<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>    @Override<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    public void postGetRSGroupInfo(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        final String groupName) throws IOException {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      postGetRSGroupInfoCalled = true;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>    @Override<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    public void preGetRSGroupInfoOfTable(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        final TableName tableName) throws IOException {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      preGetRSGroupInfoOfTableCalled = true;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span>    @Override<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    public void postGetRSGroupInfoOfTable(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        final TableName tableName) throws IOException {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      postGetRSGroupInfoOfTableCalled = true;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
 <span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>  @Test<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  public void testGetRSGroupInfoCPHookCalled() throws Exception {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    rsGroupAdmin.getRSGroupInfo(RSGroupInfo.DEFAULT_GROUP);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    assertTrue(observer.preGetRSGroupInfoCalled);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    assertTrue(observer.postGetRSGroupInfoCalled);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>  }<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  @Test<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  public void testGetRSGroupInfoOfTableCPHookCalled() throws Exception {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    rsGroupAdmin.getRSGroupInfoOfTable(TableName.META_TABLE_NAME);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    assertTrue(observer.preGetRSGroupInfoOfTableCalled);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    assertTrue(observer.postGetRSGroupInfoOfTableCalled);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>  @Test<a name="line.449"></a>
-<span class="sourceLineNo">450</span>  public void testListRSGroupsCPHookCalled() throws Exception {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    rsGroupAdmin.listRSGroups();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    assertTrue(observer.preListRSGroupsCalled);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    assertTrue(observer.postListRSGroupsCalled);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  @Test<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public void testGetRSGroupInfoOfServerCPHookCalled() throws Exception {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    ServerName masterServerName = ((MiniHBaseCluster) cluster).getMaster().getServerName();<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    rsGroupAdmin.getRSGroupOfServer(masterServerName.getAddress());<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    assertTrue(observer.preGetRSGroupInfoOfServerCalled);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    assertTrue(observer.postGetRSGroupInfoOfServerCalled);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>  @Test<a name="line.464"></a>
-<span class="sourceLineNo">465</span>  public void testMoveServersAndTables() throws Exception {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    super.testMoveServersAndTables();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    assertTrue(observer.preMoveServersAndTables);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    assertTrue(observer.postMoveServersAndTables);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>  @Test<a name="line.470"></a>
-<span class="sourceLineNo">471</span>  public void testTableMoveTruncateAndDrop() throws Exception {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    super.testTableMoveTruncateAndDrop();<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    assertTrue(observer.preMoveTablesCalled);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    assertTrue(observer.postMoveTablesCalled);<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>  @Test<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  public void testRemoveServers() throws Exception {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    super.testRemoveServers();<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    assertTrue(observer.preRemoveServersCalled);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    assertTrue(observer.postRemoveServersCalled);<a name="line.481"></a>
-<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>  @Test<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  public void testMisplacedRegions() throws Exception {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    final TableName tableName = TableName.valueOf(tablePrefix+"_testMisplacedRegions");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    LOG.info("testMisplacedRegions");<a name="line.487"></a>
+<span class="sourceLineNo">435</span>    @Override<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    public void preListRSGroups(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx)<a name="line.436"></a>
+<span class="sourceLineNo">437</span>        throws IOException {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      preListRSGroupsCalled = true;<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>    @Override<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    public void postListRSGroups(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx)<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        throws IOException {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      postListRSGroupsCalled = true;<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>    @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    public void preGetRSGroupInfoOfServer(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        final Address server) throws IOException {<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      preGetRSGroupInfoOfServerCalled = true;<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>    @Override<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    public void postGetRSGroupInfoOfServer(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        final Address server) throws IOException {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      postGetRSGroupInfoOfServerCalled = true;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
+<span class="sourceLineNo">458</span>  }<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span>  @Test<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  public void testGetRSGroupInfoCPHookCalled() throws Exception {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    rsGroupAdmin.getRSGroupInfo(RSGroupInfo.DEFAULT_GROUP);<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    assertTrue(observer.preGetRSGroupInfoCalled);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>    assertTrue(observer.postGetRSGroupInfoCalled);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  }<a name="line.465"></a>
+<span class="sourceLineNo">466</span><a name="line.466"></a>
+<span class="sourceLineNo">467</span>  @Test<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  public void testGetRSGroupInfoOfTableCPHookCalled() throws Exception {<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    rsGroupAdmin.getRSGroupInfoOfTable(TableName.META_TABLE_NAME);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    assertTrue(observer.preGetRSGroupInfoOfTableCalled);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    assertTrue(observer.postGetRSGroupInfoOfTableCalled);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>  @Test<a name="line.474"></a>
+<span class="sourceLineNo">475</span>  public void testListRSGroupsCPHookCalled() throws Exception {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    rsGroupAdmin.listRSGroups();<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    assertTrue(observer.preListRSGroupsCalled);<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    assertTrue(observer.postListRSGroupsCalled);<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
+<span class="sourceLineNo">480</span><a name="line.480"></a>
+<span class="sourceLineNo">481</span>  @Test<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  public void testGetRSGroupInfoOfServerCPHookCalled() throws Exception {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    ServerName masterServerName = ((MiniHBaseCluster) cluster).getMaster().getServerName();<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    rsGroupAdmin.getRSGroupOfServer(masterServerName.getAddress());<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    assertTrue(observer.preGetRSGroupInfoOfServerCalled);<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    assertTrue(observer.postGetRSGroupInfoOfServerCalled);<a name="line.486"></a>
+<span class="sourceLineNo">487</span>  }<a name="line.487"></a>
 <span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    final RSGroupInfo RSGroupInfo = addGroup("testMisplacedRegions", 1);<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>    TEST_UTIL.createMultiRegionTable(tableName, new byte[]{'f'}, 15);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    TEST_UTIL.waitUntilAllRegionsAssigned(tableName);<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>    rsGroupAdminEndpoint.getGroupInfoManager()<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        .moveTables(Sets.newHashSet(tableName), RSGroupInfo.getName());<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    admin.setBalancerRunning(true,true);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    assertTrue(rsGroupAdmin.balanceRSGroup(RSGroupInfo.getName()));<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    admin.setBalancerRunning(false,true);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    assertTrue(observer.preBalanceRSGroupCalled);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    assertTrue(observer.postBalanceRSGroupCalled);<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>    TEST_UTIL.waitFor(60000, new Predicate&lt;Exception&gt;() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      @Override<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      public boolean evaluate() throws Exception {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        ServerName serverName =<a name="line.506"></a>
-<span class="sourceLineNo">507</span>            ServerName.valueOf(RSGroupInfo.getServers().iterator().next().toString(), 1);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>        return admin.getConnection().getAdmin()<a name="line.508"></a>
-<span class="sourceLineNo">509</span>            .getOnlineRegions(serverName).size() == 15;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    });<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  }<a name="line.512"></a>
+<span class="sourceLineNo">489</span>  @Test<a name="line.489"></a>
+<span class="sourceLineNo">490</span>  public void testMoveServersAndTables() throws Exception {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>    super.testMoveServersAndTables();<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    assertTrue(observer.preMoveServersAndTables);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    assertTrue(observer.postMoveServersAndTables);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  @Test<a name="line.495"></a>
+<span class="sourceLineNo">496</span>  public void testTableMoveTruncateAndDrop() throws Exception {<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    super.testTableMoveTruncateAndDrop();<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    assertTrue(observer.preMoveTablesCalled);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    assertTrue(observer.postMoveTablesCalled);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>  }<a name="line.500"></a>
+<span class="sourceLineNo">501</span><a name="line.501"></a>
+<span class="sourceLineNo">502</span>  @Test<a name="line.502"></a>
+<span class="sourceLineNo">503</span>  public void testRemoveServers() throws Exception {<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    super.testRemoveServers();<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    assertTrue(observer.preRemoveServersCalled);<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    assertTrue(observer.postRemoveServersCalled);<a name="line.506"></a>
+<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>  @Test<a name="line.509"></a>
+<span class="sourceLineNo">510</span>  public void testMisplacedRegions() throws Exception {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    final TableName tableName = TableName.valueOf(tablePrefix+"_testMisplacedRegions");<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    LOG.info("testMisplacedRegions");<a name="line.512"></a>
 <span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>  @Test<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  public void testCloneSnapshot() throws Exception {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    byte[] FAMILY = Bytes.toBytes("test");<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    String snapshotName = tableName.getNameAsString() + "_snap";<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    TableName clonedTableName = TableName.valueOf(tableName.getNameAsString() + "_clone");<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>    // create base table<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    TEST_UTIL.createTable(tableName, FAMILY);<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    // create snapshot<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    admin.snapshot(snapshotName, tableName);<a name="line.524"></a>
-<span class="sourceLineNo">525</span><a name="line.525"></a>
-<span class="sourceLineNo">526</span>    // clone<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    admin.cloneSnapshot(snapshotName, clonedTableName);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>  @Test<a name="line.530"></a>
-<span class="sourceLineNo">531</span>  public void testRSGroupsWithHBaseQuota() throws Exception {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    TEST_UTIL.getConfiguration().setBoolean(QuotaUtil.QUOTA_CONF_KEY, true);<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    restartHBaseCluster();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    try {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      TEST_UTIL.waitFor(90000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        @Override<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        public boolean evaluate() throws Exception {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          return admin.isTableAvailable(QuotaTableUtil.QUOTA_TABLE_NAME);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      });<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    } finally {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      TEST_UTIL.getConfiguration().setBoolean(QuotaUtil.QUOTA_CONF_KEY, false);<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      restartHBaseCluster();<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
-<span class="sourceLineNo">546</span><a name="line.546"></a>
-<span class="sourceLineNo">547</span>  @Test<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  public void testRSGroupListDoesNotContainFailedTableCreation() throws Exception {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    toggleQuotaCheckAndRestartMiniCluster(true);<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    String nsp = "np1";<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    NamespaceDescriptor nspDesc =<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        NamespaceDescriptor.create(nsp).addConfiguration(TableNamespaceManager.KEY_MAX_REGIONS, "5")<a name="line.552"></a>
-<span class="sourceLineNo">553</span>            .addConfiguration(TableNamespaceManager.KEY_MAX_TABLES, "2").build();<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    admin.createNamespace(nspDesc);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    assertEquals(3, admin.listNamespaceDescriptors().length);<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    HColumnDescriptor fam1 = new HColumnDescriptor("fam1");<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    HTableDescriptor tableDescOne =<a name="line.557"></a>
-<span class="sourceLineNo">558</span>        new HTableDescriptor(TableName.valueOf(nsp + TableName.NAMESPACE_DELIM + "table1"));<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    tableDescOne.addFamily(fam1);<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    admin.createTable(tableDescOne);<a name="line.560"></a>
-<span class="sourceLineNo">561</span><a name="line.561"></a>
-<span class="sourceLineNo">562</span>    HTableDescriptor tableDescTwo =<a name="line.562"></a>
-<span class="sourceLineNo">563</span>        new HTableDescriptor(TableName.valueOf(nsp + TableName.NAMESPACE_DELIM + "table2"));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    tableDescTwo.addFamily(fam1);<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    boolean constraintViolated = false;<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span>    try {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      admin.createTable(tableDescTwo, Bytes.toBytes("AAA"), Bytes.toBytes("ZZZ"),<a name="line.568"></a>
-<span class="sourceLineNo">569</span>          6);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      Assert.fail("Creation table should fail because of quota violation.");<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    } catch (Exception exp) {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      assertTrue(exp instanceof IOException);<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      constraintViolated = true;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    } finally {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      assertTrue("Constraint not violated for table " + tableDescTwo.getTableName(),<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          constraintViolated);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    List&lt;RSGroupInfo&gt; rsGroupInfoList = rsGroupAdmin.listRSGroups();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    boolean foundTable2 = false;<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    boolean foundTable1 = false;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    for(int i = 0; i &lt; rsGroupInfoList.size(); i++){<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      if(rsGroupInfoList.get(i).getTables().contains(tableDescTwo.getTableName())){<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        foundTable2 = true;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>      }<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      if(rsGroupInfoList.get(i).getTables().contains(tableDescOne.getTableName())){<a name="line.585"></a>
-<span class="sourceLineNo">586</span>        foundTable1 = true;<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>    assertFalse("Found table2 in rsgroup list.", foundTable2);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    assertTrue("Did not find table1 in rsgroup list", foundTable1);<a name="line.590"></a>
+<span class="sourceLineNo">514</span>    final RSGroupInfo RSGroupInfo = addGroup("testMisplacedRegions", 1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span><a name="line.515"></a>
+<span class="sourceLineNo">516</span>    TEST_UTIL.createMultiRegionTable(tableName, new byte[]{'f'}, 15);<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    TEST_UTIL.waitUntilAllRegionsAssigned(tableName);<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>    rsGroupAdminEndpoint.getGroupInfoManager()<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        .moveTables(Sets.newHashSet(tableName), RSGroupInfo.getName());<a name="line.520"></a>
+<span class="sourceLineNo">521</span><a name="line.521"></a>
+<span class="sourceLineNo">522</span>    admin.setBalancerRunning(true,true);<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    assertTrue(rsGroupAdmin.balanceRSGroup(RSGroupInfo.getName()));<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    admin.setBalancerRunning(false,true);<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    assertTrue(observer.preBalanceRSGroupCalled);<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    assertTrue(observer.postBalanceRSGroupCalled);<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>    TEST_UTIL.waitFor(60000, new Predicate&lt;Exception&gt;() {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      @Override<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      public boolean evaluate() throws Exception {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>        ServerName serverName =<a name="line.531"></a>
+<span class="sourceLineNo">532</span>            ServerName.valueOf(RSGroupInfo.getServers().iterator().next().toString(), 1);<a name="line.532"></a>
+<span class="sourceLineNo">533</span>        return admin.getConnection().getAdmin()<a name="line.533"></a>
+<span class="sourceLineNo">534</span>            .getOnlineRegions(serverName).size() == 15;<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      }<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    });<a name="line.536"></a>
+<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
+<span class="sourceLineNo">538</span><a name="line.538"></a>
+<span class="sourceLineNo">539</span>  @Test<a name="line.539"></a>
+<span class="sourceLineNo">540</span>  public void testCloneSnapshot() throws Exception {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    byte[] FAMILY = Bytes.toBytes("test");<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    String snapshotName = tableName.getNameAsString() + "_snap";<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    TableName clonedTableName = TableName.valueOf(tableName.getNameAsString() + "_clone");<a name="line.543"></a>
+<span class="sourceLineNo">544</span><a name="line.544"></a>
+<span class="sourceLineNo">545</span>    // create base table<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    TEST_UTIL.createTable(tableName, FAMILY);<a name="line.546"></a>
+<span class="sourceLineNo">547</span><a name="line.547"></a>
+<span class="sourceLineNo">548</span>    // create snapshot<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    admin.snapshot(snapshotName, tableName);<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    // clone<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    admin.cloneSnapshot(snapshotName, clonedTableName);<a name="line.552"></a>
+<span class="sourceLineNo">553</span>  }<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>  @Test<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  public void testRSGroupsWithHBaseQuota() throws Exception {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    TEST_UTIL.getConfiguration().setBoolean(QuotaUtil.QUOTA_CONF_KEY, true);<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    restartHBaseCluster();<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    try {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      TEST_UTIL.waitFor(90000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.560"></a>
+<span class="sourceLineNo">561</span>        @Override<a name="line.561"></a>
+<span class="sourceLineNo">562</span>        public boolean evaluate() throws Exception {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>          return admin.isTableAvailable(QuotaTableUtil.QUOTA_TABLE_NAME);<a name="line.563"></a>
+<span class="sourceLineNo">564</span>        }<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      });<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    } finally {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>      TEST_UTIL.getConfiguration().setBoolean(QuotaUtil.QUOTA_CONF_KEY, false);<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      restartHBaseCluster();<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
+<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
+<span class="sourceLineNo">571</span><a name="line.571"></a>
+<span class="sourceLineNo">572</span>  @Test<a name="line.572"></a>
+<span class="sourceLineNo">573</span>  public void testRSGroupListDoesNotContainFailedTableCreation() throws Exception {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    toggleQuotaCheckAndRestartMiniCluster(true);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    String nsp = "np1";<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    NamespaceDescriptor nspDesc =<a name="line.576"></a>
+<span class="sourceLineNo">577</span>        NamespaceDescriptor.create(nsp).addConfiguration(TableNamespaceManager.KEY_MAX_REGIONS, "5")<a name="line.577"></a>
+<span class="sourceLineNo">578</span>            .addConfiguration(TableNamespaceManager.KEY_MAX_TABLES, "2").build();<a name="line.578"></a>
+<span class="sourceLineNo">579</span>    admin.createNamespace(nspDesc);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    assertEquals(3, admin.listNamespaceDescriptors().length);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    HColumnDescriptor fam1 = new HColumnDescriptor("fam1");<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    HTableDescriptor tableDescOne =<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        new HTableDescriptor(TableName.valueOf(nsp + TableName.NAMESPACE_DELIM + "table1"));<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    tableDescOne.addFamily(fam1);<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    admin.createTable(tableDescOne);<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span>    HTableDescriptor tableDescTwo =<a name="line.587"></a>
+<span class="sourceLineNo">588</span>        new HTableDescriptor(TableName.valueOf(nsp + TableName.NAMESPACE_DELIM + "table2"));<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    tableDescTwo.addFamily(fam1);<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    boolean constraintViolated = false;<a name="line.590"></a>
 <span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>    TEST_UTIL.deleteTable(tableDescOne.getTableName());<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    admin.deleteNamespace(nspDesc.getName());<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    toggleQuotaCheckAndRestartMiniCluster(false);<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span>  }<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  private void toggleQuotaCheckAndRestartMiniCluster(boolean enable) throws Exception{<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    TEST_UTIL.getConfiguration().setBoolean(QuotaUtil.QUOTA_CONF_KEY, enable);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    TEST_UTIL.startMiniCluster(NUM_SLAVES_BASE - 1);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    TEST_UTIL.getConfiguration().setInt(<a name="line.601"></a>
-<span class="sourceLineNo">602</span>        ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART,<a name="line.602"></a>
-<span class="sourceLineNo">603</span>        NUM_SLAVES_BASE - 1);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    TEST_UTIL.getConfiguration().setBoolean(SnapshotManager.HBASE_SNAPSHOT_ENABLED, true);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    initialize();<a name="line.605"></a>
-<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>  private void restartHBaseCluster() throws Exception {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    LOG.info("\n\nShutting down cluster");<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    TEST_UTIL.shutdownMiniHBaseCluster();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    LOG.info("\n\nSleeping a bit");<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    Thread.sleep(2000);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    TEST_UTIL.restartHBaseCluster(NUM_SLAVES_BASE - 1);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    initialize();<a name="line.614"></a>
-<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>}<a name="line.616"></a>
+<span class="sourceLineNo">592</span>    try {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      admin.createTable(tableDescTwo, Bytes.toBytes("AAA"), Bytes.toBytes("ZZZ"),<a name="line.593"></a>
+<span class="sourceLineNo">594</span>          6);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      Assert.fail("Creation table should fail because of quota violation.");<a name="line.595"></a>
+<span class="sourceLineNo">596</span>    } catch (Exception exp) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      assertTrue(exp instanceof IOException);<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      constraintViolated = true;<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    } finally {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      assertTrue("Constraint not violated for table " + tableDescTwo.getTableName(),<a name="line.600"></a>
+<span class="sourceLineNo">601</span>          constraintViolated);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    }<a name="line.602"></a>
+<span class="sourceLineNo">603</span>    List&lt;RSGroupInfo&gt; rsGroupInfoList = rsGroupAdmin.listRSGroups();<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    boolean foundTable2 = false;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    boolean foundTable1 = false;<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    for(int i = 0; i &lt; rsGroupInfoList.size(); i++){<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      if(rsGroupInfoList.get(i).getTables().contains(tableDescTwo.getTableName())){<a name="line.607"></a>
+<span class="sourceLineNo">608</span>        foundTable2 = true;<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>      if(rsGroupInfoList.get(i).getTables().contains(tableDescOne.getTableName())){<a name="line.610"></a>
+<span class="sourceLineNo">611</span>        foundTable1 = true;<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      }<a name="line.612"></a>
+<span class="sourceLineNo">613</span>    }<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    assertFalse("Found table2 in rsgroup list.", foundTable2);<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    assertTrue("Did not find table1 in rsgroup list", foundTable1);<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>    TEST_UTIL.deleteTable(tableDescOne.getTableName());<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    admin.deleteNamespace(nspDesc.getName());<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    toggleQuotaCheckAndRestartMiniCluster(false);<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>  private void toggleQuotaCheckAndRestartMiniCluster(boolean enable) throws Exception{<a name="line.622"></a>
+<span class="sourceLineNo">623</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    TEST_UTIL.getConfiguration().setBoolean(QuotaUtil.QUOTA_CONF_KEY, enable);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    TEST_UTIL.startMiniCluster(NUM_SLAVES_BASE - 1);<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    TEST_UTIL.getConfiguration().setInt(<a name="line.626"></a>
+<span class="sourceLineNo">627</span>        ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART,<a name="line.627"></a>
+<span class="sourceLineNo">628</span>        NUM_SLAVES_BASE - 1);<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    TEST_UTIL.getConfiguration().setBoolean(SnapshotManager.HBASE_SNAPSHOT_ENABLED, true);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    initialize();<a name="line.630"></a>
+<span class="sourceLineNo">631</span>  }<a name="line.631"></a>
+<span class="sourceLineNo">632</span><a name="line.632"></a>
+<span class="sourceLineNo">633</span>  private void restartHBaseCluster() throws Exception {<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    LOG.info("\n\nShutting down cluster");<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    TEST_UTIL.shutdownMiniHBaseCluster();<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    LOG.info("\n\nSleeping a bit");<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    Thread.sleep(2000);<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    TEST_UTIL.restartHBaseCluster(NUM_SLAVES_BASE - 1);<a name="line.638"></a>
+<span class="sourceLineNo">639</span>    initialize();<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  }<a name="line.640"></a>
+<span class="sourceLineNo">641</span>}<a name="line.641"></a>
 
 
 


[19/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/org/apache/hadoop/metrics2/lib/class-use/MutableFastCounter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/metrics2/lib/class-use/MutableFastCounter.html b/devapidocs/org/apache/hadoop/metrics2/lib/class-use/MutableFastCounter.html
index 9d366f9..196ea9c 100644
--- a/devapidocs/org/apache/hadoop/metrics2/lib/class-use/MutableFastCounter.html
+++ b/devapidocs/org/apache/hadoop/metrics2/lib/class-use/MutableFastCounter.html
@@ -477,117 +477,121 @@ service.</div>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationSinkSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSinkSourceImpl.html#hfilesCounter">hfilesCounter</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#failedRecoveryQueue">failedRecoveryQueue</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#logEditsFilteredCounter">logEditsFilteredCounter</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationSinkSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSinkSourceImpl.html#hfilesCounter">hfilesCounter</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#logEditsFilteredCounter">logEditsFilteredCounter</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#logEditsFilteredCounter">logEditsFilteredCounter</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#logReadInBytesCounter">logReadInBytesCounter</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#logEditsFilteredCounter">logEditsFilteredCounter</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#logReadInBytesCounter">logReadInBytesCounter</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#logReadInBytesCounter">logReadInBytesCounter</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#logReadInEditsCounter">logReadInEditsCounter</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#logReadInBytesCounter">logReadInBytesCounter</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#logReadInEditsCounter">logReadInEditsCounter</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#logReadInEditsCounter">logReadInEditsCounter</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationSinkSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSinkSourceImpl.html#opsCounter">opsCounter</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#logReadInEditsCounter">logReadInEditsCounter</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#repeatedFileBytes">repeatedFileBytes</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationSinkSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSinkSourceImpl.html#opsCounter">opsCounter</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#repeatedFileBytes">repeatedFileBytes</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#repeatedFileBytes">repeatedFileBytes</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#restartWALReading">restartWALReading</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#repeatedFileBytes">repeatedFileBytes</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#restartWALReading">restartWALReading</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#restartWALReading">restartWALReading</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#shippedBatchesCounter">shippedBatchesCounter</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#restartWALReading">restartWALReading</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#shippedBatchesCounter">shippedBatchesCounter</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#shippedBatchesCounter">shippedBatchesCounter</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#shippedBytesCounter">shippedBytesCounter</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#shippedBatchesCounter">shippedBatchesCounter</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#shippedBytesCounter">shippedBytesCounter</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#shippedBytesCounter">shippedBytesCounter</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#shippedHFilesCounter">shippedHFilesCounter</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#shippedBytesCounter">shippedBytesCounter</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#shippedHFilesCounter">shippedHFilesCounter</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#shippedHFilesCounter">shippedHFilesCounter</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#shippedKBsCounter">shippedKBsCounter</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#shippedHFilesCounter">shippedHFilesCounter</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
+<td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#shippedKBsCounter">shippedKBsCounter</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#shippedKBsCounter">shippedKBsCounter</a></span></code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
 <div class="block"><span class="deprecationComment">since 1.3.0. Use <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#shippedBytesCounter"><code>MetricsReplicationGlobalSourceSource.shippedBytesCounter</code></a> instead.</span></div>
 </div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#shippedOpsCounter">shippedOpsCounter</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#shippedOpsCounter">shippedOpsCounter</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#uncleanlyClosedSkippedBytes">uncleanlyClosedSkippedBytes</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#uncleanlyClosedSkippedBytes">uncleanlyClosedSkippedBytes</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#uncleanlyClosedWAL">uncleanlyClosedWAL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#uncleanlyClosedWAL">uncleanlyClosedWAL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MetricsReplicationSourceSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#unknownFileLengthForClosedWAL">unknownFileLengthForClosedWAL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MetricsReplicationGlobalSourceSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#unknownFileLengthForClosedWAL">unknownFileLengthForClosedWAL</a></span></code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/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 a7b2b34..dbb0b4b 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 = "f9d51b67e45f1f213c37b14bfe96e442bc71a995";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "42aa3dd463c0d30a9b940d296b87316b5c67e1f5";<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 = "Sun Sep 30 14:42:29 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Tue Oct  2 14:44:08 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 = "8ea5c410a4d8c260360e2021a70b2661";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "71ccf58161ef9c9c0e0dc546d4bc2c7b";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html
index a9cc532..70c428c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html
@@ -210,7 +210,14 @@
 <span class="sourceLineNo">202</span>   * created hfile references during the call may not be included.<a name="line.202"></a>
 <span class="sourceLineNo">203</span>   */<a name="line.203"></a>
 <span class="sourceLineNo">204</span>  Set&lt;String&gt; getAllHFileRefs() throws ReplicationException;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>}<a name="line.205"></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>   * Get full znode name for given region server<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   * @param serverName the name of the region server<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   * @return full znode name<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   */<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  String getRsNode(ServerName serverName);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>}<a name="line.212"></a>
 
 
 


[23/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html
index a284487..1015127 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":9,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":9,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -148,46 +148,50 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#completedWAL">completedWAL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#failedRecoveryQueue">failedRecoveryQueue</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#KEY_PREFIX">KEY_PREFIX</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#logEditsFilteredCounter">logEditsFilteredCounter</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#logReadInBytesCounter">logReadInBytesCounter</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#logReadInEditsCounter">logReadInEditsCounter</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#repeatedFileBytes">repeatedFileBytes</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#restartWALReading">restartWALReading</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceImpl</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#rms">rms</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#shippedBatchesCounter">shippedBatchesCounter</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#shippedBytesCounter">shippedBytesCounter</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#shippedHFilesCounter">shippedHFilesCounter</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#shippedKBsCounter">shippedKBsCounter</a></span></code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -195,27 +199,27 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 </div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#shippedOpsCounter">shippedOpsCounter</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private org.apache.hadoop.metrics2.lib.MutableGaugeLong</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#sizeOfHFileRefsQueueGauge">sizeOfHFileRefsQueueGauge</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private org.apache.hadoop.metrics2.lib.MutableGaugeLong</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#sizeOfLogQueueGauge">sizeOfLogQueueGauge</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#uncleanlyClosedSkippedBytes">uncleanlyClosedSkippedBytes</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#uncleanlyClosedWAL">uncleanlyClosedWAL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#unknownFileLengthForClosedWAL">unknownFileLengthForClosedWAL</a></span></code>&nbsp;</td>
 </tr>
@@ -225,7 +229,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <!--   -->
 </a>
 <h3>Fields inherited from interface&nbsp;org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_AGE_OF_LAST_SHIPPED_OP">SOURCE_AGE_OF_LAST_SHIPPED_OP</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_CLOSED_LOGS_WITH_UNKNOWN_LENGTH">SOURCE_CLOSED_LOGS_WITH_UNKNOWN_LENGTH</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_COMPLETED_LOGS">SOURCE_COMPLETED_LOGS</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_COMPLETED_RECOVERY_QUEUES">SOURCE_COMPLETED_RECOVERY_QUEUES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_EDITS_FILTERED">SOURCE_LOG_EDITS_FILTERED</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceS
 ource.html#SOURCE_LOG_READ_IN_BYTES">SOURCE_LOG_READ_IN_BYTES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_READ_IN_EDITS">SOURCE_LOG_READ_IN_EDITS</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_REPEATED_LOG_FILE_BYTES">SOURCE_REPEATED_LOG_FILE_BYTES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_RESTARTED_LOG_READING">SOURCE_RESTARTED_LOG_READING</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_BATCHES">SOURCE_SHIPPED_BATCHES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_BYTES">SOURCE_SHIPPED_BYTES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Metric
 sReplicationSourceSource.html#SOURCE_SHIPPED_HFILES">SOURCE_SHIPPED_HFILES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_KBS">SOURCE_SHIPPED_KBS</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_OPS">SOURCE_SHIPPED_OPS</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SIZE_OF_HFILE_REFS_QUEUE">SOURCE_SIZE_OF_HFILE_REFS_QUEUE</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SIZE_OF_LOG_QUEUE">SOURCE_SIZE_OF_LOG_QUEUE</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_UNCLEANLY_CLOSED_IGNORED_IN_BYTES">SOURCE_UNCLEANLY_CLOSED_IGNORED_IN_BYTES</a>, <a href="../../../../../../org/apache/hadoop/hbase/repl
 ication/regionserver/MetricsReplicationSourceSource.html#SOURCE_UNCLEANLY_CLOSED_LOGS">SOURCE_UNCLEANLY_CLOSED_LOGS</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_AGE_OF_LAST_SHIPPED_OP">SOURCE_AGE_OF_LAST_SHIPPED_OP</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_CLOSED_LOGS_WITH_UNKNOWN_LENGTH">SOURCE_CLOSED_LOGS_WITH_UNKNOWN_LENGTH</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_COMPLETED_LOGS">SOURCE_COMPLETED_LOGS</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_COMPLETED_RECOVERY_QUEUES">SOURCE_COMPLETED_RECOVERY_QUEUES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_FAILED_RECOVERY_QUEUES">SOURCE_FAILED_RECOVERY_QUEUES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicatio
 nSourceSource.html#SOURCE_LOG_EDITS_FILTERED">SOURCE_LOG_EDITS_FILTERED</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_READ_IN_BYTES">SOURCE_LOG_READ_IN_BYTES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_READ_IN_EDITS">SOURCE_LOG_READ_IN_EDITS</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_REPEATED_LOG_FILE_BYTES">SOURCE_REPEATED_LOG_FILE_BYTES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_RESTARTED_LOG_READING">SOURCE_RESTARTED_LOG_READING</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_BATCHES">SOURCE_SHIPPED_BATCHES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/r
 egionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_BYTES">SOURCE_SHIPPED_BYTES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_HFILES">SOURCE_SHIPPED_HFILES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_KBS">SOURCE_SHIPPED_KBS</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_OPS">SOURCE_SHIPPED_OPS</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SIZE_OF_HFILE_REFS_QUEUE">SOURCE_SIZE_OF_HFILE_REFS_QUEUE</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SIZE_OF_LOG_QUEUE">SOURCE_SIZE_OF_LOG_QUEUE</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/M
 etricsReplicationSourceSource.html#SOURCE_UNCLEANLY_CLOSED_IGNORED_IN_BYTES">SOURCE_UNCLEANLY_CLOSED_IGNORED_IN_BYTES</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_UNCLEANLY_CLOSED_LOGS">SOURCE_UNCLEANLY_CLOSED_LOGS</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.metrics.BaseSource">
@@ -353,76 +357,80 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 </tr>
 <tr id="i17" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrHFilesShipped-long-">incrHFilesShipped</a></span>(long&nbsp;hfiles)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrFailedRecoveryQueue--">incrFailedRecoveryQueue</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i18" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrLogEditsFiltered-long-">incrLogEditsFiltered</a></span>(long&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrHFilesShipped-long-">incrHFilesShipped</a></span>(long&nbsp;hfiles)</code>&nbsp;</td>
 </tr>
 <tr id="i19" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrLogReadInBytes-long-">incrLogReadInBytes</a></span>(long&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrLogEditsFiltered-long-">incrLogEditsFiltered</a></span>(long&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i20" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrLogReadInEdits-long-">incrLogReadInEdits</a></span>(long&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrLogReadInBytes-long-">incrLogReadInBytes</a></span>(long&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i21" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrOpsShipped-long-">incrOpsShipped</a></span>(long&nbsp;ops)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrLogReadInEdits-long-">incrLogReadInEdits</a></span>(long&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i22" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrRepeatedFileBytes-long-">incrRepeatedFileBytes</a></span>(long&nbsp;bytes)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrOpsShipped-long-">incrOpsShipped</a></span>(long&nbsp;ops)</code>&nbsp;</td>
 </tr>
 <tr id="i23" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrRestartedWALReading--">incrRestartedWALReading</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrRepeatedFileBytes-long-">incrRepeatedFileBytes</a></span>(long&nbsp;bytes)</code>&nbsp;</td>
 </tr>
 <tr id="i24" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrShippedBytes-long-">incrShippedBytes</a></span>(long&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrRestartedWALReading--">incrRestartedWALReading</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i25" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrSizeOfHFileRefsQueue-long-">incrSizeOfHFileRefsQueue</a></span>(long&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrShippedBytes-long-">incrShippedBytes</a></span>(long&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i26" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrSizeOfLogQueue-int-">incrSizeOfLogQueue</a></span>(int&nbsp;size)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrSizeOfHFileRefsQueue-long-">incrSizeOfHFileRefsQueue</a></span>(long&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i27" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrUncleanlyClosedWALs--">incrUncleanlyClosedWALs</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrSizeOfLogQueue-int-">incrSizeOfLogQueue</a></span>(int&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr id="i28" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrUnknownFileLengthForClosedWAL--">incrUnknownFileLengthForClosedWAL</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrUncleanlyClosedWALs--">incrUncleanlyClosedWALs</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i29" class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrUnknownFileLengthForClosedWAL--">incrUnknownFileLengthForClosedWAL</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i30" class="altColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#init--">init</a></span>()</code>
 <div class="block">Clear out the metrics and re-prepare the source.</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#removeMetric-java.lang.String-">removeMetric</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;key)</code>
 <div class="block">Remove a metric and no longer announce it.</div>
 </td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#setGauge-java.lang.String-long-">setGauge</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;gaugeName,
         long&nbsp;value)</code>
 <div class="block">Set a gauge to a specific value.</div>
 </td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#setLastShippedAge-long-">setLastShippedAge</a></span>(long&nbsp;age)</code>&nbsp;</td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#updateHistogram-java.lang.String-long-">updateHistogram</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                long&nbsp;value)</code>
@@ -638,12 +646,21 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <a name="completedRecoveryQueue">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>completedRecoveryQueue</h4>
 <pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.54">completedRecoveryQueue</a></pre>
 </li>
 </ul>
+<a name="failedRecoveryQueue">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>failedRecoveryQueue</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.55">failedRecoveryQueue</a></pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -658,7 +675,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MetricsReplicationGlobalSourceSource</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.56">MetricsReplicationGlobalSourceSource</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceImpl</a>&nbsp;rms)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.57">MetricsReplicationGlobalSourceSource</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceImpl</a>&nbsp;rms)</pre>
 </li>
 </ul>
 </li>
@@ -675,7 +692,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>setLastShippedAge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.94">setLastShippedAge</a>(long&nbsp;age)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.97">setLastShippedAge</a>(long&nbsp;age)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#setLastShippedAge-long-">setLastShippedAge</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -688,7 +705,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrSizeOfLogQueue</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.98">incrSizeOfLogQueue</a>(int&nbsp;size)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.101">incrSizeOfLogQueue</a>(int&nbsp;size)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrSizeOfLogQueue-int-">incrSizeOfLogQueue</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -701,7 +718,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>decrSizeOfLogQueue</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.102">decrSizeOfLogQueue</a>(int&nbsp;size)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.105">decrSizeOfLogQueue</a>(int&nbsp;size)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#decrSizeOfLogQueue-int-">decrSizeOfLogQueue</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -714,7 +731,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrLogReadInEdits</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.106">incrLogReadInEdits</a>(long&nbsp;size)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.109">incrLogReadInEdits</a>(long&nbsp;size)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrLogReadInEdits-long-">incrLogReadInEdits</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -727,7 +744,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrLogEditsFiltered</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.110">incrLogEditsFiltered</a>(long&nbsp;size)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.113">incrLogEditsFiltered</a>(long&nbsp;size)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrLogEditsFiltered-long-">incrLogEditsFiltered</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -740,7 +757,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrBatchesShipped</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.114">incrBatchesShipped</a>(int&nbsp;batches)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.117">incrBatchesShipped</a>(int&nbsp;batches)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrBatchesShipped-int-">incrBatchesShipped</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -753,7 +770,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrOpsShipped</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.118">incrOpsShipped</a>(long&nbsp;ops)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.121">incrOpsShipped</a>(long&nbsp;ops)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrOpsShipped-long-">incrOpsShipped</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -766,7 +783,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrShippedBytes</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.122">incrShippedBytes</a>(long&nbsp;size)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.125">incrShippedBytes</a>(long&nbsp;size)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrShippedBytes-long-">incrShippedBytes</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -779,7 +796,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementKBsCounter</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.129">incrementKBsCounter</a>(<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a>&nbsp;bytesCounter,
+<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.132">incrementKBsCounter</a>(<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a>&nbsp;bytesCounter,
                                 <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a>&nbsp;kbsCounter)</pre>
 </li>
 </ul>
@@ -789,7 +806,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrLogReadInBytes</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.143">incrLogReadInBytes</a>(long&nbsp;size)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.146">incrLogReadInBytes</a>(long&nbsp;size)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrLogReadInBytes-long-">incrLogReadInBytes</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -802,7 +819,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>clear</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.147">clear</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.150">clear</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#clear--">clear</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -815,7 +832,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastShippedAge</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.151">getLastShippedAge</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.154">getLastShippedAge</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#getLastShippedAge--">getLastShippedAge</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -828,7 +845,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrHFilesShipped</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.155">incrHFilesShipped</a>(long&nbsp;hfiles)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.158">incrHFilesShipped</a>(long&nbsp;hfiles)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrHFilesShipped-long-">incrHFilesShipped</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -841,7 +858,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrSizeOfHFileRefsQueue</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.160">incrSizeOfHFileRefsQueue</a>(long&nbsp;size)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.163">incrSizeOfHFileRefsQueue</a>(long&nbsp;size)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrSizeOfHFileRefsQueue-long-">incrSizeOfHFileRefsQueue</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -854,7 +871,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>decrSizeOfHFileRefsQueue</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.165">decrSizeOfHFileRefsQueue</a>(long&nbsp;size)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.168">decrSizeOfHFileRefsQueue</a>(long&nbsp;size)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#decrSizeOfHFileRefsQueue-long-">decrSizeOfHFileRefsQueue</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -867,7 +884,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>getSizeOfLogQueue</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.170">getSizeOfLogQueue</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.173">getSizeOfLogQueue</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#getSizeOfLogQueue--">getSizeOfLogQueue</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -880,7 +897,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrUnknownFileLengthForClosedWAL</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.175">incrUnknownFileLengthForClosedWAL</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.178">incrUnknownFileLengthForClosedWAL</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrUnknownFileLengthForClosedWAL--">incrUnknownFileLengthForClosedWAL</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -893,7 +910,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrUncleanlyClosedWALs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.179">incrUncleanlyClosedWALs</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.182">incrUncleanlyClosedWALs</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrUncleanlyClosedWALs--">incrUncleanlyClosedWALs</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -906,7 +923,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrBytesSkippedInUncleanlyClosedWALs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.183">incrBytesSkippedInUncleanlyClosedWALs</a>(long&nbsp;bytes)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.186">incrBytesSkippedInUncleanlyClosedWALs</a>(long&nbsp;bytes)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrBytesSkippedInUncleanlyClosedWALs-long-">incrBytesSkippedInUncleanlyClosedWALs</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -919,7 +936,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrRestartedWALReading</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.187">incrRestartedWALReading</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.190">incrRestartedWALReading</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrRestartedWALReading--">incrRestartedWALReading</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -932,7 +949,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrRepeatedFileBytes</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.191">incrRepeatedFileBytes</a>(long&nbsp;bytes)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.194">incrRepeatedFileBytes</a>(long&nbsp;bytes)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrRepeatedFileBytes-long-">incrRepeatedFileBytes</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -945,7 +962,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrCompletedWAL</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.195">incrCompletedWAL</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.198">incrCompletedWAL</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrCompletedWAL--">incrCompletedWAL</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
@@ -958,20 +975,33 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incrCompletedRecoveryQueue</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.199">incrCompletedRecoveryQueue</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.202">incrCompletedRecoveryQueue</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrCompletedRecoveryQueue--">incrCompletedRecoveryQueue</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
 </dl>
 </li>
 </ul>
+<a name="incrFailedRecoveryQueue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>incrFailedRecoveryQueue</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.206">incrFailedRecoveryQueue</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrFailedRecoveryQueue--">incrFailedRecoveryQueue</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="init--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.204">init</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.210">init</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#init--">BaseSource</a></code></span></div>
 <div class="block">Clear out the metrics and re-prepare the source.</div>
 <dl>
@@ -986,7 +1016,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>setGauge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.209">setGauge</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;gaugeName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.215">setGauge</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;gaugeName,
                      long&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#setGauge-java.lang.String-long-">BaseSource</a></code></span></div>
 <div class="block">Set a gauge to a specific value.</div>
@@ -1005,7 +1035,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incGauge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.214">incGauge</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;gaugeName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.220">incGauge</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;gaugeName,
                      long&nbsp;delta)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#incGauge-java.lang.String-long-">BaseSource</a></code></span></div>
 <div class="block">Add some amount to a gauge.</div>
@@ -1024,7 +1054,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>decGauge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.219">decGauge</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;gaugeName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.225">decGauge</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;gaugeName,
                      long&nbsp;delta)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#decGauge-java.lang.String-long-">BaseSource</a></code></span></div>
 <div class="block">Subtract some amount from a gauge.</div>
@@ -1043,7 +1073,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>removeMetric</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.224">removeMetric</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;key)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.230">removeMetric</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;key)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#removeMetric-java.lang.String-">BaseSource</a></code></span></div>
 <div class="block">Remove a metric and no longer announce it.</div>
 <dl>
@@ -1060,7 +1090,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>incCounters</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.229">incCounters</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;counterName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.235">incCounters</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;counterName,
                         long&nbsp;delta)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#incCounters-java.lang.String-long-">BaseSource</a></code></span></div>
 <div class="block">Add some amount to a counter.</div>
@@ -1079,7 +1109,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>updateHistogram</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.234">updateHistogram</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#line.240">updateHistogram</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                             long&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#updateHistogram-java.lang.String-long-">BaseSource</a></code></span></div>
 <div class="block">Add some value to a histogram.</div>
@@ -1098,7 +1128,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetricsContext</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/MetricsReplicationGlobalSourceSource.html#line.239">getMetricsContext</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/MetricsReplicationGlobalSourceSource.html#line.245">getMetricsContext</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#getMetricsContext--">BaseSource</a></code></span></div>
 <div class="block">Get the metrics context.  For hadoop metrics2 system this is usually an all lowercased string.
  eg. regionserver, master, thriftserver</div>
@@ -1116,7 +1146,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetricsDescription</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/MetricsReplicationGlobalSourceSource.html#line.244">getMetricsDescription</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/MetricsReplicationGlobalSourceSource.html#line.250">getMetricsDescription</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#getMetricsDescription--">BaseSource</a></code></span></div>
 <div class="block">Get the description of what this source exposes.</div>
 <dl>
@@ -1131,7 +1161,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetricsJmxContext</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/MetricsReplicationGlobalSourceSource.html#line.249">getMetricsJmxContext</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/MetricsReplicationGlobalSourceSource.html#line.255">getMetricsJmxContext</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#getMetricsJmxContext--">BaseSource</a></code></span></div>
 <div class="block">Get the name of the context in JMX that this source will be exposed through.
  This is in ObjectName format. With the default context being Hadoop -&gt; HBase</div>
@@ -1147,7 +1177,7 @@ private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/Mut
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getMetricsName</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/MetricsReplicationGlobalSourceSource.html#line.254">getMetricsName</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/MetricsReplicationGlobalSourceSource.html#line.260">getMetricsName</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#getMetricsName--">BaseSource</a></code></span></div>
 <div class="block">Get the name of the metrics that are being exported by this source.
  Eg. IPC, GC, WAL</div>


[18/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html
index 55713d8..de7bd4a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html
@@ -126,564 +126,565 @@
 <span class="sourceLineNo">118</span>        .get(ZOOKEEPER_ZNODE_REPLICATION_REGIONS_KEY, ZOOKEEPER_ZNODE_REPLICATION_REGIONS_DEFAULT));<a name="line.118"></a>
 <span class="sourceLineNo">119</span>  }<a name="line.119"></a>
 <span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private String getRsNode(ServerName serverName) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    return ZNodePaths.joinZNode(queuesZNode, serverName.getServerName());<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>  private String getQueueNode(ServerName serverName, String queueId) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    return ZNodePaths.joinZNode(getRsNode(serverName), queueId);<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>  private String getFileNode(String queueNode, String fileName) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    return ZNodePaths.joinZNode(queueNode, fileName);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>  private String getFileNode(ServerName serverName, String queueId, String fileName) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    return getFileNode(getQueueNode(serverName, queueId), fileName);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  /**<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   * &lt;p&gt;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   * Put all regions under /hbase/replication/regions znode will lead to too many children because<a name="line.139"></a>
-<span class="sourceLineNo">140</span>   * of the huge number of regions in real production environment. So here we will distribute the<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   * znodes to multiple directories.<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   * &lt;/p&gt;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * &lt;p&gt;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * So the final znode path will be format like this:<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   *<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * &lt;pre&gt;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * /hbase/replication/regions/dd/04/e76a6966d4ffa908ed0586764767-100<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * &lt;/pre&gt;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   *<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * Here the full encoded region name is dd04e76a6966d4ffa908ed0586764767, and we use the first two<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * characters 'dd' as the first level directory name, and use the next two characters '04' as the<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * second level directory name, and the rest part as the prefix of the znode, and the suffix '100'<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * is the peer id.<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * &lt;/p&gt;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * @param encodedRegionName the encoded region name.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * @param peerId peer id for replication.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * @return ZNode path to persist the max sequence id that we've pushed for the given region and<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   *         peer.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   */<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  @VisibleForTesting<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  String getSerialReplicationRegionPeerNode(String encodedRegionName, String peerId) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    if (encodedRegionName == null || encodedRegionName.length() != RegionInfo.MD5_HEX_LENGTH) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      throw new IllegalArgumentException(<a name="line.163"></a>
-<span class="sourceLineNo">164</span>          "Invalid encoded region name: " + encodedRegionName + ", length should be 32.");<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    return new StringBuilder(regionsZNode).append(ZNodePaths.ZNODE_PATH_SEPARATOR)<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        .append(encodedRegionName.substring(0, 2)).append(ZNodePaths.ZNODE_PATH_SEPARATOR)<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        .append(encodedRegionName.substring(2, 4)).append(ZNodePaths.ZNODE_PATH_SEPARATOR)<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        .append(encodedRegionName.substring(4)).append("-").append(peerId).toString();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>  @Override<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public void removeQueue(ServerName serverName, String queueId) throws ReplicationException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    try {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      ZKUtil.deleteNodeRecursively(zookeeper, getQueueNode(serverName, queueId));<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    } catch (KeeperException e) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      throw new ReplicationException(<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          "Failed to delete queue (serverName=" + serverName + ", queueId=" + queueId + ")", e);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>  @Override<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  public void addWAL(ServerName serverName, String queueId, String fileName)<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      throws ReplicationException {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    try {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      ZKUtil.createWithParents(zookeeper, getFileNode(serverName, queueId, fileName));<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    } catch (KeeperException e) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      throw new ReplicationException("Failed to add wal to queue (serverName=" + serverName<a name="line.188"></a>
-<span class="sourceLineNo">189</span>          + ", queueId=" + queueId + ", fileName=" + fileName + ")", e);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>  @Override<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public void removeWAL(ServerName serverName, String queueId, String fileName)<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      throws ReplicationException {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    String fileNode = getFileNode(serverName, queueId, fileName);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    try {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      ZKUtil.deleteNode(zookeeper, fileNode);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    } catch (NoNodeException e) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      LOG.warn("{} already deleted when removing log", fileNode);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    } catch (KeeperException e) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      throw new ReplicationException("Failed to remove wal from queue (serverName=" + serverName +<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        ", queueId=" + queueId + ", fileName=" + fileName + ")", e);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  private void addLastSeqIdsToOps(String queueId, Map&lt;String, Long&gt; lastSeqIds,<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      List&lt;ZKUtilOp&gt; listOfOps) throws KeeperException, ReplicationException {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    String peerId = new ReplicationQueueInfo(queueId).getPeerId();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    for (Entry&lt;String, Long&gt; lastSeqEntry : lastSeqIds.entrySet()) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      String path = getSerialReplicationRegionPeerNode(lastSeqEntry.getKey(), peerId);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      Pair&lt;Long, Integer&gt; p = getLastSequenceIdWithVersion(lastSeqEntry.getKey(), peerId);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      byte[] data = ZKUtil.positionToByteArray(lastSeqEntry.getValue());<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      if (p.getSecond() &lt; 0) { // ZNode does not exist.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        ZKUtil.createWithParents(zookeeper,<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          path.substring(0, path.lastIndexOf(ZNodePaths.ZNODE_PATH_SEPARATOR)));<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        listOfOps.add(ZKUtilOp.createAndFailSilent(path, data));<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        continue;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // Perform CAS in a specific version v0 (HBASE-20138)<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      int v0 = p.getSecond();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      long lastPushedSeqId = p.getFirst();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      if (lastSeqEntry.getValue() &lt;= lastPushedSeqId) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        continue;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      listOfOps.add(ZKUtilOp.setData(path, data, v0));<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>  @Override<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public void setWALPosition(ServerName serverName, String queueId, String fileName, long position,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      Map&lt;String, Long&gt; lastSeqIds) throws ReplicationException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    try {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      for (int retry = 0;; retry++) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        List&lt;ZKUtilOp&gt; listOfOps = new ArrayList&lt;&gt;();<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        if (position &gt; 0) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          listOfOps.add(ZKUtilOp.setData(getFileNode(serverName, queueId, fileName),<a name="line.237"></a>
-<span class="sourceLineNo">238</span>            ZKUtil.positionToByteArray(position)));<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        }<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        // Persist the max sequence id(s) of regions for serial replication atomically.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        addLastSeqIdsToOps(queueId, lastSeqIds, listOfOps);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        if (listOfOps.isEmpty()) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          return;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        }<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        try {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>          ZKUtil.multiOrSequential(zookeeper, listOfOps, false);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          return;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        } catch (KeeperException.BadVersionException | KeeperException.NodeExistsException e) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          LOG.warn(<a name="line.249"></a>
-<span class="sourceLineNo">250</span>            "Bad version(or node exist) when persist the last pushed sequence id to zookeeper storage, "<a name="line.250"></a>
-<span class="sourceLineNo">251</span>                + "Retry = " + retry + ", serverName=" + serverName + ", queueId=" + queueId<a name="line.251"></a>
-<span class="sourceLineNo">252</span>                + ", fileName=" + fileName);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      }<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    } catch (KeeperException e) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      throw new ReplicationException("Failed to set log position (serverName=" + serverName<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          + ", queueId=" + queueId + ", fileName=" + fileName + ", position=" + position + ")", e);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  }<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>  /**<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * Return the {lastPushedSequenceId, ZNodeDataVersion} pair. if ZNodeDataVersion is -1, it means<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * that the ZNode does not exist.<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   */<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  @VisibleForTesting<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  protected Pair&lt;Long, Integer&gt; getLastSequenceIdWithVersion(String encodedRegionName,<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      String peerId) throws KeeperException {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    Stat stat = new Stat();<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    String path = getSerialReplicationRegionPeerNode(encodedRegionName, peerId);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    byte[] data = ZKUtil.getDataNoWatch(zookeeper, path, stat);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    if (data == null) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      // ZNode does not exist, so just return version -1 to indicate that no node exist.<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      return Pair.newPair(HConstants.NO_SEQNUM, -1);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    try {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return Pair.newPair(ZKUtil.parseWALPositionFrom(data), stat.getVersion());<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    } catch (DeserializationException de) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      LOG.warn("Failed to parse log position (region=" + encodedRegionName + ", peerId=" + peerId<a name="line.278"></a>
-<span class="sourceLineNo">279</span>          + "), data=" + Bytes.toStringBinary(data));<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    }<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    return Pair.newPair(HConstants.NO_SEQNUM, stat.getVersion());<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  @Override<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  public long getLastSequenceId(String encodedRegionName, String peerId)<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      throws ReplicationException {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    try {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      return getLastSequenceIdWithVersion(encodedRegionName, peerId).getFirst();<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    } catch (KeeperException e) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      throw new ReplicationException("Failed to get last pushed sequence id (encodedRegionName="<a name="line.290"></a>
-<span class="sourceLineNo">291</span>          + encodedRegionName + ", peerId=" + peerId + ")", e);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span>  @Override<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public void setLastSequenceIds(String peerId, Map&lt;String, Long&gt; lastSeqIds)<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      throws ReplicationException {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    try {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      // No need CAS and retry here, because it'll call setLastSequenceIds() for disabled peers<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      // only, so no conflict happen.<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      List&lt;ZKUtilOp&gt; listOfOps = new ArrayList&lt;&gt;();<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      for (Entry&lt;String, Long&gt; lastSeqEntry : lastSeqIds.entrySet()) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        String path = getSerialReplicationRegionPeerNode(lastSeqEntry.getKey(), peerId);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        ZKUtil.createWithParents(zookeeper, path);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        listOfOps.add(ZKUtilOp.setData(path, ZKUtil.positionToByteArray(lastSeqEntry.getValue())));<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      }<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      if (!listOfOps.isEmpty()) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        ZKUtil.multiOrSequential(zookeeper, listOfOps, true);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    } catch (KeeperException e) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      throw new ReplicationException("Failed to set last sequence ids, peerId=" + peerId<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          + ", size of lastSeqIds=" + lastSeqIds.size(), e);<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>  @Override<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  public void removeLastSequenceIds(String peerId) throws ReplicationException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    String suffix = "-" + peerId;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    try {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      StringBuilder sb = new StringBuilder(regionsZNode);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      int regionsZNodeLength = regionsZNode.length();<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      int levelOneLength = regionsZNodeLength + 3;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      int levelTwoLength = levelOneLength + 3;<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      List&lt;String&gt; levelOneDirs = ZKUtil.listChildrenNoWatch(zookeeper, regionsZNode);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      // it is possible that levelOneDirs is null if we haven't write any last pushed sequence ids<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      // yet, so we need an extra check here.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      if (CollectionUtils.isEmpty(levelOneDirs)) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        return;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      }<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      for (String levelOne : levelOneDirs) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        sb.append(ZNodePaths.ZNODE_PATH_SEPARATOR).append(levelOne);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        for (String levelTwo : ZKUtil.listChildrenNoWatch(zookeeper, sb.toString())) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          sb.append(ZNodePaths.ZNODE_PATH_SEPARATOR).append(levelTwo);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>          for (String znode : ZKUtil.listChildrenNoWatch(zookeeper, sb.toString())) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            if (znode.endsWith(suffix)) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>              sb.append(ZNodePaths.ZNODE_PATH_SEPARATOR).append(znode);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>              ZKUtil.deleteNode(zookeeper, sb.toString());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>              sb.setLength(levelTwoLength);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          }<a name="line.340"></a>
-<span class="sourceLineNo">341</span>          sb.setLength(levelOneLength);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        }<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        sb.setLength(regionsZNodeLength);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    } catch (KeeperException e) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      throw new ReplicationException("Failed to remove all last sequence ids, peerId=" + peerId, e);<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><a name="line.349"></a>
-<span class="sourceLineNo">350</span>  @Override<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  public void removeLastSequenceIds(String peerId, List&lt;String&gt; encodedRegionNames)<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      throws ReplicationException {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    try {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      List&lt;ZKUtilOp&gt; listOfOps =<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        encodedRegionNames.stream().map(n -&gt; getSerialReplicationRegionPeerNode(n, peerId))<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          .map(ZKUtilOp::deleteNodeFailSilent).collect(Collectors.toList());<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      ZKUtil.multiOrSequential(zookeeper, listOfOps, true);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    } catch (KeeperException e) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      throw new ReplicationException("Failed to remove last sequence ids, peerId=" + peerId +<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        ", encodedRegionNames.size=" + encodedRegionNames.size(), e);<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>  @Override<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  public long getWALPosition(ServerName serverName, String queueId, String fileName)<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      throws ReplicationException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    byte[] bytes;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    try {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      bytes = ZKUtil.getData(zookeeper, getFileNode(serverName, queueId, fileName));<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    } catch (KeeperException | InterruptedException e) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      throw new ReplicationException("Failed to get log position (serverName=" + serverName +<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        ", queueId=" + queueId + ", fileName=" + fileName + ")", e);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    try {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      return ZKUtil.parseWALPositionFrom(bytes);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    } catch (DeserializationException de) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      LOG.warn("Failed parse log position (serverName={}, queueId={}, fileName={})",<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          serverName, queueId, fileName);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    // if we can not parse the position, start at the beginning of the wal file again<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    return 0;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>  @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  public Pair&lt;String, SortedSet&lt;String&gt;&gt; claimQueue(ServerName sourceServerName, String queueId,<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      ServerName destServerName) throws ReplicationException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    LOG.info("Atomically moving {}/{}'s WALs to {}", sourceServerName, queueId, destServerName);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    try {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      ZKUtil.createWithParents(zookeeper, getRsNode(destServerName));<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    } catch (KeeperException e) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      throw new ReplicationException(<a name="line.391"></a>
-<span class="sourceLineNo">392</span>          "Claim queue queueId=" + queueId + " from " + sourceServerName + " to " + destServerName +<a name="line.392"></a>
-<span class="sourceLineNo">393</span>            " failed when creating the node for " + destServerName,<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          e);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    String newQueueId = queueId + "-" + sourceServerName;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    try {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      String oldQueueNode = getQueueNode(sourceServerName, queueId);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      List&lt;String&gt; wals = ZKUtil.listChildrenNoWatch(zookeeper, oldQueueNode);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      if (CollectionUtils.isEmpty(wals)) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        ZKUtil.deleteNodeFailSilent(zookeeper, oldQueueNode);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        LOG.info("Removed empty {}/{}", sourceServerName, queueId);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        return new Pair&lt;&gt;(newQueueId, Collections.emptySortedSet());<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      }<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      String newQueueNode = getQueueNode(destServerName, newQueueId);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      List&lt;ZKUtilOp&gt; listOfOps = new ArrayList&lt;&gt;();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      SortedSet&lt;String&gt; logQueue = new TreeSet&lt;&gt;();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      // create the new cluster znode<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      listOfOps.add(ZKUtilOp.createAndFailSilent(newQueueNode, HConstants.EMPTY_BYTE_ARRAY));<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      // get the offset of the logs and set it to new znodes<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      for (String wal : wals) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        String oldWalNode = getFileNode(oldQueueNode, wal);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        byte[] logOffset = ZKUtil.getData(this.zookeeper, oldWalNode);<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        LOG.debug("Creating {} with data {}", wal, Bytes.toStringBinary(logOffset));<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        String newWalNode = getFileNode(newQueueNode, wal);<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        listOfOps.add(ZKUtilOp.createAndFailSilent(newWalNode, logOffset));<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        listOfOps.add(ZKUtilOp.deleteNodeFailSilent(oldWalNode));<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        logQueue.add(wal);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      }<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      // add delete op for peer<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      listOfOps.add(ZKUtilOp.deleteNodeFailSilent(oldQueueNode));<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>      LOG.trace("The multi list size is {}", listOfOps.size());<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      ZKUtil.multiOrSequential(zookeeper, listOfOps, false);<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>      LOG.info("Atomically moved {}/{}'s WALs to {}", sourceServerName, queueId, destServerName);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      return new Pair&lt;&gt;(newQueueId, logQueue);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    } catch (NoNodeException | NodeExistsException | NotEmptyException | BadVersionException e) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      // Multi call failed; it looks like some other regionserver took away the logs.<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      // These exceptions mean that zk tells us the request can not be execute. So return an empty<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      // queue to tell the upper layer that claim nothing. For other types of exception should be<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      // thrown out to notify the upper layer.<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      LOG.info("Claim queue queueId={} from {} to {} failed with {}, someone else took the log?",<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          queueId,sourceServerName, destServerName, e.toString());<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      return new Pair&lt;&gt;(newQueueId, Collections.emptySortedSet());<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    } catch (KeeperException | InterruptedException e) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      throw new ReplicationException("Claim queue queueId=" + queueId + " from " +<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        sourceServerName + " to " + destServerName + " failed", e);<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><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  @Override<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  public void removeReplicatorIfQueueIsEmpty(ServerName serverName) throws ReplicationException {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    try {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      ZKUtil.deleteNodeFailSilent(zookeeper, getRsNode(serverName));<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    } catch (NotEmptyException e) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      // keep silence to avoid logging too much.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    } catch (KeeperException e) {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      throw new ReplicationException("Failed to remove replicator for " + serverName, e);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    }<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 List&lt;ServerName&gt; getListOfReplicators0() throws KeeperException {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zookeeper, queuesZNode);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    if (children == null) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      children = Collections.emptyList();<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    return children.stream().map(ServerName::parseServerName).collect(toList());<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>  @Override<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  public List&lt;ServerName&gt; getListOfReplicators() throws ReplicationException {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    try {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      return getListOfReplicators0();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    } catch (KeeperException e) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      throw new ReplicationException("Failed to get list of replicators", e);<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><a name="line.469"></a>
-<span class="sourceLineNo">470</span>  private List&lt;String&gt; getWALsInQueue0(ServerName serverName, String queueId)<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      throws KeeperException {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zookeeper, getQueueNode(serverName,<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        queueId));<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    return children != null ? children : Collections.emptyList();<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>  @Override<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  public List&lt;String&gt; getWALsInQueue(ServerName serverName, String queueId)<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      throws ReplicationException {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    try {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      return getWALsInQueue0(serverName, queueId);<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    } catch (KeeperException e) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      throw new ReplicationException(<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          "Failed to get wals in queue (serverName=" + serverName + ", queueId=" + queueId + ")",<a name="line.484"></a>
-<span class="sourceLineNo">485</span>          e);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>  private List&lt;String&gt; getAllQueues0(ServerName serverName) throws KeeperException {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zookeeper, getRsNode(serverName));<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    return children != null ? children : Collections.emptyList();<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>  @Override<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  public List&lt;String&gt; getAllQueues(ServerName serverName) throws ReplicationException {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    try {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      return getAllQueues0(serverName);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    } catch (KeeperException e) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      throw new ReplicationException("Failed to get all queues (serverName=" + serverName + ")", e);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    }<a name="line.500"></a>
-<span class="sourceLineNo">501</span>  }<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  // will be overridden in UTs<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  @VisibleForTesting<a name="line.504"></a>
-<span class="sourceLineNo">505</span>  protected int getQueuesZNodeCversion() throws KeeperException {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    Stat stat = new Stat();<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    ZKUtil.getDataNoWatch(this.zookeeper, this.queuesZNode, stat);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    return stat.getCversion();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>  }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>  @Override<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  public Set&lt;String&gt; getAllWALs() throws ReplicationException {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      for (int retry = 0;; retry++) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        int v0 = getQueuesZNodeCversion();<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        List&lt;ServerName&gt; rss = getListOfReplicators0();<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        if (rss.isEmpty()) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          LOG.debug("Didn't find a RegionServer that replicates, won't prevent deletions.");<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          return Collections.emptySet();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        Set&lt;String&gt; wals = new HashSet&lt;&gt;();<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        for (ServerName rs : rss) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          for (String queueId : getAllQueues0(rs)) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>            wals.addAll(getWALsInQueue0(rs, queueId));<a name="line.524"></a>
-<span class="sourceLineNo">525</span>          }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>        }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        int v1 = getQueuesZNodeCversion();<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        if (v0 == v1) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>          return wals;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>        }<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        LOG.info("Replication queue node cversion changed from %d to %d, retry = %d",<a name="line.531"></a>
-<span class="sourceLineNo">532</span>            v0, v1, retry);<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      }<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    } catch (KeeperException e) {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      throw new ReplicationException("Failed to get all wals", e);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  private String getHFileRefsPeerNode(String peerId) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    return ZNodePaths.joinZNode(hfileRefsZNode, peerId);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>  private String getHFileNode(String peerNode, String fileName) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    return ZNodePaths.joinZNode(peerNode, fileName);<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>  @Override<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  public void addPeerToHFileRefs(String peerId) throws ReplicationException {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    String peerNode = getHFileRefsPeerNode(peerId);<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    try {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      if (ZKUtil.checkExists(zookeeper, peerNode) == -1) {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        LOG.info("Adding peer {} to hfile reference queue.", peerId);<a name="line.552"></a>
-<span class="sourceLineNo">553</span>        ZKUtil.createWithParents(zookeeper, peerNode);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      }<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    } catch (KeeperException e) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      throw new ReplicationException("Failed to add peer " + peerId + " to hfile reference queue.",<a name="line.556"></a>
-<span class="sourceLineNo">557</span>          e);<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span>  }<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>  @Override<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  public void removePeerFromHFileRefs(String peerId) throws ReplicationException {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    String peerNode = getHFileRefsPeerNode(peerId);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      if (ZKUtil.checkExists(zookeeper, peerNode) == -1) {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>          LOG.debug("Peer {} not found in hfile reference queue.", peerNode);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      } else {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>        LOG.info("Removing peer {} from hfile reference queue.", peerNode);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        ZKUtil.deleteNodeRecursively(zookeeper, peerNode);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    } catch (KeeperException e) {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      throw new ReplicationException(<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          "Failed to remove peer " + peerId + " from hfile reference queue.", e);<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>  @Override<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  public void addHFileRefs(String peerId, List&lt;Pair&lt;Path, Path&gt;&gt; pairs)<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      throws ReplicationException {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    String peerNode = getHFileRefsPeerNode(peerId);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    LOG.debug("Adding hfile references {} in queue {}", pairs, peerNode);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    List&lt;ZKUtilOp&gt; listOfOps = pairs.stream().map(p -&gt; p.getSecond().getName())<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        .map(n -&gt; getHFileNode(peerNode, n))<a name="line.583"></a>
-<span class="sourceLineNo">584</span>        .map(f -&gt; ZKUtilOp.createAndFailSilent(f, HConstants.EMPTY_BYTE_ARRAY)).collect(toList());<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      LOG.debug("The multi list size for adding hfile references in zk for node {} is {}",<a name="line.585"></a>
-<span class="sourceLineNo">586</span>          peerNode, listOfOps.size());<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    try {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      ZKUtil.multiOrSequential(this.zookeeper, listOfOps, true);<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    } catch (KeeperException e) {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      throw new ReplicationException("Failed to add hfile reference to peer " + peerId, e);<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>  }<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>  @Override<a name="line.594"></a>
-<span class="sourceLineNo">595</span>  public void removeHFileRefs(String peerId, List&lt;String&gt; files) throws ReplicationException {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    String peerNode = getHFileRefsPeerNode(peerId);<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    LOG.debug("Removing hfile references {} from queue {}", files, peerNode);<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>    List&lt;ZKUtilOp&gt; listOfOps = files.stream().map(n -&gt; getHFileNode(peerNode, n))<a name="line.599"></a>
-<span class="sourceLineNo">600</span>        .map(ZKUtilOp::deleteNodeFailSilent).collect(toList());<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    LOG.debug("The multi list size for removing hfile references in zk for node {} is {}",<a name="line.601"></a>
-<span class="sourceLineNo">602</span>        peerNode, listOfOps.size());<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    try {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      ZKUtil.multiOrSequential(this.zookeeper, listOfOps, true);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    } catch (KeeperException e) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      throw new ReplicationException("Failed to remove hfile reference from peer " + peerId, e);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  }<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>  private List&lt;String&gt; getAllPeersFromHFileRefsQueue0() throws KeeperException {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zookeeper, hfileRefsZNode);<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    return children != null ? children : Collections.emptyList();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>  @Override<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  public List&lt;String&gt; getAllPeersFromHFileRefsQueue() throws ReplicationException {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    try {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      return getAllPeersFromHFileRefsQueue0();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    } catch (KeeperException e) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      throw new ReplicationException("Failed to get list of all peers in hfile references node.",<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          e);<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    }<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  private List&lt;String&gt; getReplicableHFiles0(String peerId) throws KeeperException {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(this.zookeeper,<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        getHFileRefsPeerNode(peerId));<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    return children != null ? children : Collections.emptyList();<a name="line.628"></a>
-<span class="sourceLineNo">629</span>  }<a name="line.629"></a>
-<span class="sourceLineNo">630</span><a name="line.630"></a>
-<span class="sourceLineNo">631</span>  @Override<a name="line.631"></a>
-<span class="sourceLineNo">632</span>  public List&lt;String&gt; getReplicableHFiles(String peerId) throws ReplicationException {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    try {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      return getReplicableHFiles0(peerId);<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    } catch (KeeperException e) {<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      throw new ReplicationException("Failed to get list of hfile references for peer " + peerId,<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          e);<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    }<a name="line.638"></a>
-<span class="sourceLineNo">639</span>  }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>  // will be overridden in UTs<a name="line.641"></a>
-<span class="sourceLineNo">642</span>  @VisibleForTesting<a name="line.642"></a>
-<span class="sourceLineNo">643</span>  protected int getHFileRefsZNodeCversion() throws ReplicationException {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    Stat stat = new Stat();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    try {<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      ZKUtil.getDataNoWatch(zookeeper, hfileRefsZNode, stat);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    } catch (KeeperException e) {<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      throw new ReplicationException("Failed to get stat of replication hfile references node.", e);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    }<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    return stat.getCversion();<a name="line.650"></a>
-<span class="sourceLineNo">651</span>  }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>  @Override<a name="line.653"></a>
-<span class="sourceLineNo">654</span>  public Set&lt;String&gt; getAllHFileRefs() throws ReplicationException {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    try {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      for (int retry = 0;; retry++) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>        int v0 = getHFileRefsZNodeCversion();<a name="line.657"></a>
-<span class="sourceLineNo">658</span>        List&lt;String&gt; peers = getAllPeersFromHFileRefsQueue();<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        if (peers.isEmpty()) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          LOG.debug("Didn't find any peers with hfile references, won't prevent deletions.");<a name="line.660"></a>
-<span class="sourceLineNo">661</span>          return Collections.emptySet();<a name="line.661"></a>
-<span class="sourceLineNo">662</span>        }<a name="line.662"></a>
-<span class="sourceLineNo">663</span>        Set&lt;String&gt; hfileRefs = new HashSet&lt;&gt;();<a name="line.663"></a>
-<span class="sourceLineNo">664</span>        for (String peer : peers) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          hfileRefs.addAll(getReplicableHFiles0(peer));<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        }<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        int v1 = getHFileRefsZNodeCversion();<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        if (v0 == v1) {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          return hfileRefs;<a name="line.669"></a>
-<span class="sourceLineNo">670</span>        }<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        LOG.debug("Replication hfile references node cversion changed from %d to %d, retry = %d",<a name="line.671"></a>
-<span class="sourceLineNo">672</span>            v0, v1, retry);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      }<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    } catch (KeeperException e) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      throw new ReplicationException("Failed to get all hfile refs", e);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
-<span class="sourceLineNo">677</span>  }<a name="line.677"></a>
-<span class="sourceLineNo">678</span>}<a name="line.678"></a>
+<span class="sourceLineNo">121</span>  @Override<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  public String getRsNode(ServerName serverName) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    return ZNodePaths.joinZNode(queuesZNode, serverName.getServerName());<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>  private String getQueueNode(ServerName serverName, String queueId) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    return ZNodePaths.joinZNode(getRsNode(serverName), queueId);<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>  private String getFileNode(String queueNode, String fileName) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    return ZNodePaths.joinZNode(queueNode, fileName);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  }<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>  private String getFileNode(ServerName serverName, String queueId, String fileName) {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    return getFileNode(getQueueNode(serverName, queueId), fileName);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  /**<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * &lt;p&gt;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   * Put all regions under /hbase/replication/regions znode will lead to too many children because<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * of the huge number of regions in real production environment. So here we will distribute the<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   * znodes to multiple directories.<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * &lt;/p&gt;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * &lt;p&gt;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * So the final znode path will be format like this:<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   *<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * &lt;pre&gt;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * /hbase/replication/regions/dd/04/e76a6966d4ffa908ed0586764767-100<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * &lt;/pre&gt;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   *<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * Here the full encoded region name is dd04e76a6966d4ffa908ed0586764767, and we use the first two<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * characters 'dd' as the first level directory name, and use the next two characters '04' as the<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * second level directory name, and the rest part as the prefix of the znode, and the suffix '100'<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * is the peer id.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * &lt;/p&gt;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @param encodedRegionName the encoded region name.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * @param peerId peer id for replication.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   * @return ZNode path to persist the max sequence id that we've pushed for the given region and<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   *         peer.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  @VisibleForTesting<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  String getSerialReplicationRegionPeerNode(String encodedRegionName, String peerId) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    if (encodedRegionName == null || encodedRegionName.length() != RegionInfo.MD5_HEX_LENGTH) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      throw new IllegalArgumentException(<a name="line.164"></a>
+<span class="sourceLineNo">165</span>          "Invalid encoded region name: " + encodedRegionName + ", length should be 32.");<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    return new StringBuilder(regionsZNode).append(ZNodePaths.ZNODE_PATH_SEPARATOR)<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        .append(encodedRegionName.substring(0, 2)).append(ZNodePaths.ZNODE_PATH_SEPARATOR)<a name="line.168"></a>
+<span class="sourceLineNo">169</span>        .append(encodedRegionName.substring(2, 4)).append(ZNodePaths.ZNODE_PATH_SEPARATOR)<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        .append(encodedRegionName.substring(4)).append("-").append(peerId).toString();<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>  @Override<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public void removeQueue(ServerName serverName, String queueId) throws ReplicationException {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    try {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      ZKUtil.deleteNodeRecursively(zookeeper, getQueueNode(serverName, queueId));<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    } catch (KeeperException e) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      throw new ReplicationException(<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          "Failed to delete queue (serverName=" + serverName + ", queueId=" + queueId + ")", e);<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>  @Override<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  public void addWAL(ServerName serverName, String queueId, String fileName)<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      throws ReplicationException {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    try {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      ZKUtil.createWithParents(zookeeper, getFileNode(serverName, queueId, fileName));<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    } catch (KeeperException e) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      throw new ReplicationException("Failed to add wal to queue (serverName=" + serverName<a name="line.189"></a>
+<span class="sourceLineNo">190</span>          + ", queueId=" + queueId + ", fileName=" + fileName + ")", e);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>  @Override<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  public void removeWAL(ServerName serverName, String queueId, String fileName)<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      throws ReplicationException {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    String fileNode = getFileNode(serverName, queueId, fileName);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    try {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      ZKUtil.deleteNode(zookeeper, fileNode);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    } catch (NoNodeException e) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      LOG.warn("{} already deleted when removing log", fileNode);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } catch (KeeperException e) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      throw new ReplicationException("Failed to remove wal from queue (serverName=" + serverName +<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        ", queueId=" + queueId + ", fileName=" + fileName + ")", e);<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>  private void addLastSeqIdsToOps(String queueId, Map&lt;String, Long&gt; lastSeqIds,<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      List&lt;ZKUtilOp&gt; listOfOps) throws KeeperException, ReplicationException {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    String peerId = new ReplicationQueueInfo(queueId).getPeerId();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    for (Entry&lt;String, Long&gt; lastSeqEntry : lastSeqIds.entrySet()) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      String path = getSerialReplicationRegionPeerNode(lastSeqEntry.getKey(), peerId);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      Pair&lt;Long, Integer&gt; p = getLastSequenceIdWithVersion(lastSeqEntry.getKey(), peerId);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      byte[] data = ZKUtil.positionToByteArray(lastSeqEntry.getValue());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      if (p.getSecond() &lt; 0) { // ZNode does not exist.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        ZKUtil.createWithParents(zookeeper,<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          path.substring(0, path.lastIndexOf(ZNodePaths.ZNODE_PATH_SEPARATOR)));<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        listOfOps.add(ZKUtilOp.createAndFailSilent(path, data));<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        continue;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      }<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      // Perform CAS in a specific version v0 (HBASE-20138)<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      int v0 = p.getSecond();<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      long lastPushedSeqId = p.getFirst();<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      if (lastSeqEntry.getValue() &lt;= lastPushedSeqId) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        continue;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      listOfOps.add(ZKUtilOp.setData(path, data, v0));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  public void setWALPosition(ServerName serverName, String queueId, String fileName, long position,<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      Map&lt;String, Long&gt; lastSeqIds) throws ReplicationException {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    try {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      for (int retry = 0;; retry++) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        List&lt;ZKUtilOp&gt; listOfOps = new ArrayList&lt;&gt;();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        if (position &gt; 0) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>          listOfOps.add(ZKUtilOp.setData(getFileNode(serverName, queueId, fileName),<a name="line.238"></a>
+<span class="sourceLineNo">239</span>            ZKUtil.positionToByteArray(position)));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        // Persist the max sequence id(s) of regions for serial replication atomically.<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        addLastSeqIdsToOps(queueId, lastSeqIds, listOfOps);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        if (listOfOps.isEmpty()) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          return;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        }<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        try {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>          ZKUtil.multiOrSequential(zookeeper, listOfOps, false);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          return;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        } catch (KeeperException.BadVersionException | KeeperException.NodeExistsException e) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          LOG.warn(<a name="line.250"></a>
+<span class="sourceLineNo">251</span>            "Bad version(or node exist) when persist the last pushed sequence id to zookeeper storage, "<a name="line.251"></a>
+<span class="sourceLineNo">252</span>                + "Retry = " + retry + ", serverName=" + serverName + ", queueId=" + queueId<a name="line.252"></a>
+<span class="sourceLineNo">253</span>                + ", fileName=" + fileName);<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>    } catch (KeeperException e) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      throw new ReplicationException("Failed to set log position (serverName=" + serverName<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          + ", queueId=" + queueId + ", fileName=" + fileName + ", position=" + position + ")", e);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>  /**<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * Return the {lastPushedSequenceId, ZNodeDataVersion} pair. if ZNodeDataVersion is -1, it means<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * that the ZNode does not exist.<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   */<a name="line.265"></a>
+<span class="sourceLineNo">266</span>  @VisibleForTesting<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  protected Pair&lt;Long, Integer&gt; getLastSequenceIdWithVersion(String encodedRegionName,<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      String peerId) throws KeeperException {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    Stat stat = new Stat();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    String path = getSerialReplicationRegionPeerNode(encodedRegionName, peerId);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    byte[] data = ZKUtil.getDataNoWatch(zookeeper, path, stat);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    if (data == null) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      // ZNode does not exist, so just return version -1 to indicate that no node exist.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      return Pair.newPair(HConstants.NO_SEQNUM, -1);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    try {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      return Pair.newPair(ZKUtil.parseWALPositionFrom(data), stat.getVersion());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    } catch (DeserializationException de) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      LOG.warn("Failed to parse log position (region=" + encodedRegionName + ", peerId=" + peerId<a name="line.279"></a>
+<span class="sourceLineNo">280</span>          + "), data=" + Bytes.toStringBinary(data));<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    return Pair.newPair(HConstants.NO_SEQNUM, stat.getVersion());<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>  @Override<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  public long getLastSequenceId(String encodedRegionName, String peerId)<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      throws ReplicationException {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    try {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      return getLastSequenceIdWithVersion(encodedRegionName, peerId).getFirst();<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    } catch (KeeperException e) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      throw new ReplicationException("Failed to get last pushed sequence id (encodedRegionName="<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          + encodedRegionName + ", peerId=" + peerId + ")", e);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>  @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public void setLastSequenceIds(String peerId, Map&lt;String, Long&gt; lastSeqIds)<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      throws ReplicationException {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    try {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      // No need CAS and retry here, because it'll call setLastSequenceIds() for disabled peers<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      // only, so no conflict happen.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      List&lt;ZKUtilOp&gt; listOfOps = new ArrayList&lt;&gt;();<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      for (Entry&lt;String, Long&gt; lastSeqEntry : lastSeqIds.entrySet()) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        String path = getSerialReplicationRegionPeerNode(lastSeqEntry.getKey(), peerId);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        ZKUtil.createWithParents(zookeeper, path);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        listOfOps.add(ZKUtilOp.setData(path, ZKUtil.positionToByteArray(lastSeqEntry.getValue())));<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      if (!listOfOps.isEmpty()) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        ZKUtil.multiOrSequential(zookeeper, listOfOps, true);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    } catch (KeeperException e) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      throw new ReplicationException("Failed to set last sequence ids, peerId=" + peerId<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          + ", size of lastSeqIds=" + lastSeqIds.size(), e);<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>  @Override<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  public void removeLastSequenceIds(String peerId) throws ReplicationException {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    String suffix = "-" + peerId;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    try {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      StringBuilder sb = new StringBuilder(regionsZNode);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      int regionsZNodeLength = regionsZNode.length();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      int levelOneLength = regionsZNodeLength + 3;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      int levelTwoLength = levelOneLength + 3;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      List&lt;String&gt; levelOneDirs = ZKUtil.listChildrenNoWatch(zookeeper, regionsZNode);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      // it is possible that levelOneDirs is null if we haven't write any last pushed sequence ids<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      // yet, so we need an extra check here.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      if (CollectionUtils.isEmpty(levelOneDirs)) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        return;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      }<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      for (String levelOne : levelOneDirs) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        sb.append(ZNodePaths.ZNODE_PATH_SEPARATOR).append(levelOne);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        for (String levelTwo : ZKUtil.listChildrenNoWatch(zookeeper, sb.toString())) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>          sb.append(ZNodePaths.ZNODE_PATH_SEPARATOR).append(levelTwo);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          for (String znode : ZKUtil.listChildrenNoWatch(zookeeper, sb.toString())) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            if (znode.endsWith(suffix)) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>              sb.append(ZNodePaths.ZNODE_PATH_SEPARATOR).append(znode);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>              ZKUtil.deleteNode(zookeeper, sb.toString());<a name="line.338"></a>
+<span class="sourceLineNo">339</span>              sb.setLength(levelTwoLength);<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>          sb.setLength(levelOneLength);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        }<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        sb.setLength(regionsZNodeLength);<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    } catch (KeeperException e) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      throw new ReplicationException("Failed to remove all last sequence ids, peerId=" + peerId, e);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>  @Override<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  public void removeLastSequenceIds(String peerId, List&lt;String&gt; encodedRegionNames)<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      throws ReplicationException {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    try {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      List&lt;ZKUtilOp&gt; listOfOps =<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        encodedRegionNames.stream().map(n -&gt; getSerialReplicationRegionPeerNode(n, peerId))<a name="line.356"></a>
+<span class="sourceLineNo">357</span>          .map(ZKUtilOp::deleteNodeFailSilent).collect(Collectors.toList());<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      ZKUtil.multiOrSequential(zookeeper, listOfOps, true);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    } catch (KeeperException e) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      throw new ReplicationException("Failed to remove last sequence ids, peerId=" + peerId +<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        ", encodedRegionNames.size=" + encodedRegionNames.size(), e);<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><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  @Override<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  public long getWALPosition(ServerName serverName, String queueId, String fileName)<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      throws ReplicationException {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    byte[] bytes;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    try {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      bytes = ZKUtil.getData(zookeeper, getFileNode(serverName, queueId, fileName));<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    } catch (KeeperException | InterruptedException e) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      throw new ReplicationException("Failed to get log position (serverName=" + serverName +<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        ", queueId=" + queueId + ", fileName=" + fileName + ")", e);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    try {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      return ZKUtil.parseWALPositionFrom(bytes);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    } catch (DeserializationException de) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      LOG.warn("Failed parse log position (serverName={}, queueId={}, fileName={})",<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          serverName, queueId, fileName);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    }<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    // if we can not parse the position, start at the beginning of the wal file again<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    return 0;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>  }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>  @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  public Pair&lt;String, SortedSet&lt;String&gt;&gt; claimQueue(ServerName sourceServerName, String queueId,<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      ServerName destServerName) throws ReplicationException {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    LOG.info("Atomically moving {}/{}'s WALs to {}", sourceServerName, queueId, destServerName);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    try {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      ZKUtil.createWithParents(zookeeper, getRsNode(destServerName));<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    } catch (KeeperException e) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      throw new ReplicationException(<a name="line.392"></a>
+<span class="sourceLineNo">393</span>          "Claim queue queueId=" + queueId + " from " + sourceServerName + " to " + destServerName +<a name="line.393"></a>
+<span class="sourceLineNo">394</span>            " failed when creating the node for " + destServerName,<a name="line.394"></a>
+<span class="sourceLineNo">395</span>          e);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    }<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    String newQueueId = queueId + "-" + sourceServerName;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    try {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      String oldQueueNode = getQueueNode(sourceServerName, queueId);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      List&lt;String&gt; wals = ZKUtil.listChildrenNoWatch(zookeeper, oldQueueNode);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      if (CollectionUtils.isEmpty(wals)) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        ZKUtil.deleteNodeFailSilent(zookeeper, oldQueueNode);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        LOG.info("Removed empty {}/{}", sourceServerName, queueId);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        return new Pair&lt;&gt;(newQueueId, Collections.emptySortedSet());<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      String newQueueNode = getQueueNode(destServerName, newQueueId);<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      List&lt;ZKUtilOp&gt; listOfOps = new ArrayList&lt;&gt;();<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      SortedSet&lt;String&gt; logQueue = new TreeSet&lt;&gt;();<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      // create the new cluster znode<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      listOfOps.add(ZKUtilOp.createAndFailSilent(newQueueNode, HConstants.EMPTY_BYTE_ARRAY));<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      // get the offset of the logs and set it to new znodes<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      for (String

<TRUNCATED>

[15/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/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 e984063..083ab07 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
@@ -53,1074 +53,1082 @@
 <span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
 <span class="sourceLineNo">046</span>import org.apache.hadoop.fs.FileSystem;<a name="line.46"></a>
 <span class="sourceLineNo">047</span>import org.apache.hadoop.fs.Path;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.HConstants;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.Server;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.ServerName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.TableName;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.replication.ReplicationListener;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.replication.ReplicationPeer;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationPeer.PeerState;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.replication.ReplicationPeerImpl;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.replication.ReplicationPeers;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.replication.ReplicationQueueInfo;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.replication.ReplicationTracker;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.wal.SyncReplicationWALProvider;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.zookeeper.KeeperException;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.slf4j.Logger;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.slf4j.LoggerFactory;<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>/**<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * This class is responsible to manage all the replication sources. There are two classes of<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * sources:<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * &lt;ul&gt;<a name="line.78"></a>
-<span class="sourceLineNo">079</span> * &lt;li&gt;Normal sources are persistent and one per peer cluster&lt;/li&gt;<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * &lt;li&gt;Old sources are recovered from a failed region server and our only goal is to finish<a name="line.80"></a>
-<span class="sourceLineNo">081</span> * replicating the WAL queue it had&lt;/li&gt;<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * &lt;/ul&gt;<a name="line.82"></a>
-<span class="sourceLineNo">083</span> * &lt;p&gt;<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * When a region server dies, this class uses a watcher to get notified and it tries to grab a lock<a name="line.84"></a>
-<span class="sourceLineNo">085</span> * in order to transfer all the queues in a local old source.<a name="line.85"></a>
-<span class="sourceLineNo">086</span> * &lt;p&gt;<a name="line.86"></a>
-<span class="sourceLineNo">087</span> * Synchronization specification:<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * &lt;ul&gt;<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * &lt;li&gt;No need synchronized on {@link #sources}. {@link #sources} is a ConcurrentHashMap and there<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * is a Lock for peer id in {@link PeerProcedureHandlerImpl}. So there is no race for peer<a name="line.90"></a>
-<span class="sourceLineNo">091</span> * operations.&lt;/li&gt;<a name="line.91"></a>
-<span class="sourceLineNo">092</span> * &lt;li&gt;Need synchronized on {@link #walsById}. There are four methods which modify it,<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * {@link #addPeer(String)}, {@link #removePeer(String)},<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * {@link #cleanOldLogs(String, boolean, ReplicationSourceInterface)} and {@link #preLogRoll(Path)}.<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * {@link #walsById} is a ConcurrentHashMap and there is a Lock for peer id in<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * {@link PeerProcedureHandlerImpl}. So there is no race between {@link #addPeer(String)} and<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * {@link #removePeer(String)}. {@link #cleanOldLogs(String, boolean, ReplicationSourceInterface)}<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * is called by {@link ReplicationSourceInterface}. So no race with {@link #addPeer(String)}.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * {@link #removePeer(String)} will terminate the {@link ReplicationSourceInterface} firstly, then<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * remove the wals from {@link #walsById}. So no race with {@link #removePeer(String)}. The only<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * case need synchronized is {@link #cleanOldLogs(String, boolean, ReplicationSourceInterface)} and<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * {@link #preLogRoll(Path)}.&lt;/li&gt;<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * &lt;li&gt;No need synchronized on {@link #walsByIdRecoveredQueues}. There are three methods which<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * modify it, {@link #removePeer(String)} ,<a name="line.104"></a>
-<span class="sourceLineNo">105</span> * {@link #cleanOldLogs(String, boolean, ReplicationSourceInterface)} and<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()}.<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * {@link #cleanOldLogs(String, boolean, ReplicationSourceInterface)} is called by<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * {@link ReplicationSourceInterface}. {@link #removePeer(String)} will terminate the<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * {@link ReplicationSourceInterface} firstly, then remove the wals from<a name="line.109"></a>
-<span class="sourceLineNo">110</span> * {@link #walsByIdRecoveredQueues}. And {@link ReplicationSourceManager.NodeFailoverWorker#run()}<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * will add the wals to {@link #walsByIdRecoveredQueues} firstly, then start up a<a name="line.111"></a>
-<span class="sourceLineNo">112</span> * {@link ReplicationSourceInterface}. So there is no race here. For<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()} and {@link #removePeer(String)}, there<a name="line.113"></a>
-<span class="sourceLineNo">114</span> * is already synchronized on {@link #oldsources}. So no need synchronized on<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * {@link #walsByIdRecoveredQueues}.&lt;/li&gt;<a name="line.115"></a>
-<span class="sourceLineNo">116</span> * &lt;li&gt;Need synchronized on {@link #latestPaths} to avoid the new open source miss new log.&lt;/li&gt;<a name="line.116"></a>
-<span class="sourceLineNo">117</span> * &lt;li&gt;Need synchronized on {@link #oldsources} to avoid adding recovered source for the<a name="line.117"></a>
-<span class="sourceLineNo">118</span> * to-be-removed peer.&lt;/li&gt;<a name="line.118"></a>
-<span class="sourceLineNo">119</span> * &lt;/ul&gt;<a name="line.119"></a>
-<span class="sourceLineNo">120</span> */<a name="line.120"></a>
-<span class="sourceLineNo">121</span>@InterfaceAudience.Private<a name="line.121"></a>
-<span class="sourceLineNo">122</span>public class ReplicationSourceManager implements ReplicationListener {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSourceManager.class);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  // all the sources that read this RS's logs and every peer only has one replication source<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  private final ConcurrentMap&lt;String, ReplicationSourceInterface&gt; sources;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  // List of all the sources we got from died RSs<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private final List&lt;ReplicationSourceInterface&gt; oldsources;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  private final ReplicationQueueStorage queueStorage;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private final ReplicationTracker replicationTracker;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private final ReplicationPeers replicationPeers;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  // UUID for this cluster<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private final UUID clusterId;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  // All about stopping<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private final Server server;<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  // All logs we are currently tracking<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  // Index structure of the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  // For normal replication source, the peer id is same with the queue id<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsById;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  // Logs for recovered sources we are currently tracking<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  // the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  // For recovered source, the queue id's format is peer_id-servername-*<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsByIdRecoveredQueues;<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final SyncReplicationPeerMappingManager syncReplicationPeerMappingManager;<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  private final Configuration conf;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private final FileSystem fs;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  // The paths to the latest log of each wal group, for new coming peers<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  private final Set&lt;Path&gt; latestPaths;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  // Path to the wals directories<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private final Path logDir;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  // Path to the wal archive<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  private final Path oldLogDir;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  private final WALFileLengthProvider walFileLengthProvider;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  // The number of ms that we wait before moving znodes, HBASE-3596<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  private final long sleepBeforeFailover;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  // Homemade executer service for replication<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  private final ThreadPoolExecutor executor;<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  private final boolean replicationForBulkLoadDataEnabled;<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  private AtomicLong totalBufferUsed = new AtomicLong();<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  // How long should we sleep for each retry when deleting remote wal files for sync replication<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  // peer.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  private final long sleepForRetries;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  // Maximum number of retries before taking bold actions when deleting remote wal files for sync<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  // replication peer.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  private final int maxRetriesMultiplier;<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>  /**<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * Creates a replication manager and sets the watch on all the other registered region servers<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @param queueStorage the interface for manipulating replication queues<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @param replicationPeers<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * @param replicationTracker<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * @param conf the configuration to use<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * @param server the server for this region server<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * @param fs the file system to use<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * @param logDir the directory that contains all wal directories of live RSs<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * @param oldLogDir the directory where old logs are archived<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * @param clusterId<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  public ReplicationSourceManager(ReplicationQueueStorage queueStorage,<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      ReplicationPeers replicationPeers, ReplicationTracker replicationTracker, Configuration conf,<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      Server server, FileSystem fs, Path logDir, Path oldLogDir, UUID clusterId,<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      WALFileLengthProvider walFileLengthProvider,<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      SyncReplicationPeerMappingManager syncReplicationPeerMappingManager) throws IOException {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.sources = new ConcurrentHashMap&lt;&gt;();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.queueStorage = queueStorage;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.replicationPeers = replicationPeers;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    this.replicationTracker = replicationTracker;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    this.server = server;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    this.walsById = new ConcurrentHashMap&lt;&gt;();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    this.walsByIdRecoveredQueues = new ConcurrentHashMap&lt;&gt;();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    this.oldsources = new ArrayList&lt;&gt;();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    this.conf = conf;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    this.fs = fs;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    this.logDir = logDir;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    this.oldLogDir = oldLogDir;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    // 30 seconds<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.sleepBeforeFailover = conf.getLong("replication.sleep.before.failover", 30000);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    this.clusterId = clusterId;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    this.walFileLengthProvider = walFileLengthProvider;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    this.syncReplicationPeerMappingManager = syncReplicationPeerMappingManager;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    this.replicationTracker.registerListener(this);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    // It's preferable to failover 1 RS at a time, but with good zk servers<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // more could be processed at the same time.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    int nbWorkers = conf.getInt("replication.executor.workers", 1);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    // use a short 100ms sleep since this could be done inline with a RS startup<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    // even if we fail, other region servers can take care of it<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    this.executor = new ThreadPoolExecutor(nbWorkers, nbWorkers, 100, TimeUnit.MILLISECONDS,<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        new LinkedBlockingQueue&lt;&gt;());<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    ThreadFactoryBuilder tfb = new ThreadFactoryBuilder();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    tfb.setNameFormat("ReplicationExecutor-%d");<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    tfb.setDaemon(true);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    this.executor.setThreadFactory(tfb.build());<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    this.latestPaths = new HashSet&lt;Path&gt;();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    this.replicationForBulkLoadDataEnabled = conf.getBoolean(<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      HConstants.REPLICATION_BULKLOAD_ENABLE_KEY, HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    this.sleepForRetries = this.conf.getLong("replication.source.sync.sleepforretries", 1000);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    this.maxRetriesMultiplier =<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      this.conf.getInt("replication.source.sync.maxretriesmultiplier", 60);<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>  /**<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * Adds a normal source per registered peer cluster and tries to process all old region server wal<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * queues<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * &lt;p&gt;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * The returned future is for adoptAbandonedQueues task.<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  Future&lt;?&gt; init() throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    for (String id : this.replicationPeers.getAllPeerIds()) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      addSource(id);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      if (replicationForBulkLoadDataEnabled) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        // Check if peer exists in hfile-refs queue, if not add it. This can happen in the case<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        // when a peer was added before replication for bulk loaded data was enabled.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        throwIOExceptionWhenFail(() -&gt; this.queueStorage.addPeerToHFileRefs(id));<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>    return this.executor.submit(this::adoptAbandonedQueues);<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>  private void adoptAbandonedQueues() {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    List&lt;ServerName&gt; currentReplicators = null;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    try {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      currentReplicators = queueStorage.getListOfReplicators();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    } catch (ReplicationException e) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      server.abort("Failed to get all replicators", e);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      return;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    if (currentReplicators == null || currentReplicators.isEmpty()) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      return;<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    List&lt;ServerName&gt; otherRegionServers = replicationTracker.getListOfRegionServers().stream()<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        .map(ServerName::valueOf).collect(Collectors.toList());<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    LOG.info(<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      "Current list of replicators: " + currentReplicators + " other RSs: " + otherRegionServers);<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>    // Look if there's anything to process after a restart<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    for (ServerName rs : currentReplicators) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      if (!otherRegionServers.contains(rs)) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        transferQueues(rs);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>  /**<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * &lt;ol&gt;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * &lt;li&gt;Add peer to replicationPeers&lt;/li&gt;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * &lt;li&gt;Add the normal source and related replication queue&lt;/li&gt;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * &lt;li&gt;Add HFile Refs&lt;/li&gt;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * &lt;/ol&gt;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * @param peerId the id of replication peer<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public void addPeer(String peerId) throws IOException {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    boolean added = false;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      added = this.replicationPeers.addPeer(peerId);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    } catch (ReplicationException e) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      throw new IOException(e);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    if (added) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      addSource(peerId);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      if (replicationForBulkLoadDataEnabled) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        throwIOExceptionWhenFail(() -&gt; this.queueStorage.addPeerToHFileRefs(peerId));<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * &lt;ol&gt;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * &lt;li&gt;Remove peer for replicationPeers&lt;/li&gt;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * &lt;li&gt;Remove all the recovered sources for the specified id and related replication queues&lt;/li&gt;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * &lt;li&gt;Remove the normal source and related replication queue&lt;/li&gt;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   * &lt;li&gt;Remove HFile Refs&lt;/li&gt;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * &lt;/ol&gt;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @param peerId the id of the replication peer<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  public void removePeer(String peerId) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    ReplicationPeer peer = replicationPeers.removePeer(peerId);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    String terminateMessage = "Replication stream was removed by a user";<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    List&lt;ReplicationSourceInterface&gt; oldSourcesToDelete = new ArrayList&lt;&gt;();<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    // synchronized on oldsources to avoid adding recovered source for the to-be-removed peer<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    // see NodeFailoverWorker.run<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    synchronized (this.oldsources) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      // First close all the recovered sources for this peer<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      for (ReplicationSourceInterface src : oldsources) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        if (peerId.equals(src.getPeerId())) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>          oldSourcesToDelete.add(src);<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>      for (ReplicationSourceInterface src : oldSourcesToDelete) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        src.terminate(terminateMessage);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        removeRecoveredSource(src);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    LOG.info(<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      "Number of deleted recovered sources for " + peerId + ": " + oldSourcesToDelete.size());<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    // Now close the normal source for this peer<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    ReplicationSourceInterface srcToRemove = this.sources.get(peerId);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    if (srcToRemove != null) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      srcToRemove.terminate(terminateMessage);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      removeSource(srcToRemove);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    } else {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      // This only happened in unit test TestReplicationSourceManager#testPeerRemovalCleanup<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      // Delete queue from storage and memory and queue id is same with peer id for normal<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      // source<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      deleteQueue(peerId);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.walsById.remove(peerId);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    ReplicationPeerConfig peerConfig = peer.getPeerConfig();<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    if (peerConfig.isSyncReplication()) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      syncReplicationPeerMappingManager.remove(peerId, peerConfig);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    // Remove HFile Refs<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    abortWhenFail(() -&gt; this.queueStorage.removePeerFromHFileRefs(peerId));<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * Factory method to create a replication source<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * @param queueId the id of the replication queue<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @return the created source<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  private ReplicationSourceInterface createSource(String queueId, ReplicationPeer replicationPeer)<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      throws IOException {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    ReplicationSourceInterface src = ReplicationSourceFactory.create(conf, queueId);<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    MetricsSource metrics = new MetricsSource(queueId);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    // init replication source<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    src.init(conf, fs, this, queueStorage, replicationPeer, server, queueId, clusterId,<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      walFileLengthProvider, metrics);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    return src;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>  /**<a name="line.356"></a>
-<span class="sourceLineNo">357</span>   * Add a normal source for the given peer on this region server. Meanwhile, add new replication<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   * queue to storage. For the newly added peer, we only need to enqueue the latest log of each wal<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * group and do replication<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * @param peerId the id of the replication peer<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * @return the source that was created<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  @VisibleForTesting<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  ReplicationSourceInterface addSource(String peerId) throws IOException {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    ReplicationPeer peer = replicationPeers.getPeer(peerId);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    ReplicationSourceInterface src = createSource(peerId, peer);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    // synchronized on latestPaths to avoid missing the new log<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    synchronized (this.latestPaths) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      this.sources.put(peerId, src);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      Map&lt;String, NavigableSet&lt;String&gt;&gt; walsByGroup = new HashMap&lt;&gt;();<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      this.walsById.put(peerId, walsByGroup);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      // Add the latest wal to that source's queue<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      if (this.latestPaths.size() &gt; 0) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        for (Path logPath : latestPaths) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          String name = logPath.getName();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          String walPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(name);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          NavigableSet&lt;String&gt; logs = new TreeSet&lt;&gt;();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          logs.add(name);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          walsByGroup.put(walPrefix, logs);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>          // Abort RS and throw exception to make add peer failed<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          abortAndThrowIOExceptionWhenFail(<a name="line.381"></a>
-<span class="sourceLineNo">382</span>            () -&gt; this.queueStorage.addWAL(server.getServerName(), peerId, name));<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          src.enqueueLog(logPath);<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>    }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    ReplicationPeerConfig peerConfig = peer.getPeerConfig();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    if (peerConfig.isSyncReplication()) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      syncReplicationPeerMappingManager.add(peer.getId(), peerConfig);<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    src.startup();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    return src;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>  /**<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * &lt;p&gt;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * This is used when we transit a sync replication peer to {@link SyncReplicationState#STANDBY}.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * &lt;/p&gt;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * &lt;p&gt;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * When transiting to {@link SyncReplicationState#STANDBY}, we can remove all the pending wal<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * files for a replication peer as we do not need to replicate them any more. And this is<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * necessary, otherwise when we transit back to {@link SyncReplicationState#DOWNGRADE_ACTIVE}<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * later, the stale data will be replicated again and cause inconsistency.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * &lt;/p&gt;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * &lt;p&gt;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * See HBASE-20426 for more details.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   * &lt;/p&gt;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   * @param peerId the id of the sync replication peer<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   */<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  public void drainSources(String peerId) throws IOException, ReplicationException {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    String terminateMessage = "Sync replication peer " + peerId +<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      " is transiting to STANDBY. Will close the previous replication source and open a new one";<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    ReplicationPeer peer = replicationPeers.getPeer(peerId);<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    assert peer.getPeerConfig().isSyncReplication();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    ReplicationSourceInterface src = createSource(peerId, peer);<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // synchronized here to avoid race with preLogRoll where we add new log to source and also<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    // walsById.<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    ReplicationSourceInterface toRemove;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    Map&lt;String, NavigableSet&lt;String&gt;&gt; wals = new HashMap&lt;&gt;();<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    synchronized (latestPaths) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      toRemove = sources.put(peerId, src);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      if (toRemove != null) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        LOG.info("Terminate replication source for " + toRemove.getPeerId());<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        toRemove.terminate(terminateMessage);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        toRemove.getSourceMetrics().clear();<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      // Here we make a copy of all the remaining wal files and then delete them from the<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      // replication queue storage after releasing the lock. It is not safe to just remove the old<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      // map from walsById since later we may fail to delete them from the replication queue<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      // storage, and when we retry next time, we can not know the wal files that need to be deleted<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      // from the replication queue storage.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      walsById.get(peerId).forEach((k, v) -&gt; wals.put(k, new TreeSet&lt;&gt;(v)));<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    LOG.info("Startup replication source for " + src.getPeerId());<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    src.startup();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    for (NavigableSet&lt;String&gt; walsByGroup : wals.values()) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      for (String wal : walsByGroup) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        queueStorage.removeWAL(server.getServerName(), peerId, wal);<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>    synchronized (walsById) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      Map&lt;String, NavigableSet&lt;String&gt;&gt; oldWals = walsById.get(peerId);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      wals.forEach((k, v) -&gt; {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        NavigableSet&lt;String&gt; walsByGroup = oldWals.get(k);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        if (walsByGroup != null) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>          walsByGroup.removeAll(v);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      });<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    }<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    // synchronized on oldsources to avoid race with NodeFailoverWorker. Since NodeFailoverWorker is<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    // a background task, we will delete the file from replication queue storage under the lock to<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    // simplify the logic.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    synchronized (this.oldsources) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      for (Iterator&lt;ReplicationSourceInterface&gt; iter = oldsources.iterator(); iter.hasNext();) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        ReplicationSourceInterface oldSource = iter.next();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        if (oldSource.getPeerId().equals(peerId)) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          String queueId = oldSource.getQueueId();<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          oldSource.terminate(terminateMessage);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          oldSource.getSourceMetrics().clear();<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          queueStorage.removeQueue(server.getServerName(), queueId);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          walsByIdRecoveredQueues.remove(queueId);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>          iter.remove();<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<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>   * Close the previous replication sources of this peer id and open new sources to trigger the new<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * replication state changes or new replication config changes. Here we don't need to change<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * replication queue storage and only to enqueue all logs to the new replication source<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * @param peerId the id of the replication peer<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
-<span class="sourceLineNo">474</span>  public void refreshSources(String peerId) throws IOException {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    String terminateMessage = "Peer " + peerId +<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      " state or config changed. Will close the previous replication source and open a new one";<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    ReplicationPeer peer = replicationPeers.getPeer(peerId);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    ReplicationSourceInterface src = createSource(peerId, peer);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // synchronized on latestPaths to avoid missing the new log<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    synchronized (this.latestPaths) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      ReplicationSourceInterface toRemove = this.sources.put(peerId, src);<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (toRemove != null) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        LOG.info("Terminate replication source for " + toRemove.getPeerId());<a name="line.483"></a>
-<span class="sourceLineNo">484</span>        toRemove.terminate(terminateMessage);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      }<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      for (NavigableSet&lt;String&gt; walsByGroup : walsById.get(peerId).values()) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        walsByGroup.forEach(wal -&gt; src.enqueueLog(new Path(this.logDir, wal)));<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    LOG.info("Startup replication source for " + src.getPeerId());<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    src.startup();<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>    List&lt;ReplicationSourceInterface&gt; toStartup = new ArrayList&lt;&gt;();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    // synchronized on oldsources to avoid race with NodeFailoverWorker<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    synchronized (this.oldsources) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      List&lt;String&gt; previousQueueIds = new ArrayList&lt;&gt;();<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      for (ReplicationSourceInterface oldSource : this.oldsources) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        if (oldSource.getPeerId().equals(peerId)) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          previousQueueIds.add(oldSource.getQueueId());<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          oldSource.terminate(terminateMessage);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>          this.oldsources.remove(oldSource);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      for (String queueId : previousQueueIds) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        ReplicationSourceInterface replicationSource = createSource(queueId, peer);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        this.oldsources.add(replicationSource);<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        for (SortedSet&lt;String&gt; walsByGroup : walsByIdRecoveredQueues.get(queueId).values()) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          walsByGroup.forEach(wal -&gt; src.enqueueLog(new Path(wal)));<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        toStartup.add(replicationSource);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    }<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    for (ReplicationSourceInterface replicationSource : toStartup) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      replicationSource.startup();<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>   * Clear the metrics and related replication queue of the specified old source<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * @param src source to clear<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  private boolean removeRecoveredSource(ReplicationSourceInterface src) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    if (!this.oldsources.remove(src)) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      return false;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    LOG.info("Done with the recovered queue {}", src.getQueueId());<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    // Delete queue from storage and memory<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    deleteQueue(src.getQueueId());<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    this.walsByIdRecoveredQueues.remove(src.getQueueId());<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    return true;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>  }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>  void finishRecoveredSource(ReplicationSourceInterface src) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    synchronized (oldsources) {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (!removeRecoveredSource(src)) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        return;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      }<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    LOG.info("Finished recovering queue {} with the following stats: {}", src.getQueueId(),<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      src.getStats());<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>  /**<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   * Clear the metrics and related replication queue of the specified old source<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * @param src source to clear<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   */<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  void removeSource(ReplicationSourceInterface src) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    LOG.info("Done with the queue " + src.getQueueId());<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    this.sources.remove(src.getPeerId());<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    // Delete queue from storage and memory<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    deleteQueue(src.getQueueId());<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    this.walsById.remove(src.getQueueId());<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>  }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>  /**<a name="line.556"></a>
-<span class="sourceLineNo">557</span>   * Delete a complete queue of wals associated with a replication source<a name="line.557"></a>
-<span class="sourceLineNo">558</span>   * @param queueId the id of replication queue to delete<a name="line.558"></a>
-<span class="sourceLineNo">559</span>   */<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  private void deleteQueue(String queueId) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    abortWhenFail(() -&gt; this.queueStorage.removeQueue(server.getServerName(), queueId));<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>  @FunctionalInterface<a name="line.564"></a>
-<span class="sourceLineNo">565</span>  private interface ReplicationQueueOperation {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    void exec() throws ReplicationException;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>  /**<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   * Refresh replication source will terminate the old source first, then the source thread will be<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * interrupted. Need to handle it instead of abort the region server.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   */<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  private void interruptOrAbortWhenFail(ReplicationQueueOperation op) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    try {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      op.exec();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    } catch (ReplicationException e) {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      if (e.getCause() != null &amp;&amp; e.getCause() instanceof KeeperException.SystemErrorException<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          &amp;&amp; e.getCause().getCause() != null &amp;&amp; e.getCause()<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          .getCause() instanceof InterruptedException) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>        throw new RuntimeException(<a name="line.580"></a>
-<span class="sourceLineNo">581</span>            "Thread is interrupted, the replication source may be terminated");<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      }<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      server.abort("Failed to operate on replication queue", e);<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><a name="line.586"></a>
-<span class="sourceLineNo">587</span>  private void abortWhenFail(ReplicationQueueOperation op) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    try {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      op.exec();<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    } catch (ReplicationException e) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      server.abort("Failed to operate on replication queue", e);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    }<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  private void throwIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    try {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      op.exec();<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    } catch (ReplicationException e) {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      throw new IOException(e);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    }<a name="line.600"></a>
-<span class="sourceLineNo">601</span>  }<a name="line.601"></a>
-<span class="sourceLineNo">602</span><a name="line.602"></a>
-<span class="sourceLineNo">603</span>  private void abortAndThrowIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    try {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      op.exec();<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    } catch (ReplicationException e) {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      server.abort("Failed to operate on replication queue", e);<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      throw new IOException(e);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    }<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>  /**<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * This method will log the current position to storage. And also clean old logs from the<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * replication queue.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @param source the replication source<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * @param entryBatch the wal entry batch we just shipped<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  public void logPositionAndCleanOldLogs(ReplicationSourceInterface source,<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      WALEntryBatch entryBatch) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    String fileName = entryBatch.getLastWalPath().getName();<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    interruptOrAbortWhenFail(() -&gt; this.queueStorage.setWALPosition(server.getServerName(),<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      source.getQueueId(), fileName, entryBatch.getLastWalPosition(), entryBatch.getLastSeqIds()));<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    cleanOldLogs(fileName, entryBatch.isEndOfFile(), source);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  }<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span>  /**<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * Cleans a log file and all older logs from replication queue. Called when we are sure that a log<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * file is closed and has no more entries.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * @param log Path to the log<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * @param inclusive whether we should also remove the given log file<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   * @param source the replication source<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   */<a name="line.632"></a>
-<span class="sourceLineNo">633</span>  @VisibleForTesting<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  void cleanOldLogs(String log, boolean inclusive, ReplicationSourceInterface source) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(log);<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    if (source.isRecovered()) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      NavigableSet&lt;String&gt; wals = walsByIdRecoveredQueues.get(source.getQueueId()).get(logPrefix);<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      if (wals != null) {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        NavigableSet&lt;String&gt; walsToRemove = wals.headSet(log, inclusive);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        if (walsToRemove.isEmpty()) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>          return;<a name="line.641"></a>
-<span class="sourceLineNo">642</span>        }<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        cleanOldLogs(walsToRemove, source);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>        walsToRemove.clear();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      }<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    } else {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      NavigableSet&lt;String&gt; wals;<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      NavigableSet&lt;String&gt; walsToRemove;<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      // synchronized on walsById to avoid race with preLogRoll<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      synchronized (this.walsById) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        wals = walsById.get(source.getQueueId()).get(logPrefix);<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        if (wals == null) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>          return;<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        }<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        walsToRemove = wals.headSet(log, inclusive);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>        if (walsToRemove.isEmpty()) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>          return;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>        }<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        walsToRemove = new TreeSet&lt;&gt;(walsToRemove);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      }<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      // cleanOldLogs may spend some time, especially for sync replication where we may want to<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      // remove remote wals as the remote cluster may have already been down, so we do it outside<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      // the lock to avoid block preLogRoll<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      cleanOldLogs(walsToRemove, source);<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      // now let's remove the files in the set<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      synchronized (this.walsById) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        wals.removeAll(walsToRemove);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span>  private void removeRemoteWALs(String peerId, String remoteWALDir, Collection&lt;String&gt; wals)<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      throws IOException {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    Path remoteWALDirForPeer = ReplicationUtils.getPeerRemoteWALDir(remoteWALDir, peerId);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    FileSystem fs = ReplicationUtils.getRemoteWALFileSystem(conf, remoteWALDir);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    for (String wal : wals) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      Path walFile = new Path(remoteWALDirForPeer, wal);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      try {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        if (!fs.delete(walFile, false) &amp;&amp; fs.exists(walFile)) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>          throw new IOException("Can not delete " + walFile);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        }<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      } catch (FileNotFoundException e) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        // Just ignore since this means the file has already been deleted.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>        // The javadoc of the FileSystem.delete methods does not specify the behavior of deleting an<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        // inexistent file, so here we deal with both, i.e, check the return value of the<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        // FileSystem.delete, and also catch FNFE.<a name="line.686"></a>
-<span class="sourceLineNo">687</span>        LOG.debug("The remote wal {} has already been deleted?", walFile, e);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      }<a name="line.688"></a>
-<span class="sourceLineNo">689</span>    }<a name="line.689"></a>
-<span class="sourceLineNo">690</span>  }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>  private void cleanOldLogs(NavigableSet&lt;String&gt; wals, ReplicationSourceInterface source) {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    LOG.debug("Removing {} logs in the list: {}", wals.size(), wals);<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    // The intention here is that, we want to delete the remote wal files ASAP as it may effect the<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    // failover time if you want to transit the remote cluster from S to A. And the infinite retry<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    // is not a problem, as if we can not contact with the remote HDFS cluster, then usually we can<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    // not contact with the HBase cluster either, so the replication will be blocked either.<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    if (source.isSyncReplication()) {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      String peerId = source.getPeerId();<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      String remoteWALDir = source.getPeer().getPeerConfig().getRemoteWALDir();<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      // Filter out the wals need to be removed from the remote directory. Its name should be the<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      // special format, and also, the peer id in its name should match the peer id for the<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      // replication source.<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      List&lt;String&gt; remoteWals = wals.stream().filter(w -&gt; SyncReplicationWALProvider<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        .getSyncReplicationPeerIdFromWALName(w).map(peerId::equals).orElse(false))<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        .collect(Collectors.toList());<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      LOG.debug("Removing {} logs from remote dir {} in the list: {}", remoteWals.size(),<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        remoteWALDir, remoteWals);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      if (!remoteWals.isEmpty()) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        for (int sleepMultiplier = 0;;) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>          try {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>            removeRemoteWALs(peerId, remoteWALDir, remoteWals);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>            break;<a name="line.713"></a>
-<span class="sourceLineNo">714</span>          } catch (IOException e) {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>            LOG.warn("Failed to delete remote wals from remote dir {} for peer {}", remoteWALDir,<a name="line.715"></a>
-<span class="sourceLineNo">716</span>              peerId);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>          }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>          if (!source.isSourceActive()) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>            // skip the following operations<a name="line.719"></a>
-<span class="sourceLineNo">720</span>            return;<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>          if (ReplicationUtils.sleepForRetries("Failed to delete remote wals", sleepForRetries,<a name="line.722"></a>
-<span class="sourceLineNo">723</span>            sleepMultiplier, maxRetriesMultiplier)) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>            sleepMultiplier++;<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          }<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        }<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    }<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    String queueId = source.getQueueId();<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    for (String wal : wals) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      interruptOrAbortWhenFail(<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        () -&gt; this.queueStorage.removeWAL(server.getServerName(), queueId, wal));<a name="line.732"></a>
-<span class="sourceLineNo">733</span>    }<a name="line.733"></a>
-<span class="sourceLineNo">734</span>  }<a name="line.734"></a>
-<span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>  // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.736"></a>
-<span class="sourceLineNo">737</span>  @VisibleForTesting<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  public void preLogRoll(Path newLog) throws IOException {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    String logName = newLog.getName();<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(logName);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    // synchronized on latestPaths to avoid the new open source miss the new log<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    synchronized (this.latestPaths) {<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      // Add log to queue storage<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        // If record log to queue storage failed, abort RS and throw exception to make log roll<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        // failed<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        abortAndThrowIOExceptionWhenFail(<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          () -&gt; this.queueStorage.addWAL(server.getServerName(), source.getQueueId(), logName));<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>      // synchronized on walsById to avoid race with cleanOldLogs<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      synchronized (this.walsById) {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        // Update walsById map<a name="line.753"></a>
-<span class="sourceLineNo">754</span>        for (Map.Entry&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; entry : this.walsById<a name="line.754"></a>
-<span class="sourceLineNo">755</span>          .entrySet()) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>          String peerId = entry.getKey();<a name="line.756"></a>
-<span class="sourceLineNo">757</span>          Map&lt;String, NavigableSet&lt;String&gt;&gt; walsByPrefix = entry.getValue();<a name="line.757"></a>
-<span class="sourceLineNo">758</span>          boolean existingPrefix = false;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>          for (Map.Entry&lt;String, NavigableSet&lt;String&gt;&gt; walsEntry : walsByPrefix.entrySet()) {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>            SortedSet&lt;String&gt; wals = walsEntry.getValue();<a name="line.760"></a>
-<span class="sourceLineNo">761</span>            if (this.sources.isEmpty()) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>              // If there's no slaves, don't need to keep the old wals since<a name="line.762"></a>
-<span class="sourceLineNo">763</span>              // we only consider the last one when a new slave comes in<a name="line.763"></a>
-<span class="sourceLineNo">764</span>              wals.clear();<a name="line.764"></a>
-<span class="sourceLineNo">765</span>            }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>            if (logPrefix.equals(walsEntry.getKey())) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>              wals.add(logName);<a name="line.767"></a>
-<span class="sourceLineNo">768</span>              existingPrefix = true;<a name="line.768"></a>
-<span class="sourceLineNo">769</span>            }<a name="line.769"></a>
-<span class="sourceLineNo">770</span>          }<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          if (!existingPrefix) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>            // The new log belongs to a new group, add it into this peer<a name="line.772"></a>
-<span class="sourceLineNo">773</span>            LOG.debug("Start tracking logs for wal group {} for peer {}", logPrefix, peerId);<a name="line.773"></a>
-<span class="sourceLineNo">774</span>            NavigableSet&lt;String&gt; wals = new TreeSet&lt;&gt;();<a name="line.774"></a>
-<span class="sourceLineNo">775</span>            wals.add(logName);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>            walsByPrefix.put(logPrefix, wals);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>          }<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        }<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      }<a name="line.779"></a>
-<span class="sourceLineNo">780</span><a name="line.780"></a>
-<span class="sourceLineNo">781</span>      // Add to latestPaths<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      Iterator&lt;Path&gt; iterator = latestPaths.iterator();<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      while (iterator.hasNext()) {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>        Path path = iterator.next();<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        if (path.getName().contains(logPrefix)) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          iterator.remove();<a name="line.786"></a>
-<span class="sourceLineNo">787</span>          break;<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        }<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      this.latestPaths.add(newLog);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    }<a name="line.791"></a>
-<span class="sourceLineNo">792</span>  }<a name="line.792"></a>
-<span class="sourceLineNo">793</span><a name="line.793"></a>
-<span class="sourceLineNo">794</span>  // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.794"></a>
-<span class="sourceLineNo">795</span>  @VisibleForTesting<a name="line.795"></a>
-<span class="sourceLineNo">796</span>  public void postLogRoll(Path newLog) throws IOException {<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    // This only updates the sources we own, not the recovered ones<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      source.enqueueLog(newLog);<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    }<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span>  @Override<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  public void regionServerRemoved(String regionserver) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    transferQueues(ServerName.valueOf(regionserver));<a name="line.805"></a>
-<span class="sourceLineNo">806</span>  }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>  /**<a name="line.808"></a>
-<span class="sourceLineNo">809</span>   * Transfer all the queues of the specified to this region server. First it tries to grab a lock<a name="line.809"></a>
-<span class="sourceLineNo">810</span>   * and if it works it will move the old queues and finally will delete the old queues.<a name="line.810"></a>
-<span class="sourceLineNo">811</span>   * &lt;p&gt;<a name="line.811"></a>
-<span class="sourceLineNo">812</span>   * It creates one old source for any type of source of the old rs.<a name="line.812"></a>
-<span class="sourceLineNo">813</span>   */<a name="line.813"></a>
-<span class="sourceLineNo">814</span>  private void transferQueues(ServerName deadRS) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span>    if (server.getServerName().equals(deadRS)) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      // it's just us, give up<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      return;<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    NodeFailoverWorker transfer = new NodeFailoverWorker(deadRS);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    try {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>      this.executor.execute(transfer);<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    } catch (RejectedExecutionException ex) {<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      LOG.info("Cancelling the transfer of " + deadRS + " because of " + ex.getMessage());<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    }<a name="line.824"></a>
-<span class="sourceLineNo">825</span>  }<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>  /**<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   * Class responsible to setup new ReplicationSources to take care of the queues from dead region<a name="line.828"></a>
-<span class="sourceLineNo">829</span>   * servers.<a name="line.829"></a>
-<span class="sourceLineNo">830</span>   */<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  class NodeFailoverWorker extends Thread {<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>    private final ServerName deadRS;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    // After claim the queues from dead region server, the NodeFailoverWorker will skip to start<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    // the RecoveredReplicationSource if the peer has been removed. but there's possible that<a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // remove a peer with peerId = 2 and add a peer with peerId = 2 again during the<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    // NodeFailoverWorker. So we need a deep copied &lt;peerId, peer&gt; map to decide whether we<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    // should start the RecoveredReplicationSource. If the latest peer is not the old peer when<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    // NodeFailoverWorker begin, we should skip to start the RecoveredReplicationSource, Otherwise<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    // the rs will abort (See HBASE-20475).<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    private final Map&lt;String, ReplicationPeerImpl&gt; peersSnapshot;<a name="line.841"></a>
-<span class="sourceLineNo">842</span><a name="line.842"></a>
-<span class="sourceLineNo">843</span>    @VisibleForTesting<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    public NodeFailoverWorker(ServerName deadRS) {<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      super("Failover-for-" + deadRS);<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      this.deadRS = deadRS;<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      peersSnapshot = new HashMap&lt;&gt;(replicationPeers.getPeerCache());<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    }<a name="line.848"></a>
-<span class="sourceLineNo">849</span><a name="line.849"></a>
-<span class="sourceLineNo">850</span>    private boolean isOldPeer(String peerId, ReplicationPeerImpl newPeerRef) {<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      ReplicationPeerImpl oldPeerRef = peersSnapshot.get(peerId);<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      return oldPeerRef != null &amp;&amp; oldPeerRef == newPeerRef;<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    }<a name="line.853"></a>
-<span class="sourceLineNo">854</span><a name="line.854"></a>
-<span class="sourceLineNo">855</span>    @Override<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    public void run() {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      // Wait a bit before transferring the queues, we may be shutting down.<a name="line.857"></a>
-<span class="sourceLineNo">858</span>      // This sleep may not be enough in some cases.<a name="line.858"></a>
-<span class="sourceLineNo">859</span>      try {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>        Thread.sleep(sleepBeforeFailover +<a name="line.860"></a>
-<span class="sourceLineNo">861</span>          (long) (ThreadLocalRandom.current().nextFloat() * sleepBeforeFailover));<a name="line.861"></a>
-<span class="sourceLineNo">862</span>      } catch (InterruptedException e) {<a name="line.862"></a>
-<span class="sourceLineNo">863</span>        LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.863"></a>
-<span class="sourceLineNo">864</span>        Thread.currentThread().interrupt();<a name="line.864"></a>
-<span class="sourceLineNo">865</span>      }<a name="line.865"></a>
-<span class="sourceLineNo">866</span>      // We try to lock that rs' queue directory<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      if (server.isStopped()) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>        LOG.info("Not transferring queue since we are shutting down");<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        return;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      Map&lt;String, Set&lt;String&gt;&gt; newQueues = new HashMap&lt;&gt;();<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      try {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>        List&lt;String&gt; queues = queueStorage.getAllQueues(deadRS);<a name="line.873"></a>
-<span class="sourceLineNo">874</span>        while (!queues.isEmpty()) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>          Pair&lt;String, SortedSet&lt;String&gt;&gt; peer = queueStorage.claimQueue(deadRS,<a name="line.875"></a>
-<span class="sourceLineNo">876</span>            queues.get(ThreadLocalRandom.current().nextInt(queues.size())), server.getServerName());<a name="line.876"></a>
-<span class="sourceLineNo">877</span>          long sleep = sleepBeforeFailover / 2;<a name="line.877"></a>
-<span class="sourceLineNo">878</span>          if (!peer.getSecond().isEmpty()) {<a name="line.878"></a>
-<span class="sourceLineNo">879</span>            newQueues.put(peer.getFirst(), peer.getSecond());<a name="line.879"></a>
-<span class="sourceLineNo">880</span>            sleep = sleepBeforeFailover;<a name="line.880"></a>
-<span class="sourceLineNo">881</span>          }<a name="line.881"></a>
-<span class="sourceLineNo">882</span>          try {<a name="line.882"></a>
-<span class="sourceLineNo">883</span>            Thread.sleep(sleep);<a name="line.883"></a>
-<span class="sourceLineNo">884</span>          } catch (InterruptedException e) {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>            LOG.warn("Interrupted while waiting before transferring a queue.");<a

<TRUNCATED>

[26/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.


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

Branch: refs/heads/asf-site
Commit: 37b8a04a71b405280bc7d315858cc1ad7f12f22e
Parents: d949795
Author: jenkins <bu...@apache.org>
Authored: Tue Oct 2 14:53:34 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Tue Oct 2 14:53:34 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                |    4 +-
 book.html                                       |    2 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       |   30 +-
 coc.html                                        |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    4 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |    4 +-
 devapidocs/constant-values.html                 |   39 +-
 devapidocs/index-all.html                       |   16 +
 .../hadoop/hbase/backup/package-tree.html       |    4 +-
 .../hadoop/hbase/class-use/ServerName.html      |   34 +-
 .../hadoop/hbase/client/package-tree.html       |   28 +-
 .../hadoop/hbase/coprocessor/package-tree.html  |    2 +-
 .../hadoop/hbase/executor/package-tree.html     |    2 +-
 .../hadoop/hbase/filter/package-tree.html       |   10 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    6 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |    2 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |    4 +-
 .../hadoop/hbase/master/package-tree.html       |    6 +-
 .../hbase/master/procedure/package-tree.html    |    2 +-
 .../hadoop/hbase/monitoring/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   16 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    4 +-
 .../hadoop/hbase/quotas/package-tree.html       |   10 +-
 .../hadoop/hbase/regionserver/package-tree.html |   18 +-
 .../regionserver/querymatcher/package-tree.html |    2 +-
 .../hbase/regionserver/wal/package-tree.html    |    4 +-
 .../replication/ReplicationQueueStorage.html    |   46 +-
 .../replication/ZKReplicationQueueStorage.html  |   92 +-
 .../MetricsReplicationGlobalSourceSource.html   |  170 +-
 .../MetricsReplicationSourceSource.html         |  130 +-
 .../MetricsReplicationSourceSourceImpl.html     |   75 +-
 .../replication/regionserver/MetricsSource.html |   77 +-
 ...icationSourceManager.NodeFailoverWorker.html |   12 +-
 ...SourceManager.ReplicationQueueOperation.html |    4 +-
 .../regionserver/ReplicationSourceManager.html  |  132 +-
 .../hadoop/hbase/rest/model/package-tree.html   |    2 +-
 .../hbase/security/access/package-tree.html     |    4 +-
 .../hadoop/hbase/security/package-tree.html     |    2 +-
 .../apache/hadoop/hbase/util/package-tree.html  |   10 +-
 .../lib/class-use/MutableFastCounter.html       |   58 +-
 .../org/apache/hadoop/hbase/Version.html        |    6 +-
 .../replication/ReplicationQueueStorage.html    |    9 +-
 .../replication/ZKReplicationQueueStorage.html  | 1117 +++++-----
 .../MetricsReplicationGlobalSourceSource.html   |  408 ++--
 .../MetricsReplicationSourceSource.html         |   50 +-
 .../MetricsReplicationSourceSourceImpl.html     |  111 +-
 .../replication/regionserver/MetricsSource.html |  138 +-
 ...icationSourceManager.NodeFailoverWorker.html | 2088 +++++++++---------
 ...SourceManager.ReplicationQueueOperation.html | 2088 +++++++++---------
 .../regionserver/ReplicationSourceManager.html  | 2088 +++++++++---------
 downloads.html                                  |    4 +-
 export_control.html                             |    4 +-
 index.html                                      |    4 +-
 integration.html                                |    4 +-
 issue-tracking.html                             |    4 +-
 license.html                                    |    4 +-
 mail-lists.html                                 |    4 +-
 metrics.html                                    |    4 +-
 old_news.html                                   |    4 +-
 plugin-management.html                          |    4 +-
 plugins.html                                    |    4 +-
 poweredbyhbase.html                             |    4 +-
 project-info.html                               |    4 +-
 project-reports.html                            |    4 +-
 project-summary.html                            |    4 +-
 pseudo-distributed.html                         |    4 +-
 replication.html                                |    4 +-
 resources.html                                  |    4 +-
 source-repository.html                          |    4 +-
 sponsors.html                                   |    4 +-
 supportingprojects.html                         |    4 +-
 team-list.html                                  |    4 +-
 testdevapidocs/index-all.html                   |    8 +-
 .../TestSnapshotFileCache.SnapshotFiles.html    |    6 +-
 .../master/snapshot/TestSnapshotFileCache.html  |   88 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   12 +-
 .../hadoop/hbase/procedure/package-tree.html    |    8 +-
 .../hadoop/hbase/regionserver/package-tree.html |    4 +-
 ...Endpoint.EverythingPassesWALEntryFilter.html |   10 +-
 ....EverythingPassesWALEntryFilterSubclass.html |    4 +-
 ....InterClusterReplicationEndpointForTest.html |   12 +-
 ...tionEndpoint.ReplicationEndpointForTest.html |   28 +-
 ...point.ReplicationEndpointReturningFalse.html |   12 +-
 ...t.ReplicationEndpointWithWALEntryFilter.html |   10 +-
 .../replication/TestReplicationEndpoint.html    |   36 +-
 .../rsgroup/TestRSGroups.CPMasterObserver.html  |   61 +-
 .../hadoop/hbase/rsgroup/TestRSGroups.html      |   26 +-
 .../apache/hadoop/hbase/test/package-tree.html  |    2 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 .../TestSnapshotFileCache.SnapshotFiles.html    |  432 ++--
 .../master/snapshot/TestSnapshotFileCache.html  |  432 ++--
 ...Endpoint.EverythingPassesWALEntryFilter.html | 1062 ++++-----
 ....EverythingPassesWALEntryFilterSubclass.html | 1062 ++++-----
 ....InterClusterReplicationEndpointForTest.html | 1062 ++++-----
 ...tionEndpoint.ReplicationEndpointForTest.html | 1062 ++++-----
 ...point.ReplicationEndpointReturningFalse.html | 1062 ++++-----
 ...t.ReplicationEndpointWithWALEntryFilter.html | 1062 ++++-----
 .../replication/TestReplicationEndpoint.html    | 1062 ++++-----
 .../rsgroup/TestRSGroups.CPMasterObserver.html  |  627 +++---
 .../hadoop/hbase/rsgroup/TestRSGroups.html      |  627 +++---
 104 files changed, 9754 insertions(+), 9407 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 8c6554f..63433e5 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 07b86b9..6c22d10 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:20180930143152+00'00')
-/CreationDate (D:20180930144738+00'00')
+/ModDate (D:20181002143323+00'00')
+/CreationDate (D:20181002144928+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index cccd886..8bbe0fe 100644
--- a/book.html
+++ b/book.html
@@ -41284,7 +41284,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-09-30 14:31:52 UTC
+Last updated 2018-10-02 14:33:23 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index b3b23ba..1c58db0 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 5a03329..d45fc93 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -89858,43 +89858,43 @@
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
-<td>254</td></tr>
+<td>256</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
-<td>283</td></tr>
+<td>285</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
-<td>293</td></tr>
+<td>295</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
-<td>309</td></tr>
+<td>311</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
-<td>319</td></tr>
+<td>322</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
-<td>320</td></tr>
+<td>323</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>553</td></tr></table></div>
+<td>565</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.TestReplicationKillMasterRSCompressed.java">org/apache/hadoop/hbase/replication/TestReplicationKillMasterRSCompressed.java</h3>
 <table border="0" class="table table-striped">
@@ -90044,19 +90044,19 @@
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
-<td>250</td></tr>
+<td>251</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 8.</td>
-<td>566</td></tr>
+<td>567</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>585</td></tr></table></div>
+<td>586</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner.java">org/apache/hadoop/hbase/replication/master/ReplicationLogCleaner.java</h3>
 <table border="0" class="table table-striped">
@@ -90437,19 +90437,19 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>175</td></tr>
+<td>176</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>176</td></tr>
+<td>177</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>182</td></tr></table></div>
+<td>183</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">
@@ -118053,7 +118053,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 23027c4..fbf11ff 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 922c0e9..a830813 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 0526dcf..5c46ebb 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -879,7 +879,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index f3b2ebb..ee66a24 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index d453eb6..34cab1e 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -1005,7 +1005,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 30aad09..544fb19 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3824,21 +3824,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>"Sun Sep 30 14:42:29 UTC 2018"</code></td>
+<td class="colLast"><code>"Tue Oct  2 14:44:08 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>"f9d51b67e45f1f213c37b14bfe96e442bc71a995"</code></td>
+<td class="colLast"><code>"42aa3dd463c0d30a9b940d296b87316b5c67e1f5"</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>"8ea5c410a4d8c260360e2021a70b2661"</code></td>
+<td class="colLast"><code>"71ccf58161ef9c9c0e0dc546d4bc2c7b"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">
@@ -23759,97 +23759,104 @@
 <td class="colLast"><code>"source.completedRecoverQueues"</code></td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.SOURCE_FAILED_RECOVERY_QUEUES">
+<!--   -->
+</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/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_FAILED_RECOVERY_QUEUES">SOURCE_FAILED_RECOVERY_QUEUES</a></code></td>
+<td class="colLast"><code>"source.failedRecoverQueues"</code></td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.SOURCE_LOG_EDITS_FILTERED">
 <!--   -->
 </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/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_EDITS_FILTERED">SOURCE_LOG_EDITS_FILTERED</a></code></td>
 <td class="colLast"><code>"source.logEditsFiltered"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.SOURCE_LOG_READ_IN_BYTES">
 <!--   -->
 </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/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_READ_IN_BYTES">SOURCE_LOG_READ_IN_BYTES</a></code></td>
 <td class="colLast"><code>"source.logReadInBytes"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.SOURCE_LOG_READ_IN_EDITS">
 <!--   -->
 </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/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_READ_IN_EDITS">SOURCE_LOG_READ_IN_EDITS</a></code></td>
 <td class="colLast"><code>"source.logEditsRead"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.SOURCE_REPEATED_LOG_FILE_BYTES">
 <!--   -->
 </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/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_REPEATED_LOG_FILE_BYTES">SOURCE_REPEATED_LOG_FILE_BYTES</a></code></td>
 <td class="colLast"><code>"source.repeatedLogFileBytes"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.SOURCE_RESTARTED_LOG_READING">
 <!--   -->
 </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/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_RESTARTED_LOG_READING">SOURCE_RESTARTED_LOG_READING</a></code></td>
 <td class="colLast"><code>"source.restartedLogReading"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.SOURCE_SHIPPED_BATCHES">
 <!--   -->
 </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/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_BATCHES">SOURCE_SHIPPED_BATCHES</a></code></td>
 <td class="colLast"><code>"source.shippedBatches"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.SOURCE_SHIPPED_BYTES">
 <!--   -->
 </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/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_BYTES">SOURCE_SHIPPED_BYTES</a></code></td>
 <td class="colLast"><code>"source.shippedBytes"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.SOURCE_SHIPPED_HFILES">
 <!--   -->
 </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/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_HFILES">SOURCE_SHIPPED_HFILES</a></code></td>
 <td class="colLast"><code>"source.shippedHFiles"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.SOURCE_SHIPPED_KBS">
 <!--   -->
 </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/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_KBS">SOURCE_SHIPPED_KBS</a></code></td>
 <td class="colLast"><code>"source.shippedKBs"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.SOURCE_SHIPPED_OPS">
 <!--   -->
 </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/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SHIPPED_OPS">SOURCE_SHIPPED_OPS</a></code></td>
 <td class="colLast"><code>"source.shippedOps"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.SOURCE_SIZE_OF_HFILE_REFS_QUEUE">
 <!--   -->
 </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/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SIZE_OF_HFILE_REFS_QUEUE">SOURCE_SIZE_OF_HFILE_REFS_QUEUE</a></code></td>
 <td class="colLast"><code>"source.sizeOfHFileRefsQueue"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.SOURCE_SIZE_OF_LOG_QUEUE">
 <!--   -->
 </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/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_SIZE_OF_LOG_QUEUE">SOURCE_SIZE_OF_LOG_QUEUE</a></code></td>
 <td class="colLast"><code>"source.sizeOfLogQueue"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.SOURCE_UNCLEANLY_CLOSED_IGNORED_IN_BYTES">
 <!--   -->
 </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/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_UNCLEANLY_CLOSED_IGNORED_IN_BYTES">SOURCE_UNCLEANLY_CLOSED_IGNORED_IN_BYTES</a></code></td>
 <td class="colLast"><code>"source.ignoredUncleanlyClosedLogContentsInBytes"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.SOURCE_UNCLEANLY_CLOSED_LOGS">
 <!--   -->
 </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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 87d16d8..042af76 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -30387,6 +30387,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#FailedProcedure-long-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.util.NonceKey-java.io.IOException-">FailedProcedure(long, String, User, NonceKey, IOException)</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.FailedProcedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#failedRecoveryQueue">failedRecoveryQueue</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationGlobalSourceSource</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">FailedRemoteDispatchException</span></a> - Exception in <a href="org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></dt>
 <dd>
 <div class="block">Used internally signaling failed queue of a remote procedure
@@ -49075,6 +49077,10 @@
 <div class="block">Loop through the RS log timestamp map for the tables, for each RS, find the min timestamp value
  for the RS among the tables.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getRsNode-org.apache.hadoop.hbase.ServerName-">getRsNode(ServerName)</a></span> - Method in interface org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a></dt>
+<dd>
+<div class="block">Get full znode name for given region server</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#getRsNode-org.apache.hadoop.hbase.ServerName-">getRsNode(ServerName)</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html" title="class in org.apache.hadoop.hbase.replication">ZKReplicationQueueStorage</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRSRpcServices--">getRSRpcServices()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></dt>
@@ -60403,6 +60409,14 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetricsMasterSourceImpl.html#incRequests-long-">incRequests(long)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetricsMasterSourceImpl.html" title="class in org.apache.hadoop.hbase.master">MetricsMasterSourceImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html#incrFailedRecoveryQueue--">incrFailedRecoveryQueue()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationGlobalSourceSource</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#incrFailedRecoveryQueue--">incrFailedRecoveryQueue()</a></span> - Method in interface org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html#incrFailedRecoveryQueue--">incrFailedRecoveryQueue()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSourceImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#incrFailedRecoveryQueue--">incrFailedRecoveryQueue()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/MetricsConnection.html#incrHedgedReadOps--">incrHedgedReadOps()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/MetricsConnection.html" title="class in org.apache.hadoop.hbase.client">MetricsConnection</a></dt>
 <dd>
 <div class="block">Increment the number of hedged read that have occurred.</div>
@@ -108460,6 +108474,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_COMPLETED_RECOVERY_QUEUES">SOURCE_COMPLETED_RECOVERY_QUEUES</a></span> - Static variable in interface org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_FAILED_RECOVERY_QUEUES">SOURCE_FAILED_RECOVERY_QUEUES</a></span> - Static variable in interface org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/SyncTable.html#SOURCE_HASH_DIR_CONF_KEY">SOURCE_HASH_DIR_CONF_KEY</a></span> - Static variable in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/SyncTable.html" title="class in org.apache.hadoop.hbase.mapreduce">SyncTable</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html#SOURCE_LOG_EDITS_FILTERED">SOURCE_LOG_EDITS_FILTERED</a></span> - Static variable in interface org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a></dt>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
index bed7a57..ac5f761 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
@@ -5905,10 +5905,16 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
             <a href="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)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ZKReplicationQueueStorage.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#getRsNode-org.apache.hadoop.hbase.ServerName-">getRsNode</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ReplicationQueueStorage.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getRsNode-org.apache.hadoop.hbase.ServerName-">getRsNode</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
+<div class="block">Get full znode name for given region server</div>
+</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ZKReplicationQueueStorage.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#getRsNode-org.apache.hadoop.hbase.ServerName-">getRsNode</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationQueueStorage.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getWALPosition-org.apache.hadoop.hbase.ServerName-java.lang.String-java.lang.String-">getWALPosition</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId,
@@ -5916,52 +5922,52 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <div class="block">Get the current position for a specific WAL in a given queue for a given regionserver.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><span class="typeNameLabel">ZKReplicationQueueStorage.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#getWALPosition-org.apache.hadoop.hbase.ServerName-java.lang.String-java.lang.String-">getWALPosition</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId,
               <a href="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;fileName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="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;</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationQueueStorage.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getWALsInQueue-org.apache.hadoop.hbase.ServerName-java.lang.String-">getWALsInQueue</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId)</code>
 <div class="block">Get a list of all WALs in the given queue on the given region server.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/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;</code></td>
 <td class="colLast"><span class="typeNameLabel">ZKReplicationQueueStorage.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#getWALsInQueue-org.apache.hadoop.hbase.ServerName-java.lang.String-">getWALsInQueue</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/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;</code></td>
 <td class="colLast"><span class="typeNameLabel">ZKReplicationQueueStorage.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#getWALsInQueue0-org.apache.hadoop.hbase.ServerName-java.lang.String-">getWALsInQueue0</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationQueueStorage.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removeQueue-org.apache.hadoop.hbase.ServerName-java.lang.String-">removeQueue</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId)</code>
 <div class="block">Remove a replication queue for a given regionserver.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ZKReplicationQueueStorage.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#removeQueue-org.apache.hadoop.hbase.ServerName-java.lang.String-">removeQueue</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationQueueStorage.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removeReplicatorIfQueueIsEmpty-org.apache.hadoop.hbase.ServerName-">removeReplicatorIfQueueIsEmpty</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Remove the record of region server if the queue is empty.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ZKReplicationQueueStorage.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#removeReplicatorIfQueueIsEmpty-org.apache.hadoop.hbase.ServerName-">removeReplicatorIfQueueIsEmpty</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationQueueStorage.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removeWAL-org.apache.hadoop.hbase.ServerName-java.lang.String-java.lang.String-">removeWAL</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId,
@@ -5969,13 +5975,13 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <div class="block">Remove an WAL file from the given queue for a given regionserver.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ZKReplicationQueueStorage.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#removeWAL-org.apache.hadoop.hbase.ServerName-java.lang.String-java.lang.String-">removeWAL</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId,
          <a href="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;fileName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationQueueStorage.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#setWALPosition-org.apache.hadoop.hbase.ServerName-java.lang.String-java.lang.String-long-java.util.Map-">setWALPosition</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId,
@@ -5985,7 +5991,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <div class="block">Set the current position for a specific WAL in a given queue for a given regionserver.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ZKReplicationQueueStorage.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#setWALPosition-org.apache.hadoop.hbase.ServerName-java.lang.String-java.lang.String-long-java.util.Map-">setWALPosition</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/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 a94b85a..037db96 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -555,24 +555,24 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/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/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/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/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/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/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
 </ul>
 </li>
 </ul>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/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 6091b95..853a1fa 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -274,11 +274,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.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/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.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/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/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 b08012e..91a2ed4 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -353,9 +353,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/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/37b8a04a/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 4335db6..deb19ba 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -294,9 +294,9 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.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/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/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 98b41d1..e392df8 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -216,8 +216,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>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
 </ul>


[25/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/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 ea7b4ec..5bc968f 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -437,19 +437,19 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/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/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/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/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/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 e0ffe44..4acf265 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -229,13 +229,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/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/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/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/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/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/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/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 54fad66..ef0b176 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -710,20 +710,20 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<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/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/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.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html b/devapidocs/org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html
index e8e3d35..955b7a2 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6};
+var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -199,6 +199,12 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/replic
 </td>
 </tr>
 <tr id="i11" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getRsNode-org.apache.hadoop.hbase.ServerName-">getRsNode</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
+<div class="block">Get full znode name for given region server</div>
+</td>
+</tr>
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getWALPosition-org.apache.hadoop.hbase.ServerName-java.lang.String-java.lang.String-">getWALPosition</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId,
@@ -206,53 +212,53 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/replic
 <div class="block">Get the current position for a specific WAL in a given queue for a given regionserver.</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="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;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getWALsInQueue-org.apache.hadoop.hbase.ServerName-java.lang.String-">getWALsInQueue</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId)</code>
 <div class="block">Get a list of all WALs in the given queue on the given region server.</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removeHFileRefs-java.lang.String-java.util.List-">removeHFileRefs</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="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)</code>
 <div class="block">Remove hfile references from the queue.</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removeLastSequenceIds-java.lang.String-">removeLastSequenceIds</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId)</code>
 <div class="block">Remove all the max sequence id record for the given peer.</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removeLastSequenceIds-java.lang.String-java.util.List-">removeLastSequenceIds</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="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;encodedRegionNames)</code>
 <div class="block">Remove the max sequence id record for the given peer and regions.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removePeerFromHFileRefs-java.lang.String-">removePeerFromHFileRefs</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId)</code>
 <div class="block">Remove a peer from hfile reference queue.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removeQueue-org.apache.hadoop.hbase.ServerName-java.lang.String-">removeQueue</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId)</code>
 <div class="block">Remove a replication queue for a given regionserver.</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removeReplicatorIfQueueIsEmpty-org.apache.hadoop.hbase.ServerName-">removeReplicatorIfQueueIsEmpty</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Remove the record of region server if the queue is empty.</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removeWAL-org.apache.hadoop.hbase.ServerName-java.lang.String-java.lang.String-">removeWAL</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId,
@@ -260,14 +266,14 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/replic
 <div class="block">Remove an WAL file from the given queue for a given regionserver.</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#setLastSequenceIds-java.lang.String-java.util.Map-">setLastSequenceIds</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="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;lastSeqIds)</code>
 <div class="block">Set the max sequence id of a bunch of regions for a given peer.</div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#setWALPosition-org.apache.hadoop.hbase.ServerName-java.lang.String-java.lang.String-long-java.util.Map-">setWALPosition</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId,
@@ -705,7 +711,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/replic
 <a name="getAllHFileRefs--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>getAllHFileRefs</h4>
 <pre><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/ReplicationQueueStorage.html#line.204">getAllHFileRefs</a>()
@@ -719,6 +725,22 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/replic
 </dl>
 </li>
 </ul>
+<a name="getRsNode-org.apache.hadoop.hbase.ServerName-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getRsNode</h4>
+<pre><a href="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/ReplicationQueueStorage.html#line.211">getRsNode</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<div class="block">Get full znode name for given region server</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>serverName</code> - the name of the region server</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>full znode name</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>


[16/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/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 e984063..083ab07 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
@@ -53,1074 +53,1082 @@
 <span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
 <span class="sourceLineNo">046</span>import org.apache.hadoop.fs.FileSystem;<a name="line.46"></a>
 <span class="sourceLineNo">047</span>import org.apache.hadoop.fs.Path;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.HConstants;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.Server;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.ServerName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.TableName;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.replication.ReplicationListener;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.replication.ReplicationPeer;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationPeer.PeerState;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.replication.ReplicationPeerImpl;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.replication.ReplicationPeers;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.replication.ReplicationQueueInfo;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.replication.ReplicationTracker;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.wal.SyncReplicationWALProvider;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.zookeeper.KeeperException;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.slf4j.Logger;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.slf4j.LoggerFactory;<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>/**<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * This class is responsible to manage all the replication sources. There are two classes of<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * sources:<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * &lt;ul&gt;<a name="line.78"></a>
-<span class="sourceLineNo">079</span> * &lt;li&gt;Normal sources are persistent and one per peer cluster&lt;/li&gt;<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * &lt;li&gt;Old sources are recovered from a failed region server and our only goal is to finish<a name="line.80"></a>
-<span class="sourceLineNo">081</span> * replicating the WAL queue it had&lt;/li&gt;<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * &lt;/ul&gt;<a name="line.82"></a>
-<span class="sourceLineNo">083</span> * &lt;p&gt;<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * When a region server dies, this class uses a watcher to get notified and it tries to grab a lock<a name="line.84"></a>
-<span class="sourceLineNo">085</span> * in order to transfer all the queues in a local old source.<a name="line.85"></a>
-<span class="sourceLineNo">086</span> * &lt;p&gt;<a name="line.86"></a>
-<span class="sourceLineNo">087</span> * Synchronization specification:<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * &lt;ul&gt;<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * &lt;li&gt;No need synchronized on {@link #sources}. {@link #sources} is a ConcurrentHashMap and there<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * is a Lock for peer id in {@link PeerProcedureHandlerImpl}. So there is no race for peer<a name="line.90"></a>
-<span class="sourceLineNo">091</span> * operations.&lt;/li&gt;<a name="line.91"></a>
-<span class="sourceLineNo">092</span> * &lt;li&gt;Need synchronized on {@link #walsById}. There are four methods which modify it,<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * {@link #addPeer(String)}, {@link #removePeer(String)},<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * {@link #cleanOldLogs(String, boolean, ReplicationSourceInterface)} and {@link #preLogRoll(Path)}.<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * {@link #walsById} is a ConcurrentHashMap and there is a Lock for peer id in<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * {@link PeerProcedureHandlerImpl}. So there is no race between {@link #addPeer(String)} and<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * {@link #removePeer(String)}. {@link #cleanOldLogs(String, boolean, ReplicationSourceInterface)}<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * is called by {@link ReplicationSourceInterface}. So no race with {@link #addPeer(String)}.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * {@link #removePeer(String)} will terminate the {@link ReplicationSourceInterface} firstly, then<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * remove the wals from {@link #walsById}. So no race with {@link #removePeer(String)}. The only<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * case need synchronized is {@link #cleanOldLogs(String, boolean, ReplicationSourceInterface)} and<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * {@link #preLogRoll(Path)}.&lt;/li&gt;<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * &lt;li&gt;No need synchronized on {@link #walsByIdRecoveredQueues}. There are three methods which<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * modify it, {@link #removePeer(String)} ,<a name="line.104"></a>
-<span class="sourceLineNo">105</span> * {@link #cleanOldLogs(String, boolean, ReplicationSourceInterface)} and<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()}.<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * {@link #cleanOldLogs(String, boolean, ReplicationSourceInterface)} is called by<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * {@link ReplicationSourceInterface}. {@link #removePeer(String)} will terminate the<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * {@link ReplicationSourceInterface} firstly, then remove the wals from<a name="line.109"></a>
-<span class="sourceLineNo">110</span> * {@link #walsByIdRecoveredQueues}. And {@link ReplicationSourceManager.NodeFailoverWorker#run()}<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * will add the wals to {@link #walsByIdRecoveredQueues} firstly, then start up a<a name="line.111"></a>
-<span class="sourceLineNo">112</span> * {@link ReplicationSourceInterface}. So there is no race here. For<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()} and {@link #removePeer(String)}, there<a name="line.113"></a>
-<span class="sourceLineNo">114</span> * is already synchronized on {@link #oldsources}. So no need synchronized on<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * {@link #walsByIdRecoveredQueues}.&lt;/li&gt;<a name="line.115"></a>
-<span class="sourceLineNo">116</span> * &lt;li&gt;Need synchronized on {@link #latestPaths} to avoid the new open source miss new log.&lt;/li&gt;<a name="line.116"></a>
-<span class="sourceLineNo">117</span> * &lt;li&gt;Need synchronized on {@link #oldsources} to avoid adding recovered source for the<a name="line.117"></a>
-<span class="sourceLineNo">118</span> * to-be-removed peer.&lt;/li&gt;<a name="line.118"></a>
-<span class="sourceLineNo">119</span> * &lt;/ul&gt;<a name="line.119"></a>
-<span class="sourceLineNo">120</span> */<a name="line.120"></a>
-<span class="sourceLineNo">121</span>@InterfaceAudience.Private<a name="line.121"></a>
-<span class="sourceLineNo">122</span>public class ReplicationSourceManager implements ReplicationListener {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSourceManager.class);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  // all the sources that read this RS's logs and every peer only has one replication source<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  private final ConcurrentMap&lt;String, ReplicationSourceInterface&gt; sources;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  // List of all the sources we got from died RSs<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private final List&lt;ReplicationSourceInterface&gt; oldsources;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  private final ReplicationQueueStorage queueStorage;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private final ReplicationTracker replicationTracker;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private final ReplicationPeers replicationPeers;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  // UUID for this cluster<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private final UUID clusterId;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  // All about stopping<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private final Server server;<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  // All logs we are currently tracking<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  // Index structure of the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  // For normal replication source, the peer id is same with the queue id<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsById;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  // Logs for recovered sources we are currently tracking<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  // the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  // For recovered source, the queue id's format is peer_id-servername-*<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsByIdRecoveredQueues;<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final SyncReplicationPeerMappingManager syncReplicationPeerMappingManager;<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  private final Configuration conf;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private final FileSystem fs;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  // The paths to the latest log of each wal group, for new coming peers<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  private final Set&lt;Path&gt; latestPaths;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  // Path to the wals directories<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private final Path logDir;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  // Path to the wal archive<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  private final Path oldLogDir;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  private final WALFileLengthProvider walFileLengthProvider;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  // The number of ms that we wait before moving znodes, HBASE-3596<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  private final long sleepBeforeFailover;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  // Homemade executer service for replication<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  private final ThreadPoolExecutor executor;<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  private final boolean replicationForBulkLoadDataEnabled;<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  private AtomicLong totalBufferUsed = new AtomicLong();<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  // How long should we sleep for each retry when deleting remote wal files for sync replication<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  // peer.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  private final long sleepForRetries;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  // Maximum number of retries before taking bold actions when deleting remote wal files for sync<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  // replication peer.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  private final int maxRetriesMultiplier;<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>  /**<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * Creates a replication manager and sets the watch on all the other registered region servers<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @param queueStorage the interface for manipulating replication queues<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @param replicationPeers<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * @param replicationTracker<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * @param conf the configuration to use<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * @param server the server for this region server<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * @param fs the file system to use<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * @param logDir the directory that contains all wal directories of live RSs<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * @param oldLogDir the directory where old logs are archived<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * @param clusterId<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  public ReplicationSourceManager(ReplicationQueueStorage queueStorage,<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      ReplicationPeers replicationPeers, ReplicationTracker replicationTracker, Configuration conf,<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      Server server, FileSystem fs, Path logDir, Path oldLogDir, UUID clusterId,<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      WALFileLengthProvider walFileLengthProvider,<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      SyncReplicationPeerMappingManager syncReplicationPeerMappingManager) throws IOException {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.sources = new ConcurrentHashMap&lt;&gt;();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.queueStorage = queueStorage;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.replicationPeers = replicationPeers;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    this.replicationTracker = replicationTracker;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    this.server = server;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    this.walsById = new ConcurrentHashMap&lt;&gt;();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    this.walsByIdRecoveredQueues = new ConcurrentHashMap&lt;&gt;();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    this.oldsources = new ArrayList&lt;&gt;();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    this.conf = conf;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    this.fs = fs;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    this.logDir = logDir;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    this.oldLogDir = oldLogDir;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    // 30 seconds<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.sleepBeforeFailover = conf.getLong("replication.sleep.before.failover", 30000);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    this.clusterId = clusterId;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    this.walFileLengthProvider = walFileLengthProvider;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    this.syncReplicationPeerMappingManager = syncReplicationPeerMappingManager;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    this.replicationTracker.registerListener(this);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    // It's preferable to failover 1 RS at a time, but with good zk servers<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // more could be processed at the same time.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    int nbWorkers = conf.getInt("replication.executor.workers", 1);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    // use a short 100ms sleep since this could be done inline with a RS startup<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    // even if we fail, other region servers can take care of it<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    this.executor = new ThreadPoolExecutor(nbWorkers, nbWorkers, 100, TimeUnit.MILLISECONDS,<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        new LinkedBlockingQueue&lt;&gt;());<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    ThreadFactoryBuilder tfb = new ThreadFactoryBuilder();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    tfb.setNameFormat("ReplicationExecutor-%d");<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    tfb.setDaemon(true);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    this.executor.setThreadFactory(tfb.build());<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    this.latestPaths = new HashSet&lt;Path&gt;();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    this.replicationForBulkLoadDataEnabled = conf.getBoolean(<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      HConstants.REPLICATION_BULKLOAD_ENABLE_KEY, HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    this.sleepForRetries = this.conf.getLong("replication.source.sync.sleepforretries", 1000);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    this.maxRetriesMultiplier =<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      this.conf.getInt("replication.source.sync.maxretriesmultiplier", 60);<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>  /**<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * Adds a normal source per registered peer cluster and tries to process all old region server wal<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * queues<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * &lt;p&gt;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * The returned future is for adoptAbandonedQueues task.<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  Future&lt;?&gt; init() throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    for (String id : this.replicationPeers.getAllPeerIds()) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      addSource(id);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      if (replicationForBulkLoadDataEnabled) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        // Check if peer exists in hfile-refs queue, if not add it. This can happen in the case<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        // when a peer was added before replication for bulk loaded data was enabled.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        throwIOExceptionWhenFail(() -&gt; this.queueStorage.addPeerToHFileRefs(id));<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>    return this.executor.submit(this::adoptAbandonedQueues);<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>  private void adoptAbandonedQueues() {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    List&lt;ServerName&gt; currentReplicators = null;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    try {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      currentReplicators = queueStorage.getListOfReplicators();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    } catch (ReplicationException e) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      server.abort("Failed to get all replicators", e);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      return;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    if (currentReplicators == null || currentReplicators.isEmpty()) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      return;<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    List&lt;ServerName&gt; otherRegionServers = replicationTracker.getListOfRegionServers().stream()<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        .map(ServerName::valueOf).collect(Collectors.toList());<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    LOG.info(<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      "Current list of replicators: " + currentReplicators + " other RSs: " + otherRegionServers);<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>    // Look if there's anything to process after a restart<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    for (ServerName rs : currentReplicators) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      if (!otherRegionServers.contains(rs)) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        transferQueues(rs);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>  /**<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * &lt;ol&gt;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * &lt;li&gt;Add peer to replicationPeers&lt;/li&gt;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * &lt;li&gt;Add the normal source and related replication queue&lt;/li&gt;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * &lt;li&gt;Add HFile Refs&lt;/li&gt;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * &lt;/ol&gt;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * @param peerId the id of replication peer<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public void addPeer(String peerId) throws IOException {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    boolean added = false;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      added = this.replicationPeers.addPeer(peerId);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    } catch (ReplicationException e) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      throw new IOException(e);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    if (added) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      addSource(peerId);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      if (replicationForBulkLoadDataEnabled) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        throwIOExceptionWhenFail(() -&gt; this.queueStorage.addPeerToHFileRefs(peerId));<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * &lt;ol&gt;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * &lt;li&gt;Remove peer for replicationPeers&lt;/li&gt;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * &lt;li&gt;Remove all the recovered sources for the specified id and related replication queues&lt;/li&gt;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * &lt;li&gt;Remove the normal source and related replication queue&lt;/li&gt;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   * &lt;li&gt;Remove HFile Refs&lt;/li&gt;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * &lt;/ol&gt;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @param peerId the id of the replication peer<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  public void removePeer(String peerId) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    ReplicationPeer peer = replicationPeers.removePeer(peerId);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    String terminateMessage = "Replication stream was removed by a user";<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    List&lt;ReplicationSourceInterface&gt; oldSourcesToDelete = new ArrayList&lt;&gt;();<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    // synchronized on oldsources to avoid adding recovered source for the to-be-removed peer<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    // see NodeFailoverWorker.run<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    synchronized (this.oldsources) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      // First close all the recovered sources for this peer<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      for (ReplicationSourceInterface src : oldsources) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        if (peerId.equals(src.getPeerId())) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>          oldSourcesToDelete.add(src);<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>      for (ReplicationSourceInterface src : oldSourcesToDelete) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        src.terminate(terminateMessage);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        removeRecoveredSource(src);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    LOG.info(<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      "Number of deleted recovered sources for " + peerId + ": " + oldSourcesToDelete.size());<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    // Now close the normal source for this peer<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    ReplicationSourceInterface srcToRemove = this.sources.get(peerId);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    if (srcToRemove != null) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      srcToRemove.terminate(terminateMessage);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      removeSource(srcToRemove);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    } else {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      // This only happened in unit test TestReplicationSourceManager#testPeerRemovalCleanup<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      // Delete queue from storage and memory and queue id is same with peer id for normal<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      // source<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      deleteQueue(peerId);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.walsById.remove(peerId);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    ReplicationPeerConfig peerConfig = peer.getPeerConfig();<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    if (peerConfig.isSyncReplication()) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      syncReplicationPeerMappingManager.remove(peerId, peerConfig);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    // Remove HFile Refs<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    abortWhenFail(() -&gt; this.queueStorage.removePeerFromHFileRefs(peerId));<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * Factory method to create a replication source<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * @param queueId the id of the replication queue<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @return the created source<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  private ReplicationSourceInterface createSource(String queueId, ReplicationPeer replicationPeer)<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      throws IOException {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    ReplicationSourceInterface src = ReplicationSourceFactory.create(conf, queueId);<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    MetricsSource metrics = new MetricsSource(queueId);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    // init replication source<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    src.init(conf, fs, this, queueStorage, replicationPeer, server, queueId, clusterId,<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      walFileLengthProvider, metrics);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    return src;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>  /**<a name="line.356"></a>
-<span class="sourceLineNo">357</span>   * Add a normal source for the given peer on this region server. Meanwhile, add new replication<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   * queue to storage. For the newly added peer, we only need to enqueue the latest log of each wal<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * group and do replication<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * @param peerId the id of the replication peer<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * @return the source that was created<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  @VisibleForTesting<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  ReplicationSourceInterface addSource(String peerId) throws IOException {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    ReplicationPeer peer = replicationPeers.getPeer(peerId);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    ReplicationSourceInterface src = createSource(peerId, peer);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    // synchronized on latestPaths to avoid missing the new log<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    synchronized (this.latestPaths) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      this.sources.put(peerId, src);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      Map&lt;String, NavigableSet&lt;String&gt;&gt; walsByGroup = new HashMap&lt;&gt;();<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      this.walsById.put(peerId, walsByGroup);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      // Add the latest wal to that source's queue<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      if (this.latestPaths.size() &gt; 0) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        for (Path logPath : latestPaths) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          String name = logPath.getName();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          String walPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(name);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          NavigableSet&lt;String&gt; logs = new TreeSet&lt;&gt;();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          logs.add(name);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          walsByGroup.put(walPrefix, logs);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>          // Abort RS and throw exception to make add peer failed<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          abortAndThrowIOExceptionWhenFail(<a name="line.381"></a>
-<span class="sourceLineNo">382</span>            () -&gt; this.queueStorage.addWAL(server.getServerName(), peerId, name));<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          src.enqueueLog(logPath);<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>    }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    ReplicationPeerConfig peerConfig = peer.getPeerConfig();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    if (peerConfig.isSyncReplication()) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      syncReplicationPeerMappingManager.add(peer.getId(), peerConfig);<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    src.startup();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    return src;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>  /**<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * &lt;p&gt;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * This is used when we transit a sync replication peer to {@link SyncReplicationState#STANDBY}.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * &lt;/p&gt;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * &lt;p&gt;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * When transiting to {@link SyncReplicationState#STANDBY}, we can remove all the pending wal<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * files for a replication peer as we do not need to replicate them any more. And this is<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * necessary, otherwise when we transit back to {@link SyncReplicationState#DOWNGRADE_ACTIVE}<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * later, the stale data will be replicated again and cause inconsistency.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * &lt;/p&gt;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * &lt;p&gt;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * See HBASE-20426 for more details.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   * &lt;/p&gt;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   * @param peerId the id of the sync replication peer<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   */<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  public void drainSources(String peerId) throws IOException, ReplicationException {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    String terminateMessage = "Sync replication peer " + peerId +<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      " is transiting to STANDBY. Will close the previous replication source and open a new one";<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    ReplicationPeer peer = replicationPeers.getPeer(peerId);<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    assert peer.getPeerConfig().isSyncReplication();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    ReplicationSourceInterface src = createSource(peerId, peer);<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // synchronized here to avoid race with preLogRoll where we add new log to source and also<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    // walsById.<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    ReplicationSourceInterface toRemove;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    Map&lt;String, NavigableSet&lt;String&gt;&gt; wals = new HashMap&lt;&gt;();<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    synchronized (latestPaths) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      toRemove = sources.put(peerId, src);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      if (toRemove != null) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        LOG.info("Terminate replication source for " + toRemove.getPeerId());<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        toRemove.terminate(terminateMessage);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        toRemove.getSourceMetrics().clear();<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      // Here we make a copy of all the remaining wal files and then delete them from the<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      // replication queue storage after releasing the lock. It is not safe to just remove the old<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      // map from walsById since later we may fail to delete them from the replication queue<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      // storage, and when we retry next time, we can not know the wal files that need to be deleted<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      // from the replication queue storage.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      walsById.get(peerId).forEach((k, v) -&gt; wals.put(k, new TreeSet&lt;&gt;(v)));<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    LOG.info("Startup replication source for " + src.getPeerId());<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    src.startup();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    for (NavigableSet&lt;String&gt; walsByGroup : wals.values()) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      for (String wal : walsByGroup) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        queueStorage.removeWAL(server.getServerName(), peerId, wal);<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>    synchronized (walsById) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      Map&lt;String, NavigableSet&lt;String&gt;&gt; oldWals = walsById.get(peerId);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      wals.forEach((k, v) -&gt; {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        NavigableSet&lt;String&gt; walsByGroup = oldWals.get(k);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        if (walsByGroup != null) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>          walsByGroup.removeAll(v);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      });<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    }<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    // synchronized on oldsources to avoid race with NodeFailoverWorker. Since NodeFailoverWorker is<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    // a background task, we will delete the file from replication queue storage under the lock to<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    // simplify the logic.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    synchronized (this.oldsources) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      for (Iterator&lt;ReplicationSourceInterface&gt; iter = oldsources.iterator(); iter.hasNext();) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        ReplicationSourceInterface oldSource = iter.next();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        if (oldSource.getPeerId().equals(peerId)) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          String queueId = oldSource.getQueueId();<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          oldSource.terminate(terminateMessage);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          oldSource.getSourceMetrics().clear();<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          queueStorage.removeQueue(server.getServerName(), queueId);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          walsByIdRecoveredQueues.remove(queueId);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>          iter.remove();<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<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>   * Close the previous replication sources of this peer id and open new sources to trigger the new<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * replication state changes or new replication config changes. Here we don't need to change<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * replication queue storage and only to enqueue all logs to the new replication source<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * @param peerId the id of the replication peer<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
-<span class="sourceLineNo">474</span>  public void refreshSources(String peerId) throws IOException {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    String terminateMessage = "Peer " + peerId +<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      " state or config changed. Will close the previous replication source and open a new one";<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    ReplicationPeer peer = replicationPeers.getPeer(peerId);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    ReplicationSourceInterface src = createSource(peerId, peer);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // synchronized on latestPaths to avoid missing the new log<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    synchronized (this.latestPaths) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      ReplicationSourceInterface toRemove = this.sources.put(peerId, src);<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (toRemove != null) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        LOG.info("Terminate replication source for " + toRemove.getPeerId());<a name="line.483"></a>
-<span class="sourceLineNo">484</span>        toRemove.terminate(terminateMessage);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      }<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      for (NavigableSet&lt;String&gt; walsByGroup : walsById.get(peerId).values()) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        walsByGroup.forEach(wal -&gt; src.enqueueLog(new Path(this.logDir, wal)));<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    LOG.info("Startup replication source for " + src.getPeerId());<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    src.startup();<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>    List&lt;ReplicationSourceInterface&gt; toStartup = new ArrayList&lt;&gt;();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    // synchronized on oldsources to avoid race with NodeFailoverWorker<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    synchronized (this.oldsources) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      List&lt;String&gt; previousQueueIds = new ArrayList&lt;&gt;();<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      for (ReplicationSourceInterface oldSource : this.oldsources) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        if (oldSource.getPeerId().equals(peerId)) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          previousQueueIds.add(oldSource.getQueueId());<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          oldSource.terminate(terminateMessage);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>          this.oldsources.remove(oldSource);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      for (String queueId : previousQueueIds) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        ReplicationSourceInterface replicationSource = createSource(queueId, peer);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        this.oldsources.add(replicationSource);<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        for (SortedSet&lt;String&gt; walsByGroup : walsByIdRecoveredQueues.get(queueId).values()) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          walsByGroup.forEach(wal -&gt; src.enqueueLog(new Path(wal)));<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        toStartup.add(replicationSource);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    }<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    for (ReplicationSourceInterface replicationSource : toStartup) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      replicationSource.startup();<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>   * Clear the metrics and related replication queue of the specified old source<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * @param src source to clear<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  private boolean removeRecoveredSource(ReplicationSourceInterface src) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    if (!this.oldsources.remove(src)) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      return false;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    LOG.info("Done with the recovered queue {}", src.getQueueId());<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    // Delete queue from storage and memory<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    deleteQueue(src.getQueueId());<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    this.walsByIdRecoveredQueues.remove(src.getQueueId());<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    return true;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>  }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>  void finishRecoveredSource(ReplicationSourceInterface src) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    synchronized (oldsources) {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (!removeRecoveredSource(src)) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        return;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      }<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    LOG.info("Finished recovering queue {} with the following stats: {}", src.getQueueId(),<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      src.getStats());<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>  /**<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   * Clear the metrics and related replication queue of the specified old source<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * @param src source to clear<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   */<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  void removeSource(ReplicationSourceInterface src) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    LOG.info("Done with the queue " + src.getQueueId());<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    this.sources.remove(src.getPeerId());<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    // Delete queue from storage and memory<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    deleteQueue(src.getQueueId());<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    this.walsById.remove(src.getQueueId());<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>  }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>  /**<a name="line.556"></a>
-<span class="sourceLineNo">557</span>   * Delete a complete queue of wals associated with a replication source<a name="line.557"></a>
-<span class="sourceLineNo">558</span>   * @param queueId the id of replication queue to delete<a name="line.558"></a>
-<span class="sourceLineNo">559</span>   */<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  private void deleteQueue(String queueId) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    abortWhenFail(() -&gt; this.queueStorage.removeQueue(server.getServerName(), queueId));<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>  @FunctionalInterface<a name="line.564"></a>
-<span class="sourceLineNo">565</span>  private interface ReplicationQueueOperation {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    void exec() throws ReplicationException;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>  /**<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   * Refresh replication source will terminate the old source first, then the source thread will be<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * interrupted. Need to handle it instead of abort the region server.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   */<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  private void interruptOrAbortWhenFail(ReplicationQueueOperation op) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    try {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      op.exec();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    } catch (ReplicationException e) {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      if (e.getCause() != null &amp;&amp; e.getCause() instanceof KeeperException.SystemErrorException<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          &amp;&amp; e.getCause().getCause() != null &amp;&amp; e.getCause()<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          .getCause() instanceof InterruptedException) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>        throw new RuntimeException(<a name="line.580"></a>
-<span class="sourceLineNo">581</span>            "Thread is interrupted, the replication source may be terminated");<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      }<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      server.abort("Failed to operate on replication queue", e);<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><a name="line.586"></a>
-<span class="sourceLineNo">587</span>  private void abortWhenFail(ReplicationQueueOperation op) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    try {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      op.exec();<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    } catch (ReplicationException e) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      server.abort("Failed to operate on replication queue", e);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    }<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  private void throwIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    try {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      op.exec();<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    } catch (ReplicationException e) {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      throw new IOException(e);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    }<a name="line.600"></a>
-<span class="sourceLineNo">601</span>  }<a name="line.601"></a>
-<span class="sourceLineNo">602</span><a name="line.602"></a>
-<span class="sourceLineNo">603</span>  private void abortAndThrowIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    try {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      op.exec();<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    } catch (ReplicationException e) {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      server.abort("Failed to operate on replication queue", e);<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      throw new IOException(e);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    }<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>  /**<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * This method will log the current position to storage. And also clean old logs from the<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * replication queue.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @param source the replication source<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * @param entryBatch the wal entry batch we just shipped<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  public void logPositionAndCleanOldLogs(ReplicationSourceInterface source,<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      WALEntryBatch entryBatch) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    String fileName = entryBatch.getLastWalPath().getName();<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    interruptOrAbortWhenFail(() -&gt; this.queueStorage.setWALPosition(server.getServerName(),<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      source.getQueueId(), fileName, entryBatch.getLastWalPosition(), entryBatch.getLastSeqIds()));<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    cleanOldLogs(fileName, entryBatch.isEndOfFile(), source);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  }<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span>  /**<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * Cleans a log file and all older logs from replication queue. Called when we are sure that a log<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * file is closed and has no more entries.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * @param log Path to the log<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * @param inclusive whether we should also remove the given log file<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   * @param source the replication source<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   */<a name="line.632"></a>
-<span class="sourceLineNo">633</span>  @VisibleForTesting<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  void cleanOldLogs(String log, boolean inclusive, ReplicationSourceInterface source) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(log);<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    if (source.isRecovered()) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      NavigableSet&lt;String&gt; wals = walsByIdRecoveredQueues.get(source.getQueueId()).get(logPrefix);<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      if (wals != null) {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        NavigableSet&lt;String&gt; walsToRemove = wals.headSet(log, inclusive);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        if (walsToRemove.isEmpty()) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>          return;<a name="line.641"></a>
-<span class="sourceLineNo">642</span>        }<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        cleanOldLogs(walsToRemove, source);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>        walsToRemove.clear();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      }<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    } else {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      NavigableSet&lt;String&gt; wals;<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      NavigableSet&lt;String&gt; walsToRemove;<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      // synchronized on walsById to avoid race with preLogRoll<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      synchronized (this.walsById) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        wals = walsById.get(source.getQueueId()).get(logPrefix);<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        if (wals == null) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>          return;<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        }<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        walsToRemove = wals.headSet(log, inclusive);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>        if (walsToRemove.isEmpty()) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>          return;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>        }<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        walsToRemove = new TreeSet&lt;&gt;(walsToRemove);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      }<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      // cleanOldLogs may spend some time, especially for sync replication where we may want to<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      // remove remote wals as the remote cluster may have already been down, so we do it outside<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      // the lock to avoid block preLogRoll<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      cleanOldLogs(walsToRemove, source);<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      // now let's remove the files in the set<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      synchronized (this.walsById) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        wals.removeAll(walsToRemove);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span>  private void removeRemoteWALs(String peerId, String remoteWALDir, Collection&lt;String&gt; wals)<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      throws IOException {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    Path remoteWALDirForPeer = ReplicationUtils.getPeerRemoteWALDir(remoteWALDir, peerId);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    FileSystem fs = ReplicationUtils.getRemoteWALFileSystem(conf, remoteWALDir);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    for (String wal : wals) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      Path walFile = new Path(remoteWALDirForPeer, wal);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      try {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        if (!fs.delete(walFile, false) &amp;&amp; fs.exists(walFile)) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>          throw new IOException("Can not delete " + walFile);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        }<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      } catch (FileNotFoundException e) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        // Just ignore since this means the file has already been deleted.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>        // The javadoc of the FileSystem.delete methods does not specify the behavior of deleting an<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        // inexistent file, so here we deal with both, i.e, check the return value of the<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        // FileSystem.delete, and also catch FNFE.<a name="line.686"></a>
-<span class="sourceLineNo">687</span>        LOG.debug("The remote wal {} has already been deleted?", walFile, e);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      }<a name="line.688"></a>
-<span class="sourceLineNo">689</span>    }<a name="line.689"></a>
-<span class="sourceLineNo">690</span>  }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>  private void cleanOldLogs(NavigableSet&lt;String&gt; wals, ReplicationSourceInterface source) {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    LOG.debug("Removing {} logs in the list: {}", wals.size(), wals);<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    // The intention here is that, we want to delete the remote wal files ASAP as it may effect the<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    // failover time if you want to transit the remote cluster from S to A. And the infinite retry<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    // is not a problem, as if we can not contact with the remote HDFS cluster, then usually we can<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    // not contact with the HBase cluster either, so the replication will be blocked either.<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    if (source.isSyncReplication()) {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      String peerId = source.getPeerId();<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      String remoteWALDir = source.getPeer().getPeerConfig().getRemoteWALDir();<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      // Filter out the wals need to be removed from the remote directory. Its name should be the<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      // special format, and also, the peer id in its name should match the peer id for the<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      // replication source.<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      List&lt;String&gt; remoteWals = wals.stream().filter(w -&gt; SyncReplicationWALProvider<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        .getSyncReplicationPeerIdFromWALName(w).map(peerId::equals).orElse(false))<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        .collect(Collectors.toList());<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      LOG.debug("Removing {} logs from remote dir {} in the list: {}", remoteWals.size(),<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        remoteWALDir, remoteWals);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      if (!remoteWals.isEmpty()) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        for (int sleepMultiplier = 0;;) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>          try {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>            removeRemoteWALs(peerId, remoteWALDir, remoteWals);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>            break;<a name="line.713"></a>
-<span class="sourceLineNo">714</span>          } catch (IOException e) {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>            LOG.warn("Failed to delete remote wals from remote dir {} for peer {}", remoteWALDir,<a name="line.715"></a>
-<span class="sourceLineNo">716</span>              peerId);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>          }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>          if (!source.isSourceActive()) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>            // skip the following operations<a name="line.719"></a>
-<span class="sourceLineNo">720</span>            return;<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>          if (ReplicationUtils.sleepForRetries("Failed to delete remote wals", sleepForRetries,<a name="line.722"></a>
-<span class="sourceLineNo">723</span>            sleepMultiplier, maxRetriesMultiplier)) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>            sleepMultiplier++;<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          }<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        }<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    }<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    String queueId = source.getQueueId();<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    for (String wal : wals) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      interruptOrAbortWhenFail(<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        () -&gt; this.queueStorage.removeWAL(server.getServerName(), queueId, wal));<a name="line.732"></a>
-<span class="sourceLineNo">733</span>    }<a name="line.733"></a>
-<span class="sourceLineNo">734</span>  }<a name="line.734"></a>
-<span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>  // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.736"></a>
-<span class="sourceLineNo">737</span>  @VisibleForTesting<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  public void preLogRoll(Path newLog) throws IOException {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    String logName = newLog.getName();<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(logName);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    // synchronized on latestPaths to avoid the new open source miss the new log<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    synchronized (this.latestPaths) {<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      // Add log to queue storage<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        // If record log to queue storage failed, abort RS and throw exception to make log roll<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        // failed<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        abortAndThrowIOExceptionWhenFail(<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          () -&gt; this.queueStorage.addWAL(server.getServerName(), source.getQueueId(), logName));<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>      // synchronized on walsById to avoid race with cleanOldLogs<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      synchronized (this.walsById) {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        // Update walsById map<a name="line.753"></a>
-<span class="sourceLineNo">754</span>        for (Map.Entry&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; entry : this.walsById<a name="line.754"></a>
-<span class="sourceLineNo">755</span>          .entrySet()) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>          String peerId = entry.getKey();<a name="line.756"></a>
-<span class="sourceLineNo">757</span>          Map&lt;String, NavigableSet&lt;String&gt;&gt; walsByPrefix = entry.getValue();<a name="line.757"></a>
-<span class="sourceLineNo">758</span>          boolean existingPrefix = false;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>          for (Map.Entry&lt;String, NavigableSet&lt;String&gt;&gt; walsEntry : walsByPrefix.entrySet()) {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>            SortedSet&lt;String&gt; wals = walsEntry.getValue();<a name="line.760"></a>
-<span class="sourceLineNo">761</span>            if (this.sources.isEmpty()) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>              // If there's no slaves, don't need to keep the old wals since<a name="line.762"></a>
-<span class="sourceLineNo">763</span>              // we only consider the last one when a new slave comes in<a name="line.763"></a>
-<span class="sourceLineNo">764</span>              wals.clear();<a name="line.764"></a>
-<span class="sourceLineNo">765</span>            }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>            if (logPrefix.equals(walsEntry.getKey())) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>              wals.add(logName);<a name="line.767"></a>
-<span class="sourceLineNo">768</span>              existingPrefix = true;<a name="line.768"></a>
-<span class="sourceLineNo">769</span>            }<a name="line.769"></a>
-<span class="sourceLineNo">770</span>          }<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          if (!existingPrefix) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>            // The new log belongs to a new group, add it into this peer<a name="line.772"></a>
-<span class="sourceLineNo">773</span>            LOG.debug("Start tracking logs for wal group {} for peer {}", logPrefix, peerId);<a name="line.773"></a>
-<span class="sourceLineNo">774</span>            NavigableSet&lt;String&gt; wals = new TreeSet&lt;&gt;();<a name="line.774"></a>
-<span class="sourceLineNo">775</span>            wals.add(logName);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>            walsByPrefix.put(logPrefix, wals);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>          }<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        }<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      }<a name="line.779"></a>
-<span class="sourceLineNo">780</span><a name="line.780"></a>
-<span class="sourceLineNo">781</span>      // Add to latestPaths<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      Iterator&lt;Path&gt; iterator = latestPaths.iterator();<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      while (iterator.hasNext()) {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>        Path path = iterator.next();<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        if (path.getName().contains(logPrefix)) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          iterator.remove();<a name="line.786"></a>
-<span class="sourceLineNo">787</span>          break;<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        }<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      this.latestPaths.add(newLog);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    }<a name="line.791"></a>
-<span class="sourceLineNo">792</span>  }<a name="line.792"></a>
-<span class="sourceLineNo">793</span><a name="line.793"></a>
-<span class="sourceLineNo">794</span>  // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.794"></a>
-<span class="sourceLineNo">795</span>  @VisibleForTesting<a name="line.795"></a>
-<span class="sourceLineNo">796</span>  public void postLogRoll(Path newLog) throws IOException {<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    // This only updates the sources we own, not the recovered ones<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      source.enqueueLog(newLog);<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    }<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span>  @Override<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  public void regionServerRemoved(String regionserver) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    transferQueues(ServerName.valueOf(regionserver));<a name="line.805"></a>
-<span class="sourceLineNo">806</span>  }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>  /**<a name="line.808"></a>
-<span class="sourceLineNo">809</span>   * Transfer all the queues of the specified to this region server. First it tries to grab a lock<a name="line.809"></a>
-<span class="sourceLineNo">810</span>   * and if it works it will move the old queues and finally will delete the old queues.<a name="line.810"></a>
-<span class="sourceLineNo">811</span>   * &lt;p&gt;<a name="line.811"></a>
-<span class="sourceLineNo">812</span>   * It creates one old source for any type of source of the old rs.<a name="line.812"></a>
-<span class="sourceLineNo">813</span>   */<a name="line.813"></a>
-<span class="sourceLineNo">814</span>  private void transferQueues(ServerName deadRS) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span>    if (server.getServerName().equals(deadRS)) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      // it's just us, give up<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      return;<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    NodeFailoverWorker transfer = new NodeFailoverWorker(deadRS);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    try {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>      this.executor.execute(transfer);<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    } catch (RejectedExecutionException ex) {<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      LOG.info("Cancelling the transfer of " + deadRS + " because of " + ex.getMessage());<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    }<a name="line.824"></a>
-<span class="sourceLineNo">825</span>  }<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>  /**<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   * Class responsible to setup new ReplicationSources to take care of the queues from dead region<a name="line.828"></a>
-<span class="sourceLineNo">829</span>   * servers.<a name="line.829"></a>
-<span class="sourceLineNo">830</span>   */<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  class NodeFailoverWorker extends Thread {<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>    private final ServerName deadRS;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    // After claim the queues from dead region server, the NodeFailoverWorker will skip to start<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    // the RecoveredReplicationSource if the peer has been removed. but there's possible that<a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // remove a peer with peerId = 2 and add a peer with peerId = 2 again during the<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    // NodeFailoverWorker. So we need a deep copied &lt;peerId, peer&gt; map to decide whether we<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    // should start the RecoveredReplicationSource. If the latest peer is not the old peer when<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    // NodeFailoverWorker begin, we should skip to start the RecoveredReplicationSource, Otherwise<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    // the rs will abort (See HBASE-20475).<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    private final Map&lt;String, ReplicationPeerImpl&gt; peersSnapshot;<a name="line.841"></a>
-<span class="sourceLineNo">842</span><a name="line.842"></a>
-<span class="sourceLineNo">843</span>    @VisibleForTesting<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    public NodeFailoverWorker(ServerName deadRS) {<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      super("Failover-for-" + deadRS);<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      this.deadRS = deadRS;<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      peersSnapshot = new HashMap&lt;&gt;(replicationPeers.getPeerCache());<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    }<a name="line.848"></a>
-<span class="sourceLineNo">849</span><a name="line.849"></a>
-<span class="sourceLineNo">850</span>    private boolean isOldPeer(String peerId, ReplicationPeerImpl newPeerRef) {<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      ReplicationPeerImpl oldPeerRef = peersSnapshot.get(peerId);<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      return oldPeerRef != null &amp;&amp; oldPeerRef == newPeerRef;<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    }<a name="line.853"></a>
-<span class="sourceLineNo">854</span><a name="line.854"></a>
-<span class="sourceLineNo">855</span>    @Override<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    public void run() {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      // Wait a bit before transferring the queues, we may be shutting down.<a name="line.857"></a>
-<span class="sourceLineNo">858</span>      // This sleep may not be enough in some cases.<a name="line.858"></a>
-<span class="sourceLineNo">859</span>      try {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>        Thread.sleep(sleepBeforeFailover +<a name="line.860"></a>
-<span class="sourceLineNo">861</span>          (long) (ThreadLocalRandom.current().nextFloat() * sleepBeforeFailover));<a name="line.861"></a>
-<span class="sourceLineNo">862</span>      } catch (InterruptedException e) {<a name="line.862"></a>
-<span class="sourceLineNo">863</span>        LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.863"></a>
-<span class="sourceLineNo">864</span>        Thread.currentThread().interrupt();<a name="line.864"></a>
-<span class="sourceLineNo">865</span>      }<a name="line.865"></a>
-<span class="sourceLineNo">866</span>      // We try to lock that rs' queue directory<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      if (server.isStopped()) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>        LOG.info("Not transferring queue since we are shutting down");<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        return;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      Map&lt;String, Set&lt;String&gt;&gt; newQueues = new HashMap&lt;&gt;();<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      try {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>        List&lt;String&gt; queues = queueStorage.getAllQueues(deadRS);<a name="line.873"></a>
-<span class="sourceLineNo">874</span>        while (!queues.isEmpty()) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>          Pair&lt;String, SortedSet&lt;String&gt;&gt; peer = queueStorage.claimQueue(deadRS,<a name="line.875"></a>
-<span class="sourceLineNo">876</span>            queues.get(ThreadLocalRandom.current().nextInt(queues.size())), server.getServerName());<a name="line.876"></a>
-<span class="sourceLineNo">877</span>          long sleep = sleepBeforeFailover / 2;<a name="line.877"></a>
-<span class="sourceLineNo">878</span>          if (!peer.getSecond().isEmpty()) {<a name="line.878"></a>
-<span class="sourceLineNo">879</span>            newQueues.put(peer.getFirst(), peer.getSecond());<a name="line.879"></a>
-<span class="sourceLineNo">880</span>            sleep = sleepBeforeFailover;<a name="line.880"></a>
-<span class="sourceLineNo">881</span>          }<a name="line.881"></a>
-<span class="sourceLineNo">882</span>          try {<a name="line.882"></a>
-<span class="sourceLineNo">883</span>            Thread.sleep(sleep);<a name="line.883"></a>
-<span class="sourceLineNo">884</span>          } catch (InterruptedException e) {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>            LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.885"></a>
-<span class=

<TRUNCATED>

[13/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index 89859a5..dfbe758 100644
--- a/downloads.html
+++ b/downloads.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase Downloads</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -423,7 +423,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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 08293cb..ee0fece 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 6e2e1bb..9fc5e76 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -411,7 +411,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index e5601a3..a01c528 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index 2c5321e..5ad20ae 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 1ebca5d..17db7f0 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index e6c17ce..9036efb 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index 68935f9..1f21c24 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index f8445c8..7b0680a 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index eb2c894..884c10b 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 29a6235..085534f 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index a3f91c0..dc753e4 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Powered By Apache HBase™</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index dd1f79c..2d758fb 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index b00545e..f822c4f 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index f728199..4e26dca 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 4162b92..a63dcc0 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 8d1742f..895e704 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 0b44798..e694754 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Other Apache HBase (TM) Resources</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index d6bc16c..1a74701 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 4ea3e36..902afb8 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index b0d94ce..c44dbcd 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index 67f6dcd..3ae9daf 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="20180930" />
+    <meta name="Date-Revision-yyyymmdd" content="20181002" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -754,7 +754,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-02</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 64a4b1f..93e7d5b 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -8826,6 +8826,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestServerCrashProcedureWithReplicas.html#contains-java.util.List-org.apache.hadoop.hbase.client.RegionInfo-">contains(List&lt;RegionInfo&gt;, RegionInfo)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestServerCrashProcedureWithReplicas.html" title="class in org.apache.hadoop.hbase.master.procedure">TestServerCrashProcedureWithReplicas</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#contains-java.lang.Iterable-org.apache.hadoop.fs.Path-">contains(Iterable&lt;FileStatus&gt;, Path)</a></span> - Static method in class org.apache.hadoop.hbase.master.snapshot.<a href="org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html" title="class in org.apache.hadoop.hbase.master.snapshot">TestSnapshotFileCache</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHStore.MyList.html#contains-java.lang.Object-">contains(Object)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHStore.MyList.html" title="class in org.apache.hadoop.hbase.regionserver">TestHStore.MyList</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestClassFinder.html#contains-java.util.Set-java.lang.String-">contains(Set&lt;Class&lt;?&gt;&gt;, String)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestClassFinder.html" title="class in org.apache.hadoop.hbase">TestClassFinder</a></dt>
@@ -17619,7 +17621,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/MockRegionServerServices.html#getNonceManager--">getNonceManager()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MockRegionServerServices.html" title="class in org.apache.hadoop.hbase">MockRegionServerServices</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#getNonSnapshotFiles-org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache-org.apache.hadoop.fs.Path-">getNonSnapshotFiles(SnapshotFileCache, Path)</a></span> - Method in class org.apache.hadoop.hbase.master.snapshot.<a href="org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html" title="class in org.apache.hadoop.hbase.master.snapshot">TestSnapshotFileCache</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#getNonSnapshotFiles-org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache-org.apache.hadoop.fs.Path-">getNonSnapshotFiles(SnapshotFileCache, Path)</a></span> - Static method in class org.apache.hadoop.hbase.master.snapshot.<a href="org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html" title="class in org.apache.hadoop.hbase.master.snapshot">TestSnapshotFileCache</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html#getNoOfTags--">getNoOfTags()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a></dt>
 <dd>&nbsp;</dd>
@@ -33553,6 +33555,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#resetErrors--">resetErrors()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck.MockErrorReporter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#resetFlags--">resetFlags()</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellGridStoreScanner.html#resetKVHeap-java.util.List-org.apache.hadoop.hbase.CellComparator-">resetKVHeap(List&lt;? extends KeyValueScanner&gt;, CellComparator)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellGridStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">TestStoreScanner.CellGridStoreScanner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/conf/TestConfigurationManager.DummyConfigurationObserver.html#resetNotifiedOnChange--">resetNotifiedOnChange()</a></span> - Method in class org.apache.hadoop.hbase.conf.<a href="org/apache/hadoop/hbase/conf/TestConfigurationManager.DummyConfigurationObserver.html" title="class in org.apache.hadoop.hbase.conf">TestConfigurationManager.DummyConfigurationObserver</a></dt>
@@ -36093,8 +36097,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/GenericTestUtils.html#sequence">sequence</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/GenericTestUtils.html" title="class in org.apache.hadoop.hbase">GenericTestUtils</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#sequenceId">sequenceId</a></span> - Static variable in class org.apache.hadoop.hbase.master.snapshot.<a href="org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html" title="class in org.apache.hadoop.hbase.master.snapshot">TestSnapshotFileCache</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MockHStoreFile.html#sequenceid">sequenceid</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MockHStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">MockHStoreFile</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestClientNoCluster.FakeServer.html#sequenceids">sequenceids</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestClientNoCluster.FakeServer.html" title="class in org.apache.hadoop.hbase.client">TestClientNoCluster.FakeServer</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.SnapshotFiles.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.SnapshotFiles.html b/testdevapidocs/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.SnapshotFiles.html
index 4b18133..adab0e9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.SnapshotFiles.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.SnapshotFiles.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.211">TestSnapshotFileCache.SnapshotFiles</a>
+<pre>class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.207">TestSnapshotFileCache.SnapshotFiles</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -182,7 +182,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SnapshotFiles</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.SnapshotFiles.html#line.211">SnapshotFiles</a>()</pre>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.SnapshotFiles.html#line.207">SnapshotFiles</a>()</pre>
 </li>
 </ul>
 </li>
@@ -199,7 +199,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>filesUnderSnapshot</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="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/master/snapshot/TestSnapshotFileCache.SnapshotFiles.html#line.213">filesUnderSnapshot</a>(org.apache.hadoop.fs.Path&nbsp;snapshotDir)
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="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/master/snapshot/TestSnapshotFileCache.SnapshotFiles.html#line.209">filesUnderSnapshot</a>(org.apache.hadoop.fs.Path&nbsp;snapshotDir)
                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html b/testdevapidocs/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html
index 5ee010b..d908bba 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":9,"i8":9,"i9":10,"i10":10,"i11":10,"i12":10};
+var methods = {"i0":10,"i1":9,"i2":10,"i3":10,"i4":10,"i5":9,"i6":10,"i7":10,"i8":9,"i9":9,"i10":10,"i11":10,"i12":10,"i13":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -166,10 +166,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#rootDir">rootDir</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private static long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#sequenceId">sequenceId</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
@@ -210,60 +206,65 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#cleanupFiles--">cleanupFiles</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
+<td class="colFirst"><code>private static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#contains-java.lang.Iterable-org.apache.hadoop.fs.Path-">contains</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files,
+        org.apache.hadoop.fs.Path&nbsp;filePath)</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#createAndTestSnapshot-org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache-org.apache.hadoop.hbase.snapshot.SnapshotTestingUtils.SnapshotMock.SnapshotBuilder-boolean-boolean-">createAndTestSnapshot</a></span>(org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache&nbsp;cache,
                      <a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotTestingUtils.SnapshotMock.SnapshotBuilder</a>&nbsp;builder,
                      boolean&nbsp;tmp,
                      boolean&nbsp;removeOnExit)</code>&nbsp;</td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotTestingUtils.SnapshotMock.SnapshotBuilder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#createAndTestSnapshotV1-org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache-java.lang.String-boolean-boolean-">createAndTestSnapshotV1</a></span>(org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache&nbsp;cache,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                        boolean&nbsp;tmp,
                        boolean&nbsp;removeOnExit)</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#createAndTestSnapshotV2-org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache-java.lang.String-boolean-boolean-">createAndTestSnapshotV2</a></span>(org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache&nbsp;cache,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                        boolean&nbsp;tmp,
                        boolean&nbsp;removeOnExit)</code>&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;</code></td>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#getNonSnapshotFiles-org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache-org.apache.hadoop.fs.Path-">getNonSnapshotFiles</a></span>(org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache&nbsp;cache,
                    org.apache.hadoop.fs.Path&nbsp;storeFile)</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.FileStatus&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#getStoreFilesForSnapshot-org.apache.hadoop.hbase.snapshot.SnapshotTestingUtils.SnapshotMock.SnapshotBuilder-">getStoreFilesForSnapshot</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotTestingUtils.SnapshotMock.SnapshotBuilder</a>&nbsp;builder)</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>private org.apache.hadoop.fs.FileStatus</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#mockStoreFile-java.lang.String-">mockStoreFile</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;storeFileName)</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#startCluster--">startCluster</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#stopCluster--">stopCluster</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#testLoadAndDelete--">testLoadAndDelete</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#testReloadModifiedDirectory--">testReloadModifiedDirectory</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#testSnapshotTempDirReload--">testSnapshotTempDirReload</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#testWeNeverCacheTmpDirAndLoadIt--">testWeNeverCacheTmpDirAndLoadIt</a></span>()</code>&nbsp;</td>
 </tr>
@@ -316,22 +317,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.70">UTIL</a></pre>
 </li>
 </ul>
-<a name="sequenceId">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>sequenceId</h4>
-<pre>private static&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.71">sequenceId</a></pre>
-</li>
-</ul>
 <a name="fs">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>fs</h4>
-<pre>private static&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.72">fs</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.71">fs</a></pre>
 </li>
 </ul>
 <a name="rootDir">
@@ -340,7 +332,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>rootDir</h4>
-<pre>private static&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.73">rootDir</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.72">rootDir</a></pre>
 </li>
 </ul>
 </li>
@@ -374,7 +366,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>startCluster</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.76">startCluster</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.75">startCluster</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>
@@ -388,7 +380,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>stopCluster</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.83">stopCluster</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.82">stopCluster</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>
@@ -402,7 +394,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupFiles</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.88">cleanupFiles</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.87">cleanupFiles</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>
@@ -416,7 +408,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testLoadAndDelete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.95">testLoadAndDelete</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.94">testLoadAndDelete</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>
@@ -430,7 +422,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReloadModifiedDirectory</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.109">testReloadModifiedDirectory</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.108">testReloadModifiedDirectory</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>
@@ -444,7 +436,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testSnapshotTempDirReload</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.125">testSnapshotTempDirReload</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.124">testSnapshotTempDirReload</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>
@@ -458,7 +450,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testWeNeverCacheTmpDirAndLoadIt</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.143">testWeNeverCacheTmpDirAndLoadIt</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.142">testWeNeverCacheTmpDirAndLoadIt</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>
@@ -472,7 +464,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFilesForSnapshot</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.188">getStoreFilesForSnapshot</a>(<a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotTestingUtils.SnapshotMock.SnapshotBuilder</a>&nbsp;builder)
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.184">getStoreFilesForSnapshot</a>(<a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotTestingUtils.SnapshotMock.SnapshotBuilder</a>&nbsp;builder)
                                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -486,7 +478,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>mockStoreFile</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.FileStatus&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.203">mockStoreFile</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;storeFileName)</pre>
+<pre>private&nbsp;org.apache.hadoop.fs.FileStatus&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.199">mockStoreFile</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;storeFileName)</pre>
 </li>
 </ul>
 <a name="createAndTestSnapshotV1-org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache-java.lang.String-boolean-boolean-">
@@ -495,7 +487,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createAndTestSnapshotV1</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotTestingUtils.SnapshotMock.SnapshotBuilder</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.220">createAndTestSnapshotV1</a>(org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache&nbsp;cache,
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotTestingUtils.SnapshotMock.SnapshotBuilder</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.216">createAndTestSnapshotV1</a>(org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache&nbsp;cache,
                                                                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                                                                                   boolean&nbsp;tmp,
                                                                                   boolean&nbsp;removeOnExit)
@@ -512,7 +504,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createAndTestSnapshotV2</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.228">createAndTestSnapshotV2</a>(org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache&nbsp;cache,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.224">createAndTestSnapshotV2</a>(org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache&nbsp;cache,
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                                      boolean&nbsp;tmp,
                                      boolean&nbsp;removeOnExit)
@@ -529,7 +521,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createAndTestSnapshot</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.235">createAndTestSnapshot</a>(org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache&nbsp;cache,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.231">createAndTestSnapshot</a>(org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache&nbsp;cache,
                                    <a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotTestingUtils.SnapshotMock.SnapshotBuilder</a>&nbsp;builder,
                                    boolean&nbsp;tmp,
                                    boolean&nbsp;removeOnExit)
@@ -540,15 +532,25 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="contains-java.lang.Iterable-org.apache.hadoop.fs.Path-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>contains</h4>
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.274">contains</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;files,
+                                org.apache.hadoop.fs.Path&nbsp;filePath)</pre>
+</li>
+</ul>
 <a name="getNonSnapshotFiles-org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache-org.apache.hadoop.fs.Path-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getNonSnapshotFiles</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.288">getNonSnapshotFiles</a>(org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache&nbsp;cache,
-                                                                      org.apache.hadoop.fs.Path&nbsp;storeFile)
-                                                               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>
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#line.284">getNonSnapshotFiles</a>(org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache&nbsp;cache,
+                                                                             org.apache.hadoop.fs.Path&nbsp;storeFile)
+                                                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/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 19ec688..7b4b774 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -672,11 +672,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/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/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/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html
index 46df856..cb3a334 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html
@@ -121,7 +121,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.540">TestReplicationEndpoint.EverythingPassesWALEntryFilter</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.552">TestReplicationEndpoint.EverythingPassesWALEntryFilter</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements org.apache.hadoop.hbase.replication.WALEntryFilter</pre>
 </li>
@@ -214,7 +214,7 @@ implements org.apache.hadoop.hbase.replication.WALEntryFilter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>passedEntry</h4>
-<pre>private static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.541">passedEntry</a></pre>
+<pre>private static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.553">passedEntry</a></pre>
 </li>
 </ul>
 </li>
@@ -231,7 +231,7 @@ implements org.apache.hadoop.hbase.replication.WALEntryFilter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>EverythingPassesWALEntryFilter</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.540">EverythingPassesWALEntryFilter</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.552">EverythingPassesWALEntryFilter</a>()</pre>
 </li>
 </ul>
 </li>
@@ -248,7 +248,7 @@ implements org.apache.hadoop.hbase.replication.WALEntryFilter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>filter</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.wal.WAL.Entry&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.543">filter</a>(org.apache.hadoop.hbase.wal.WAL.Entry&nbsp;entry)</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.wal.WAL.Entry&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.555">filter</a>(org.apache.hadoop.hbase.wal.WAL.Entry&nbsp;entry)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>filter</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.replication.WALEntryFilter</code></dd>
@@ -261,7 +261,7 @@ implements org.apache.hadoop.hbase.replication.WALEntryFilter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>hasPassedAnEntry</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.548">hasPassedAnEntry</a>()</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.560">hasPassedAnEntry</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html
index cd63d24..aea1773 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html
@@ -116,7 +116,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.553">TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.565">TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.EverythingPassesWALEntryFilter</a></pre>
 </li>
 </ul>
@@ -181,7 +181,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>EverythingPassesWALEntryFilterSubclass</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html#line.553">EverythingPassesWALEntryFilterSubclass</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html#line.565">EverythingPassesWALEntryFilterSubclass</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html
index 00ccd40..cab9058 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html
@@ -137,7 +137,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.451">TestReplicationEndpoint.InterClusterReplicationEndpointForTest</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.463">TestReplicationEndpoint.InterClusterReplicationEndpointForTest</a>
 extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</pre>
 </li>
 </ul>
@@ -305,7 +305,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
 <ul class="blockList">
 <li class="blockList">
 <h4>replicateCount</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.454">replicateCount</a></pre>
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.466">replicateCount</a></pre>
 </li>
 </ul>
 <a name="failedOnce">
@@ -314,7 +314,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
 <ul class="blockListLast">
 <li class="blockList">
 <h4>failedOnce</h4>
-<pre>static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.455">failedOnce</a></pre>
+<pre>static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.467">failedOnce</a></pre>
 </li>
 </ul>
 </li>
@@ -331,7 +331,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
 <ul class="blockListLast">
 <li class="blockList">
 <h4>InterClusterReplicationEndpointForTest</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.457">InterClusterReplicationEndpointForTest</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.469">InterClusterReplicationEndpointForTest</a>()</pre>
 </li>
 </ul>
 </li>
@@ -348,7 +348,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
 <ul class="blockList">
 <li class="blockList">
 <h4>replicate</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.462">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.474">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>replicate</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.replication.ReplicationEndpoint</code></dd>
@@ -363,7 +363,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createReplicator</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.471">createReplicator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.483">createReplicator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
                                              int&nbsp;ordinal)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>


[12/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html
index 7ebc7bc..e774933 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html
@@ -131,7 +131,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.403">TestReplicationEndpoint.ReplicationEndpointForTest</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.415">TestReplicationEndpoint.ReplicationEndpointForTest</a>
 extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
 </li>
 </ul>
@@ -309,7 +309,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>uuid</h4>
-<pre>static&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/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.404">uuid</a></pre>
+<pre>static&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/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.416">uuid</a></pre>
 </li>
 </ul>
 <a name="contructedCount">
@@ -318,7 +318,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>contructedCount</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.405">contructedCount</a></pre>
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.417">contructedCount</a></pre>
 </li>
 </ul>
 <a name="startedCount">
@@ -327,7 +327,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>startedCount</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.406">startedCount</a></pre>
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.418">startedCount</a></pre>
 </li>
 </ul>
 <a name="stoppedCount">
@@ -336,7 +336,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>stoppedCount</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.407">stoppedCount</a></pre>
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.419">stoppedCount</a></pre>
 </li>
 </ul>
 <a name="replicateCount">
@@ -345,7 +345,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>replicateCount</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.408">replicateCount</a></pre>
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.420">replicateCount</a></pre>
 </li>
 </ul>
 <a name="lastEntries">
@@ -354,7 +354,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>lastEntries</h4>
-<pre>static volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.409">lastEntries</a></pre>
+<pre>static volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.421">lastEntries</a></pre>
 </li>
 </ul>
 </li>
@@ -371,7 +371,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ReplicationEndpointForTest</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.411">ReplicationEndpointForTest</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.423">ReplicationEndpointForTest</a>()</pre>
 </li>
 </ul>
 </li>
@@ -388,7 +388,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getPeerUUID</h4>
-<pre>public&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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.417">getPeerUUID</a>()</pre>
+<pre>public&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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.429">getPeerUUID</a>()</pre>
 </li>
 </ul>
 <a name="replicate-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-">
@@ -397,7 +397,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>replicate</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.422">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.434">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
 </li>
 </ul>
 <a name="start--">
@@ -406,7 +406,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.429">start</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.441">start</a>()</pre>
 </li>
 </ul>
 <a name="stop--">
@@ -415,7 +415,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.434">stop</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.446">stop</a>()</pre>
 </li>
 </ul>
 <a name="doStart--">
@@ -424,7 +424,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>doStart</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.439">doStart</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.451">doStart</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>doStart</code>&nbsp;in class&nbsp;<code>org.apache.hbase.thirdparty.com.google.common.util.concurrent.AbstractService</code></dd>
@@ -437,7 +437,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>doStop</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.445">doStop</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.457">doStop</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>doStop</code>&nbsp;in class&nbsp;<code>org.apache.hbase.thirdparty.com.google.common.util.concurrent.AbstractService</code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html
index d8825c6..cee0a95 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html
@@ -132,7 +132,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.484">TestReplicationEndpoint.ReplicationEndpointReturningFalse</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.496">TestReplicationEndpoint.ReplicationEndpointReturningFalse</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.ReplicationEndpointForTest</a></pre>
 </li>
 </ul>
@@ -292,7 +292,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>COUNT</h4>
-<pre>static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.485">COUNT</a></pre>
+<pre>static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.497">COUNT</a></pre>
 </li>
 </ul>
 <a name="ex">
@@ -301,7 +301,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>ex</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.486">ex</a></pre>
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.498">ex</a></pre>
 </li>
 </ul>
 <a name="replicated">
@@ -310,7 +310,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>replicated</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.487">replicated</a></pre>
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.499">replicated</a></pre>
 </li>
 </ul>
 </li>
@@ -327,7 +327,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ReplicationEndpointReturningFalse</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.484">ReplicationEndpointReturningFalse</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.496">ReplicationEndpointReturningFalse</a>()</pre>
 </li>
 </ul>
 </li>
@@ -344,7 +344,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>replicate</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.489">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.501">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>replicate</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.replication.ReplicationEndpoint</code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html
index ecd9601..0c74d3e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html
@@ -132,7 +132,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.506">TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.518">TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.ReplicationEndpointForTest</a></pre>
 </li>
 </ul>
@@ -288,7 +288,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ex</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.507">ex</a></pre>
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.519">ex</a></pre>
 </li>
 </ul>
 </li>
@@ -305,7 +305,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ReplicationEndpointWithWALEntryFilter</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.506">ReplicationEndpointWithWALEntryFilter</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.518">ReplicationEndpointWithWALEntryFilter</a>()</pre>
 </li>
 </ul>
 </li>
@@ -322,7 +322,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>replicate</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.510">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.522">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>replicate</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.replication.ReplicationEndpoint</code></dd>
@@ -337,7 +337,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getWALEntryfilter</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.replication.WALEntryFilter&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.521">getWALEntryfilter</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.replication.WALEntryFilter&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.533">getWALEntryfilter</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getWALEntryfilter</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.replication.ReplicationEndpoint</code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html
index ea1efb8..2e5022d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.71">TestReplicationEndpoint</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.73">TestReplicationEndpoint</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></pre>
 <div class="block">Tests ReplicationSource and ReplicationEndpoint interactions</div>
 </li>
@@ -317,7 +317,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.74">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.76">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -326,7 +326,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <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/TestReplicationEndpoint.html#line.77">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.79">LOG</a></pre>
 </li>
 </ul>
 <a name="numRegionServers">
@@ -335,7 +335,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>numRegionServers</h4>
-<pre>static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.79">numRegionServers</a></pre>
+<pre>static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.81">numRegionServers</a></pre>
 </li>
 </ul>
 </li>
@@ -352,7 +352,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestReplicationEndpoint</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.71">TestReplicationEndpoint</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.73">TestReplicationEndpoint</a>()</pre>
 </li>
 </ul>
 </li>
@@ -369,7 +369,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>setUpBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.82">setUpBeforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.84">setUpBeforeClass</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -383,7 +383,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.88">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.90">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>
@@ -397,7 +397,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>setup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.95">setup</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.97">setup</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>
@@ -411,7 +411,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>testCustomReplicationEndpoint</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.132">testCustomReplicationEndpoint</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.134">testCustomReplicationEndpoint</a>()
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -425,7 +425,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplicationEndpointReturnsFalseOnReplicate</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.171">testReplicationEndpointReturnsFalseOnReplicate</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.173">testReplicationEndpointReturnsFalseOnReplicate</a>()
                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -439,7 +439,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>testInterClusterReplication</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.207">testInterClusterReplication</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.209">testInterClusterReplication</a>()
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -453,7 +453,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>testWALEntryFilterFromReplicationEndpoint</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.253">testWALEntryFilterFromReplicationEndpoint</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.255">testWALEntryFilterFromReplicationEndpoint</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>
@@ -467,7 +467,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>testWALEntryFilterAddValidation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.282">testWALEntryFilterAddValidation</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.284">testWALEntryFilterAddValidation</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>
@@ -481,7 +481,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>testWALEntryFilterUpdateValidation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.292">testWALEntryFilterUpdateValidation</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.294">testWALEntryFilterUpdateValidation</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>
@@ -495,7 +495,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>testMetricsSourceBaseSourcePassthrough</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.303">testMetricsSourceBaseSourcePassthrough</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.305">testMetricsSourceBaseSourcePassthrough</a>()</pre>
 </li>
 </ul>
 <a name="doPut-byte:A-">
@@ -504,7 +504,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>doPut</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.378">doPut</a>(byte[]&nbsp;row)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.390">doPut</a>(byte[]&nbsp;row)
             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>
@@ -518,7 +518,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockList">
 <li class="blockList">
 <h4>doPut</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.384">doPut</a>(org.apache.hadoop.hbase.client.Connection&nbsp;connection,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.396">doPut</a>(org.apache.hadoop.hbase.client.Connection&nbsp;connection,
                    byte[]&nbsp;row)
             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>
@@ -533,7 +533,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>doAssert</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.392">doAssert</a>(byte[]&nbsp;row)
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.404">doAssert</a>(byte[]&nbsp;row)
                       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/37b8a04a/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html b/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html
index 539864e..a060c13 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -401,6 +401,10 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#preRemoveServers-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.util.Set-">preRemoveServers</a></span>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                 <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.hbase.net.Address&gt;&nbsp;servers)</code>&nbsp;</td>
 </tr>
+<tr id="i23" class="rowColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#resetFlags--">resetFlags</a></span>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -660,13 +664,22 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="resetFlags--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>resetFlags</h4>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.308">resetFlags</a>()</pre>
+</li>
+</ul>
 <a name="getMasterObserver--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterObserver</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;org.apache.hadoop.hbase.coprocessor.MasterObserver&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.309">getMasterObserver</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;org.apache.hadoop.hbase.coprocessor.MasterObserver&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.334">getMasterObserver</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getMasterObserver</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.coprocessor.MasterCoprocessor</code></dd>
@@ -679,7 +692,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>preMoveServersAndTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.313">preMoveServersAndTables</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.338">preMoveServersAndTables</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                                     <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.hbase.net.Address&gt;&nbsp;servers,
                                     <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.hbase.TableName&gt;&nbsp;tables,
                                     <a href="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;targetGroup)
@@ -698,7 +711,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>postMoveServersAndTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.318">postMoveServersAndTables</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.343">postMoveServersAndTables</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                                      <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.hbase.net.Address&gt;&nbsp;servers,
                                      <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.hbase.TableName&gt;&nbsp;tables,
                                      <a href="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;targetGroup)
@@ -717,7 +730,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>preRemoveServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.323">preRemoveServers</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.348">preRemoveServers</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                              <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.hbase.net.Address&gt;&nbsp;servers)
                       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>
@@ -734,7 +747,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>postRemoveServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.329">postRemoveServers</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.354">postRemoveServers</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                               <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.hbase.net.Address&gt;&nbsp;servers)
                        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>
@@ -751,7 +764,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>preRemoveRSGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.335">preRemoveRSGroup</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.360">preRemoveRSGroup</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)
                       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>
@@ -768,7 +781,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>postRemoveRSGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.340">postRemoveRSGroup</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.365">postRemoveRSGroup</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)
                        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>
@@ -785,7 +798,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>preAddRSGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.345">preAddRSGroup</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.370">preAddRSGroup</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)
                    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>
@@ -802,7 +815,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>postAddRSGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.350">postAddRSGroup</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.375">postAddRSGroup</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)
                     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>
@@ -819,7 +832,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>preMoveTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.355">preMoveTables</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.380">preMoveTables</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                           <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.hbase.TableName&gt;&nbsp;tables,
                           <a href="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;targetGroup)
                    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>
@@ -837,7 +850,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>postMoveTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.360">postMoveTables</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.385">postMoveTables</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                            <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.hbase.TableName&gt;&nbsp;tables,
                            <a href="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;targetGroup)
                     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>
@@ -855,7 +868,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>preMoveServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.365">preMoveServers</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.390">preMoveServers</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                            <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.hbase.net.Address&gt;&nbsp;servers,
                            <a href="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;targetGroup)
                     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>
@@ -873,7 +886,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>postMoveServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.371">postMoveServers</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.396">postMoveServers</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                             <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.hbase.net.Address&gt;&nbsp;servers,
                             <a href="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;targetGroup)
                      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>
@@ -891,7 +904,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>preBalanceRSGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.376">preBalanceRSGroup</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.401">preBalanceRSGroup</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName)
                        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>
@@ -908,7 +921,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>postBalanceRSGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.381">postBalanceRSGroup</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.406">postBalanceRSGroup</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName,
                                boolean&nbsp;balancerRan)
                         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>
@@ -926,7 +939,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>preGetRSGroupInfo</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.387">preGetRSGroupInfo</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.412">preGetRSGroupInfo</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName)
                        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>
@@ -943,7 +956,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>postGetRSGroupInfo</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.393">postGetRSGroupInfo</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.418">postGetRSGroupInfo</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName)
                         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>
@@ -960,7 +973,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>preGetRSGroupInfoOfTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.399">preGetRSGroupInfoOfTable</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.424">preGetRSGroupInfoOfTable</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                                      org.apache.hadoop.hbase.TableName&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>
@@ -977,7 +990,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>postGetRSGroupInfoOfTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.405">postGetRSGroupInfoOfTable</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.430">postGetRSGroupInfoOfTable</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                                       org.apache.hadoop.hbase.TableName&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>
@@ -994,7 +1007,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>preListRSGroups</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.411">preListRSGroups</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.436">preListRSGroups</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx)
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -1010,7 +1023,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>postListRSGroups</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.417">postListRSGroups</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.442">postListRSGroups</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -1026,7 +1039,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockList">
 <li class="blockList">
 <h4>preGetRSGroupInfoOfServer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.423">preGetRSGroupInfoOfServer</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.448">preGetRSGroupInfoOfServer</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                                       org.apache.hadoop.hbase.net.Address&nbsp;server)
                                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>
@@ -1043,7 +1056,7 @@ implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.had
 <ul class="blockListLast">
 <li class="blockList">
 <h4>postGetRSGroupInfoOfServer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.429">postGetRSGroupInfoOfServer</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#line.454">postGetRSGroupInfoOfServer</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                                        org.apache.hadoop.hbase.net.Address&nbsp;server)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html b/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html
index 7c1c175..3d8de36 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html
@@ -549,7 +549,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase
 <ul class="blockList">
 <li class="blockList">
 <h4>testGetRSGroupInfoCPHookCalled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.436">testGetRSGroupInfoCPHookCalled</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.461">testGetRSGroupInfoCPHookCalled</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>
@@ -563,7 +563,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase
 <ul class="blockList">
 <li class="blockList">
 <h4>testGetRSGroupInfoOfTableCPHookCalled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.443">testGetRSGroupInfoOfTableCPHookCalled</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.468">testGetRSGroupInfoOfTableCPHookCalled</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>
@@ -577,7 +577,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase
 <ul class="blockList">
 <li class="blockList">
 <h4>testListRSGroupsCPHookCalled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.450">testListRSGroupsCPHookCalled</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.475">testListRSGroupsCPHookCalled</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>
@@ -591,7 +591,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase
 <ul class="blockList">
 <li class="blockList">
 <h4>testGetRSGroupInfoOfServerCPHookCalled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.457">testGetRSGroupInfoOfServerCPHookCalled</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.482">testGetRSGroupInfoOfServerCPHookCalled</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>
@@ -605,7 +605,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase
 <ul class="blockList">
 <li class="blockList">
 <h4>testMoveServersAndTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.465">testMoveServersAndTables</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.490">testMoveServersAndTables</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="overrideSpecifyLabel">Overrides:</span></dt>
@@ -621,7 +621,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase
 <ul class="blockList">
 <li class="blockList">
 <h4>testTableMoveTruncateAndDrop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.471">testTableMoveTruncateAndDrop</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.496">testTableMoveTruncateAndDrop</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="overrideSpecifyLabel">Overrides:</span></dt>
@@ -637,7 +637,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase
 <ul class="blockList">
 <li class="blockList">
 <h4>testRemoveServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.478">testRemoveServers</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.503">testRemoveServers</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="overrideSpecifyLabel">Overrides:</span></dt>
@@ -653,7 +653,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase
 <ul class="blockList">
 <li class="blockList">
 <h4>testMisplacedRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.485">testMisplacedRegions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.510">testMisplacedRegions</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>
@@ -667,7 +667,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase
 <ul class="blockList">
 <li class="blockList">
 <h4>testCloneSnapshot</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.515">testCloneSnapshot</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.540">testCloneSnapshot</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>
@@ -681,7 +681,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase
 <ul class="blockList">
 <li class="blockList">
 <h4>testRSGroupsWithHBaseQuota</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.531">testRSGroupsWithHBaseQuota</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.556">testRSGroupsWithHBaseQuota</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>
@@ -695,7 +695,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase
 <ul class="blockList">
 <li class="blockList">
 <h4>testRSGroupListDoesNotContainFailedTableCreation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.548">testRSGroupListDoesNotContainFailedTableCreation</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.573">testRSGroupListDoesNotContainFailedTableCreation</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>
@@ -709,7 +709,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase
 <ul class="blockList">
 <li class="blockList">
 <h4>toggleQuotaCheckAndRestartMiniCluster</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.597">toggleQuotaCheckAndRestartMiniCluster</a>(boolean&nbsp;enable)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.622">toggleQuotaCheckAndRestartMiniCluster</a>(boolean&nbsp;enable)
                                             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>
@@ -723,7 +723,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase
 <ul class="blockListLast">
 <li class="blockList">
 <h4>restartHBaseCluster</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.608">restartHBaseCluster</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#line.633">restartHBaseCluster</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/37b8a04a/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 ff48e4c..7cc4b3a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -254,9 +254,9 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.Counts</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
 <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/37b8a04a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 9e0700e..b21ae88 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -141,9 +141,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
 </ul>
 </li>
 </ul>


[09/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html
index ef39f9e..f188fed 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html
@@ -25,543 +25,555 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <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 static org.mockito.Mockito.mock;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.mockito.Mockito.verify;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.mockito.Mockito.when;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.HashMap;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Map;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.UUID;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.Callable;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.Cell;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Waiter;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Put;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Table;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.AfterClass;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.Assert;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.Before;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.BeforeClass;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.ClassRule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Test;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.experimental.categories.Category;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.slf4j.Logger;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.slf4j.LoggerFactory;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>/**<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.68"></a>
-<span class="sourceLineNo">069</span> */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.70"></a>
-<span class="sourceLineNo">071</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  @ClassRule<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.77"></a>
+<span class="sourceLineNo">020</span>import static org.mockito.Mockito.doNothing;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.mockito.Mockito.mock;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.mockito.Mockito.spy;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.mockito.Mockito.verify;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.mockito.Mockito.when;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.ArrayList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.List;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Map;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.UUID;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.Callable;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.Waiter;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Put;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.Table;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.junit.AfterClass;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.junit.Assert;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.Before;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.BeforeClass;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.ClassRule;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Test;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.experimental.categories.Category;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.slf4j.Logger;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.LoggerFactory;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>/**<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.70"></a>
+<span class="sourceLineNo">071</span> */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.72"></a>
+<span class="sourceLineNo">073</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  @ClassRule<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.77"></a>
 <span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  static int numRegionServers;<a name="line.79"></a>
+<span class="sourceLineNo">079</span>  private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.79"></a>
 <span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  @BeforeClass<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public static void setUpBeforeClass() throws Exception {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    TestReplicationBase.setUpBeforeClass();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<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>  @AfterClass<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public static void tearDownAfterClass() throws Exception {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    TestReplicationBase.tearDownAfterClass();<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    // check stop is called<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() &gt; 0);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  @Before<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public void setup() throws Exception {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    ReplicationEndpointForTest.contructedCount.set(0);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    ReplicationEndpointForTest.startedCount.set(0);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    ReplicationEndpointForTest.replicateCount.set(0);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    ReplicationEndpointForTest.lastEntries = null;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    final List&lt;RegionServerThread&gt; rsThreads =<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    for (RegionServerThread rs : rsThreads) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    // Wait for  all log roll to finish<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    utility1.waitFor(3000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      @Override<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      public boolean evaluate() throws Exception {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        for (RegionServerThread rs : rsThreads) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>            return false;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>          }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        return true;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      }<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>      @Override<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      public String explainFailure() throws Exception {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        List&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        for (RegionServerThread rs : rsThreads) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>            logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.123"></a>
-<span class="sourceLineNo">124</span>          }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<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><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  @Test<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public void testCustomReplicationEndpoint() throws Exception {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    // test installing a custom replication endpoint other than the default one.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    admin.addPeer("testCustomReplicationEndpoint",<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.135"></a>
-<span class="sourceLineNo">136</span>            .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>    // check whether the class has been constructed and started<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      @Override<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      public boolean evaluate() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        return ReplicationEndpointForTest.contructedCount.get() &gt;= numRegionServers;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    });<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      @Override<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      public boolean evaluate() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        return ReplicationEndpointForTest.startedCount.get() &gt;= numRegionServers;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    });<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.153"></a>
+<span class="sourceLineNo">081</span>  static int numRegionServers;<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  @BeforeClass<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static void setUpBeforeClass() throws Exception {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    TestReplicationBase.setUpBeforeClass();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  @AfterClass<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public static void tearDownAfterClass() throws Exception {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    TestReplicationBase.tearDownAfterClass();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    // check stop is called<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() &gt; 0);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  @Before<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public void setup() throws Exception {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    ReplicationEndpointForTest.contructedCount.set(0);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    ReplicationEndpointForTest.startedCount.set(0);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    ReplicationEndpointForTest.replicateCount.set(0);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    ReplicationEndpointForTest.lastEntries = null;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    final List&lt;RegionServerThread&gt; rsThreads =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    for (RegionServerThread rs : rsThreads) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    // Wait for  all log roll to finish<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    utility1.waitFor(3000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      @Override<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      public boolean evaluate() throws Exception {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        for (RegionServerThread rs : rsThreads) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>            return false;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        return true;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>      @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      public String explainFailure() throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        List&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        for (RegionServerThread rs : rsThreads) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>            logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>          }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<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>  }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  @Test<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  public void testCustomReplicationEndpoint() throws Exception {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // test installing a custom replication endpoint other than the default one.<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    admin.addPeer("testCustomReplicationEndpoint",<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.137"></a>
+<span class="sourceLineNo">138</span>            .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // check whether the class has been constructed and started<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      @Override<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      public boolean evaluate() throws Exception {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        return ReplicationEndpointForTest.contructedCount.get() &gt;= numRegionServers;<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      @Override<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      public boolean evaluate() throws Exception {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        return ReplicationEndpointForTest.startedCount.get() &gt;= numRegionServers;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    });<a name="line.153"></a>
 <span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // now replicate some data.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    doPut(Bytes.toBytes("row42"));<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      @Override<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      public boolean evaluate() throws Exception {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<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>    doAssert(Bytes.toBytes("row42"));<a name="line.165"></a>
+<span class="sourceLineNo">155</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>    // now replicate some data.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    doPut(Bytes.toBytes("row42"));<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      @Override<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      public boolean evaluate() throws Exception {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<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><a name="line.166"></a>
-<span class="sourceLineNo">167</span>    admin.removePeer("testCustomReplicationEndpoint");<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  @Test<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    int peerCount = admin.getPeersCount();<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    admin.addPeer(id,<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    // debug.  Peer needs to be up for the edit to make it across. This wait on<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // peer count seems to be a hack that has us not progress till peer is up.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (admin.getPeersCount() &lt;= peerCount) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      Threads.sleep(100);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // now replicate some data<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    doPut(row);<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public boolean evaluate() throws Exception {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        // only send over one edit.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        LOG.info("count=" + count);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        return ReplicationEndpointReturningFalse.replicated.get();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    });<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      throw ReplicationEndpointReturningFalse.ex.get();<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>    admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<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>  @Test<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  public void testInterClusterReplication() throws Exception {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    final String id = "testInterClusterReplication";<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    List&lt;HRegion&gt; regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    int totEdits = 0;<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // Make sure edits are spread across regions because we do region based batching<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    // before shipping edits.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    for(HRegion region: regions) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      RegionInfo hri = region.getRegionInfo();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      byte[] row = hri.getStartKey();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      for (int i = 0; i &lt; 100; i++) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        if (row.length &gt; 0) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          Put put = new Put(row);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          put.addColumn(famName, row, row);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          region.put(put);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          totEdits++;<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>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>    admin.addPeer(id,<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.229"></a>
-<span class="sourceLineNo">230</span>            .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        null);<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>    final int numEdits = totEdits;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      @Override<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      public boolean evaluate() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>      @Override<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      public String explainFailure() throws Exception {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.242"></a>
-<span class="sourceLineNo">243</span>            + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        return failure;<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>    admin.removePeer("testInterClusterReplication");<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    utility1.deleteTableData(tableName);<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>  @Test<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    //test that we can create mutliple WALFilters reflectively<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        EverythingPassesWALEntryFilter.class.getName() +<a name="line.258"></a>
-<span class="sourceLineNo">259</span>            "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // now replicate some data.<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      doPut(connection, Bytes.toBytes("row1"));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      doPut(connection, row);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      doPut(connection, Bytes.toBytes("row2"));<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      public boolean evaluate() throws Exception {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    });<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    //make sure our reflectively created filter is in the filter chain<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<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>  @Test (expected=IOException.class)<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  public void testWALEntryFilterAddValidation() throws Exception {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    //test that we can create mutliple WALFilters reflectively<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        "IAmNotARealWalEntryFilter");<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    admin.addPeer("testWALEntryFilterAddValidation", rpc);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  @Test (expected=IOException.class)<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    //test that we can create mutliple WALFilters reflectively<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        "IAmNotARealWalEntryFilter");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  }<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  @Test<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  public void testMetricsSourceBaseSourcePassthrough(){<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    /*<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    allows for custom JMX metrics.<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    the two layers of wrapping to the actual BaseSource.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    */<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    String id = "id";<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    Map&lt;String, MetricsReplicationSourceSource&gt; singleSourceSourceByTable = new HashMap&lt;&gt;();<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    MetricsSource source = new MetricsSource(id, singleSourceSource, globalSourceSource,<a name="line.322"></a>
-<span class="sourceLineNo">323</span>        singleSourceSourceByTable);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    String gaugeName = "gauge";<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    String singleGaugeName = "source.id." + gaugeName;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    String globalGaugeName = "source." + gaugeName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    long delta = 1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    String counterName = "counter";<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    String singleCounterName = "source.id." + counterName;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    String globalCounterName = "source." + counterName;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    long count = 2;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    source.decGauge(gaugeName, delta);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    source.getMetricsContext();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    source.getMetricsDescription();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    source.getMetricsJmxContext();<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    source.getMetricsName();<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    source.incCounters(counterName, count);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    source.incGauge(gaugeName, delta);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    source.init();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    source.removeMetric(gaugeName);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    source.setGauge(gaugeName, delta);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    source.updateHistogram(counterName, count);<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    verify(globalRms).getMetricsContext();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    verify(globalRms).getMetricsJmxContext();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    verify(globalRms).getMetricsName();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    verify(singleRms).incCounters(singleCounterName, count);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    verify(globalRms).incCounters(globalCounterName, count);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    verify(globalRms).init();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    verify(singleRms).removeMetric(singleGaugeName);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    verify(globalRms).removeMetric(globalGaugeName);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    //check singleSourceSourceByTable metrics.<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    // singleSourceSourceByTable map entry will be created only<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    // after calling #setAgeOfLastShippedOpByTable<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    boolean containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        .containsKey("RandomNewTable");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    Assert.assertEquals(false, containsRandomNewTable);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    source.setAgeOfLastShippedOpByTable(123L, "RandomNewTable");<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        .containsKey("RandomNewTable");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    Assert.assertEquals(true, containsRandomNewTable);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    MetricsReplicationSourceSource msr = source.getSingleSourceSourceByTable()<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        .get("RandomNewTable");<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // cannot put more concreate value here to verify because the age is arbitrary.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    // as long as it's greater than 0, we see it as correct answer.<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    Assert.assertTrue(msr.getLastShippedAge() &gt; 0);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private void doPut(byte[] row) throws IOException {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      doPut(connection, row);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    try (Table t = connection.getTable(tableName)) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      Put put = new Put(row);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      put.addColumn(famName, row, row);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      t.put(put);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>  private static void doAssert(byte[] row) throws Exception {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      return; // first call<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    List&lt;Cell&gt; cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    Assert.assertEquals(1, cells.size());<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      cells.get(0).getRowLength(), row, 0, row.length));<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    static UUID uuid = utility1.getRandomUUID();<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    static AtomicInteger contructedCount = new AtomicInteger();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    static AtomicInteger startedCount = new AtomicInteger();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    static volatile List&lt;Entry&gt; lastEntries = null;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public ReplicationEndpointForTest() {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      replicateCount.set(0);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      contructedCount.incrementAndGet();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    @Override<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    public UUID getPeerUUID() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      return uuid;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>    @Override<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      replicateCount.incrementAndGet();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      lastEntries = new ArrayList&lt;&gt;(replicateContext.entries);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      return true;<a name="line.425"></a>
+<span class="sourceLineNo">167</span>    doAssert(Bytes.toBytes("row42"));<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    admin.removePeer("testCustomReplicationEndpoint");<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  @Test<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    int peerCount = admin.getPeersCount();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    admin.addPeer(id,<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    // debug.  Peer needs to be up for the edit to make it across. This wait on<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    // peer count seems to be a hack that has us not progress till peer is up.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    if (admin.getPeersCount() &lt;= peerCount) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      Threads.sleep(100);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    // now replicate some data<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    doPut(row);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<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>        // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        // only send over one edit.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        LOG.info("count=" + count);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        return ReplicationEndpointReturningFalse.replicated.get();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    });<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      throw ReplicationEndpointReturningFalse.ex.get();<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>    admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  @Test<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  public void testInterClusterReplication() throws Exception {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    final String id = "testInterClusterReplication";<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>    List&lt;HRegion&gt; regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    int totEdits = 0;<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // Make sure edits are spread across regions because we do region based batching<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    // before shipping edits.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    for(HRegion region: regions) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      RegionInfo hri = region.getRegionInfo();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      byte[] row = hri.getStartKey();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      for (int i = 0; i &lt; 100; i++) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        if (row.length &gt; 0) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          Put put = new Put(row);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          put.addColumn(famName, row, row);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          region.put(put);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>          totEdits++;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>    admin.addPeer(id,<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.231"></a>
+<span class="sourceLineNo">232</span>            .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        null);<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>    final int numEdits = totEdits;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      @Override<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      public boolean evaluate() throws Exception {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<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>      public String explainFailure() throws Exception {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.244"></a>
+<span class="sourceLineNo">245</span>            + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        return failure;<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>    admin.removePeer("testInterClusterReplication");<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    utility1.deleteTableData(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">254</span>  @Test<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    //test that we can create mutliple WALFilters reflectively<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        EverythingPassesWALEntryFilter.class.getName() +<a name="line.260"></a>
+<span class="sourceLineNo">261</span>            "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    // now replicate some data.<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      doPut(connection, Bytes.toBytes("row1"));<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      doPut(connection, row);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      doPut(connection, Bytes.toBytes("row2"));<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      public boolean evaluate() throws Exception {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 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><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    //make sure our reflectively created filter is in the filter chain<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<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>  @Test (expected=IOException.class)<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  public void testWALEntryFilterAddValidation() throws Exception {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    //test that we can create mutliple WALFilters reflectively<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        "IAmNotARealWalEntryFilter");<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    admin.addPeer("testWALEntryFilterAddValidation", rpc);<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>  @Test (expected=IOException.class)<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    //test that we can create mutliple WALFilters reflectively<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        "IAmNotARealWalEntryFilter");<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  @Test<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public void testMetricsSourceBaseSourcePassthrough(){<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    /*<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    allows for custom JMX metrics.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    the two layers of wrapping to the actual BaseSource.<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    String id = "id";<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    MetricsReplicationSourceSource spyglobalSourceSource = spy(globalSourceSource);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    doNothing().when(spyglobalSourceSource).incrFailedRecoveryQueue();<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    Map&lt;String, MetricsReplicationSourceSource&gt; singleSourceSourceByTable = new HashMap&lt;&gt;();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    MetricsSource source = new MetricsSource(id, singleSourceSource, spyglobalSourceSource,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        singleSourceSourceByTable);<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    String gaugeName = "gauge";<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    String singleGaugeName = "source.id." + gaugeName;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    String globalGaugeName = "source." + gaugeName;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    long delta = 1;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    String counterName = "counter";<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    String singleCounterName = "source.id." + counterName;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    String globalCounterName = "source." + counterName;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    long count = 2;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    source.decGauge(gaugeName, delta);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    source.getMetricsContext();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    source.getMetricsDescription();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    source.getMetricsJmxContext();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    source.getMetricsName();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    source.incCounters(counterName, count);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    source.incGauge(gaugeName, delta);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    source.init();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    source.removeMetric(gaugeName);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    source.setGauge(gaugeName, delta);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    source.updateHistogram(counterName, count);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    source.incrFailedRecoveryQueue();<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>    verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    verify(globalRms).getMetricsContext();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    verify(globalRms).getMetricsJmxContext();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    verify(globalRms).getMetricsName();<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    verify(singleRms).incCounters(singleCounterName, count);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    verify(globalRms).incCounters(globalCounterName, count);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    verify(globalRms).init();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    verify(singleRms).removeMetric(singleGaugeName);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    verify(globalRms).removeMetric(globalGaugeName);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    verify(spyglobalSourceSource).incrFailedRecoveryQueue();<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    //check singleSourceSourceByTable metrics.<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    // singleSourceSourceByTable map entry will be created only<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    // after calling #setAgeOfLastShippedOpByTable<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    boolean containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        .containsKey("RandomNewTable");<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    Assert.assertEquals(false, containsRandomNewTable);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    source.setAgeOfLastShippedOpByTable(123L, "RandomNewTable");<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        .containsKey("RandomNewTable");<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    Assert.assertEquals(true, containsRandomNewTable);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    MetricsReplicationSourceSource msr = source.getSingleSourceSourceByTable()<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        .get("RandomNewTable");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    // cannot put more concreate value here to verify because the age is arbitrary.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    // as long as it's greater than 0, we see it as correct answer.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    Assert.assertTrue(msr.getLastShippedAge() &gt; 0);<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  private void doPut(byte[] row) throws IOException {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      doPut(connection, row);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    try (Table t = connection.getTable(tableName)) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      Put put = new Put(row);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      put.addColumn(famName, row, row);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      t.put(put);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  private static void doAssert(byte[] row) throws Exception {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      return; // first call<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    List&lt;Cell&gt; cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    Assert.assertEquals(1, cells.size());<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      cells.get(0).getRowLength(), row, 0, row.length));<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>  public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    static UUID uuid = utility1.getRandomUUID();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    static AtomicInteger contructedCount = new AtomicInteger();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    static AtomicInteger startedCount = new AtomicInteger();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    static volatile List&lt;Entry&gt; lastEntries = null;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>    public ReplicationEndpointForTest() {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      replicateCount.set(0);<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      contructedCount.incrementAndGet();<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>    @Override<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    public void start() {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      startAsync();<a name="line.430"></a>
+<span class="sourceLineNo">429</span>    public UUID getPeerUUID() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      return uuid;<a name="line.430"></a>
 <span class="sourceLineNo">431</span>    }<a name="line.431"></a>
 <span class="sourceLineNo">432</span><a name="line.432"></a>
 <span class="sourceLineNo">433</span>    @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    public void stop() {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      stopAsync();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    protected void doStart() {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      startedCount.incrementAndGet();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      notifyStarted();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>    @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    protected void doStop() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      stoppedCount.incrementAndGet();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      notifyStopped();<a name="line.447"></a>
+<span class="sourceLineNo">434</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      replicateCount.incrementAndGet();<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      lastEntries = new ArrayList&lt;&gt;(replicateContext.entries);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      return true;<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>    @Override<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    public void start() {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      startAsync();<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>    @Override<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    public void stop() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      stopAsync();<a name="line.447"></a>
 <span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  public static class InterClusterReplicationEndpointForTest<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      extends HBaseInterClusterReplicationEndpoint {<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    static boolean failedOnce;<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    public InterClusterReplicationEndpointForTest() {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      replicateCount.set(0);<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>    @Override<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      boolean success = super.replicate(replicateContext);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      if (success) {<a name="line.464"></a>
-<span cla

<TRUNCATED>

[06/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html
index ef39f9e..f188fed 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html
@@ -25,543 +25,555 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <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 static org.mockito.Mockito.mock;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.mockito.Mockito.verify;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.mockito.Mockito.when;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.HashMap;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Map;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.UUID;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.Callable;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.Cell;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Waiter;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Put;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Table;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.AfterClass;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.Assert;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.Before;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.BeforeClass;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.ClassRule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Test;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.experimental.categories.Category;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.slf4j.Logger;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.slf4j.LoggerFactory;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>/**<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.68"></a>
-<span class="sourceLineNo">069</span> */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.70"></a>
-<span class="sourceLineNo">071</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  @ClassRule<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.77"></a>
+<span class="sourceLineNo">020</span>import static org.mockito.Mockito.doNothing;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.mockito.Mockito.mock;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.mockito.Mockito.spy;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.mockito.Mockito.verify;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.mockito.Mockito.when;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.ArrayList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.List;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Map;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.UUID;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.Callable;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.Waiter;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Put;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.Table;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.junit.AfterClass;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.junit.Assert;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.Before;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.BeforeClass;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.ClassRule;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Test;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.experimental.categories.Category;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.slf4j.Logger;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.LoggerFactory;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>/**<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.70"></a>
+<span class="sourceLineNo">071</span> */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.72"></a>
+<span class="sourceLineNo">073</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  @ClassRule<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.77"></a>
 <span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  static int numRegionServers;<a name="line.79"></a>
+<span class="sourceLineNo">079</span>  private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.79"></a>
 <span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  @BeforeClass<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public static void setUpBeforeClass() throws Exception {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    TestReplicationBase.setUpBeforeClass();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<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>  @AfterClass<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public static void tearDownAfterClass() throws Exception {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    TestReplicationBase.tearDownAfterClass();<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    // check stop is called<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() &gt; 0);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  @Before<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public void setup() throws Exception {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    ReplicationEndpointForTest.contructedCount.set(0);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    ReplicationEndpointForTest.startedCount.set(0);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    ReplicationEndpointForTest.replicateCount.set(0);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    ReplicationEndpointForTest.lastEntries = null;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    final List&lt;RegionServerThread&gt; rsThreads =<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    for (RegionServerThread rs : rsThreads) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    // Wait for  all log roll to finish<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    utility1.waitFor(3000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      @Override<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      public boolean evaluate() throws Exception {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        for (RegionServerThread rs : rsThreads) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>            return false;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>          }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        return true;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      }<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>      @Override<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      public String explainFailure() throws Exception {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        List&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        for (RegionServerThread rs : rsThreads) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>            logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.123"></a>
-<span class="sourceLineNo">124</span>          }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<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><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  @Test<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public void testCustomReplicationEndpoint() throws Exception {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    // test installing a custom replication endpoint other than the default one.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    admin.addPeer("testCustomReplicationEndpoint",<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.135"></a>
-<span class="sourceLineNo">136</span>            .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>    // check whether the class has been constructed and started<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      @Override<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      public boolean evaluate() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        return ReplicationEndpointForTest.contructedCount.get() &gt;= numRegionServers;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    });<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      @Override<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      public boolean evaluate() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        return ReplicationEndpointForTest.startedCount.get() &gt;= numRegionServers;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    });<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.153"></a>
+<span class="sourceLineNo">081</span>  static int numRegionServers;<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  @BeforeClass<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static void setUpBeforeClass() throws Exception {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    TestReplicationBase.setUpBeforeClass();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  @AfterClass<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public static void tearDownAfterClass() throws Exception {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    TestReplicationBase.tearDownAfterClass();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    // check stop is called<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() &gt; 0);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  @Before<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public void setup() throws Exception {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    ReplicationEndpointForTest.contructedCount.set(0);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    ReplicationEndpointForTest.startedCount.set(0);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    ReplicationEndpointForTest.replicateCount.set(0);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    ReplicationEndpointForTest.lastEntries = null;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    final List&lt;RegionServerThread&gt; rsThreads =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    for (RegionServerThread rs : rsThreads) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    // Wait for  all log roll to finish<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    utility1.waitFor(3000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      @Override<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      public boolean evaluate() throws Exception {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        for (RegionServerThread rs : rsThreads) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>            return false;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        return true;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>      @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      public String explainFailure() throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        List&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        for (RegionServerThread rs : rsThreads) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>            logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>          }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<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>  }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  @Test<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  public void testCustomReplicationEndpoint() throws Exception {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // test installing a custom replication endpoint other than the default one.<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    admin.addPeer("testCustomReplicationEndpoint",<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.137"></a>
+<span class="sourceLineNo">138</span>            .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // check whether the class has been constructed and started<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      @Override<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      public boolean evaluate() throws Exception {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        return ReplicationEndpointForTest.contructedCount.get() &gt;= numRegionServers;<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      @Override<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      public boolean evaluate() throws Exception {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        return ReplicationEndpointForTest.startedCount.get() &gt;= numRegionServers;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    });<a name="line.153"></a>
 <span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // now replicate some data.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    doPut(Bytes.toBytes("row42"));<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      @Override<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      public boolean evaluate() throws Exception {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<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>    doAssert(Bytes.toBytes("row42"));<a name="line.165"></a>
+<span class="sourceLineNo">155</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>    // now replicate some data.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    doPut(Bytes.toBytes("row42"));<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      @Override<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      public boolean evaluate() throws Exception {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<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><a name="line.166"></a>
-<span class="sourceLineNo">167</span>    admin.removePeer("testCustomReplicationEndpoint");<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  @Test<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    int peerCount = admin.getPeersCount();<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    admin.addPeer(id,<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    // debug.  Peer needs to be up for the edit to make it across. This wait on<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // peer count seems to be a hack that has us not progress till peer is up.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (admin.getPeersCount() &lt;= peerCount) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      Threads.sleep(100);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // now replicate some data<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    doPut(row);<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public boolean evaluate() throws Exception {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        // only send over one edit.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        LOG.info("count=" + count);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        return ReplicationEndpointReturningFalse.replicated.get();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    });<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      throw ReplicationEndpointReturningFalse.ex.get();<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>    admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<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>  @Test<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  public void testInterClusterReplication() throws Exception {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    final String id = "testInterClusterReplication";<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    List&lt;HRegion&gt; regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    int totEdits = 0;<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // Make sure edits are spread across regions because we do region based batching<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    // before shipping edits.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    for(HRegion region: regions) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      RegionInfo hri = region.getRegionInfo();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      byte[] row = hri.getStartKey();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      for (int i = 0; i &lt; 100; i++) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        if (row.length &gt; 0) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          Put put = new Put(row);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          put.addColumn(famName, row, row);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          region.put(put);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          totEdits++;<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>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>    admin.addPeer(id,<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.229"></a>
-<span class="sourceLineNo">230</span>            .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        null);<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>    final int numEdits = totEdits;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      @Override<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      public boolean evaluate() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>      @Override<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      public String explainFailure() throws Exception {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.242"></a>
-<span class="sourceLineNo">243</span>            + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        return failure;<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>    admin.removePeer("testInterClusterReplication");<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    utility1.deleteTableData(tableName);<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>  @Test<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    //test that we can create mutliple WALFilters reflectively<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        EverythingPassesWALEntryFilter.class.getName() +<a name="line.258"></a>
-<span class="sourceLineNo">259</span>            "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // now replicate some data.<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      doPut(connection, Bytes.toBytes("row1"));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      doPut(connection, row);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      doPut(connection, Bytes.toBytes("row2"));<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      public boolean evaluate() throws Exception {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    });<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    //make sure our reflectively created filter is in the filter chain<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<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>  @Test (expected=IOException.class)<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  public void testWALEntryFilterAddValidation() throws Exception {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    //test that we can create mutliple WALFilters reflectively<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        "IAmNotARealWalEntryFilter");<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    admin.addPeer("testWALEntryFilterAddValidation", rpc);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  @Test (expected=IOException.class)<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    //test that we can create mutliple WALFilters reflectively<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        "IAmNotARealWalEntryFilter");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  }<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  @Test<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  public void testMetricsSourceBaseSourcePassthrough(){<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    /*<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    allows for custom JMX metrics.<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    the two layers of wrapping to the actual BaseSource.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    */<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    String id = "id";<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    Map&lt;String, MetricsReplicationSourceSource&gt; singleSourceSourceByTable = new HashMap&lt;&gt;();<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    MetricsSource source = new MetricsSource(id, singleSourceSource, globalSourceSource,<a name="line.322"></a>
-<span class="sourceLineNo">323</span>        singleSourceSourceByTable);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    String gaugeName = "gauge";<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    String singleGaugeName = "source.id." + gaugeName;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    String globalGaugeName = "source." + gaugeName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    long delta = 1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    String counterName = "counter";<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    String singleCounterName = "source.id." + counterName;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    String globalCounterName = "source." + counterName;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    long count = 2;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    source.decGauge(gaugeName, delta);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    source.getMetricsContext();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    source.getMetricsDescription();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    source.getMetricsJmxContext();<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    source.getMetricsName();<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    source.incCounters(counterName, count);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    source.incGauge(gaugeName, delta);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    source.init();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    source.removeMetric(gaugeName);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    source.setGauge(gaugeName, delta);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    source.updateHistogram(counterName, count);<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    verify(globalRms).getMetricsContext();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    verify(globalRms).getMetricsJmxContext();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    verify(globalRms).getMetricsName();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    verify(singleRms).incCounters(singleCounterName, count);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    verify(globalRms).incCounters(globalCounterName, count);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    verify(globalRms).init();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    verify(singleRms).removeMetric(singleGaugeName);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    verify(globalRms).removeMetric(globalGaugeName);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    //check singleSourceSourceByTable metrics.<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    // singleSourceSourceByTable map entry will be created only<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    // after calling #setAgeOfLastShippedOpByTable<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    boolean containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        .containsKey("RandomNewTable");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    Assert.assertEquals(false, containsRandomNewTable);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    source.setAgeOfLastShippedOpByTable(123L, "RandomNewTable");<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        .containsKey("RandomNewTable");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    Assert.assertEquals(true, containsRandomNewTable);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    MetricsReplicationSourceSource msr = source.getSingleSourceSourceByTable()<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        .get("RandomNewTable");<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // cannot put more concreate value here to verify because the age is arbitrary.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    // as long as it's greater than 0, we see it as correct answer.<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    Assert.assertTrue(msr.getLastShippedAge() &gt; 0);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private void doPut(byte[] row) throws IOException {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      doPut(connection, row);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    try (Table t = connection.getTable(tableName)) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      Put put = new Put(row);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      put.addColumn(famName, row, row);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      t.put(put);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>  private static void doAssert(byte[] row) throws Exception {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      return; // first call<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    List&lt;Cell&gt; cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    Assert.assertEquals(1, cells.size());<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      cells.get(0).getRowLength(), row, 0, row.length));<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    static UUID uuid = utility1.getRandomUUID();<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    static AtomicInteger contructedCount = new AtomicInteger();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    static AtomicInteger startedCount = new AtomicInteger();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    static volatile List&lt;Entry&gt; lastEntries = null;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public ReplicationEndpointForTest() {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      replicateCount.set(0);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      contructedCount.incrementAndGet();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    @Override<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    public UUID getPeerUUID() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      return uuid;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>    @Override<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      replicateCount.incrementAndGet();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      lastEntries = new ArrayList&lt;&gt;(replicateContext.entries);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      return true;<a name="line.425"></a>
+<span class="sourceLineNo">167</span>    doAssert(Bytes.toBytes("row42"));<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    admin.removePeer("testCustomReplicationEndpoint");<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  @Test<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    int peerCount = admin.getPeersCount();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    admin.addPeer(id,<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    // debug.  Peer needs to be up for the edit to make it across. This wait on<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    // peer count seems to be a hack that has us not progress till peer is up.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    if (admin.getPeersCount() &lt;= peerCount) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      Threads.sleep(100);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    // now replicate some data<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    doPut(row);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<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>        // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        // only send over one edit.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        LOG.info("count=" + count);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        return ReplicationEndpointReturningFalse.replicated.get();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    });<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      throw ReplicationEndpointReturningFalse.ex.get();<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>    admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  @Test<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  public void testInterClusterReplication() throws Exception {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    final String id = "testInterClusterReplication";<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>    List&lt;HRegion&gt; regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    int totEdits = 0;<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // Make sure edits are spread across regions because we do region based batching<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    // before shipping edits.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    for(HRegion region: regions) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      RegionInfo hri = region.getRegionInfo();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      byte[] row = hri.getStartKey();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      for (int i = 0; i &lt; 100; i++) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        if (row.length &gt; 0) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          Put put = new Put(row);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          put.addColumn(famName, row, row);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          region.put(put);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>          totEdits++;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>    admin.addPeer(id,<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.231"></a>
+<span class="sourceLineNo">232</span>            .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        null);<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>    final int numEdits = totEdits;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      @Override<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      public boolean evaluate() throws Exception {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<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>      public String explainFailure() throws Exception {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.244"></a>
+<span class="sourceLineNo">245</span>            + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        return failure;<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>    admin.removePeer("testInterClusterReplication");<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    utility1.deleteTableData(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">254</span>  @Test<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    //test that we can create mutliple WALFilters reflectively<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        EverythingPassesWALEntryFilter.class.getName() +<a name="line.260"></a>
+<span class="sourceLineNo">261</span>            "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    // now replicate some data.<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      doPut(connection, Bytes.toBytes("row1"));<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      doPut(connection, row);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      doPut(connection, Bytes.toBytes("row2"));<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      public boolean evaluate() throws Exception {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 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><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    //make sure our reflectively created filter is in the filter chain<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<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>  @Test (expected=IOException.class)<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  public void testWALEntryFilterAddValidation() throws Exception {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    //test that we can create mutliple WALFilters reflectively<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        "IAmNotARealWalEntryFilter");<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    admin.addPeer("testWALEntryFilterAddValidation", rpc);<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>  @Test (expected=IOException.class)<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    //test that we can create mutliple WALFilters reflectively<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        "IAmNotARealWalEntryFilter");<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  @Test<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public void testMetricsSourceBaseSourcePassthrough(){<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    /*<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    allows for custom JMX metrics.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    the two layers of wrapping to the actual BaseSource.<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    String id = "id";<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    MetricsReplicationSourceSource spyglobalSourceSource = spy(globalSourceSource);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    doNothing().when(spyglobalSourceSource).incrFailedRecoveryQueue();<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    Map&lt;String, MetricsReplicationSourceSource&gt; singleSourceSourceByTable = new HashMap&lt;&gt;();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    MetricsSource source = new MetricsSource(id, singleSourceSource, spyglobalSourceSource,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        singleSourceSourceByTable);<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    String gaugeName = "gauge";<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    String singleGaugeName = "source.id." + gaugeName;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    String globalGaugeName = "source." + gaugeName;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    long delta = 1;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    String counterName = "counter";<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    String singleCounterName = "source.id." + counterName;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    String globalCounterName = "source." + counterName;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    long count = 2;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    source.decGauge(gaugeName, delta);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    source.getMetricsContext();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    source.getMetricsDescription();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    source.getMetricsJmxContext();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    source.getMetricsName();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    source.incCounters(counterName, count);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    source.incGauge(gaugeName, delta);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    source.init();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    source.removeMetric(gaugeName);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    source.setGauge(gaugeName, delta);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    source.updateHistogram(counterName, count);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    source.incrFailedRecoveryQueue();<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>    verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    verify(globalRms).getMetricsContext();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    verify(globalRms).getMetricsJmxContext();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    verify(globalRms).getMetricsName();<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    verify(singleRms).incCounters(singleCounterName, count);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    verify(globalRms).incCounters(globalCounterName, count);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    verify(globalRms).init();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    verify(singleRms).removeMetric(singleGaugeName);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    verify(globalRms).removeMetric(globalGaugeName);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    verify(spyglobalSourceSource).incrFailedRecoveryQueue();<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    //check singleSourceSourceByTable metrics.<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    // singleSourceSourceByTable map entry will be created only<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    // after calling #setAgeOfLastShippedOpByTable<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    boolean containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        .containsKey("RandomNewTable");<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    Assert.assertEquals(false, containsRandomNewTable);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    source.setAgeOfLastShippedOpByTable(123L, "RandomNewTable");<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        .containsKey("RandomNewTable");<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    Assert.assertEquals(true, containsRandomNewTable);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    MetricsReplicationSourceSource msr = source.getSingleSourceSourceByTable()<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        .get("RandomNewTable");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    // cannot put more concreate value here to verify because the age is arbitrary.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    // as long as it's greater than 0, we see it as correct answer.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    Assert.assertTrue(msr.getLastShippedAge() &gt; 0);<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  private void doPut(byte[] row) throws IOException {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      doPut(connection, row);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    try (Table t = connection.getTable(tableName)) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      Put put = new Put(row);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      put.addColumn(famName, row, row);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      t.put(put);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  private static void doAssert(byte[] row) throws Exception {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      return; // first call<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    List&lt;Cell&gt; cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    Assert.assertEquals(1, cells.size());<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      cells.get(0).getRowLength(), row, 0, row.length));<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>  public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    static UUID uuid = utility1.getRandomUUID();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    static AtomicInteger contructedCount = new AtomicInteger();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    static AtomicInteger startedCount = new AtomicInteger();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    static volatile List&lt;Entry&gt; lastEntries = null;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>    public ReplicationEndpointForTest() {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      replicateCount.set(0);<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      contructedCount.incrementAndGet();<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>    @Override<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    public void start() {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      startAsync();<a name="line.430"></a>
+<span class="sourceLineNo">429</span>    public UUID getPeerUUID() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      return uuid;<a name="line.430"></a>
 <span class="sourceLineNo">431</span>    }<a name="line.431"></a>
 <span class="sourceLineNo">432</span><a name="line.432"></a>
 <span class="sourceLineNo">433</span>    @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    public void stop() {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      stopAsync();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    protected void doStart() {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      startedCount.incrementAndGet();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      notifyStarted();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>    @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    protected void doStop() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      stoppedCount.incrementAndGet();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      notifyStopped();<a name="line.447"></a>
+<span class="sourceLineNo">434</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      replicateCount.incrementAndGet();<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      lastEntries = new ArrayList&lt;&gt;(replicateContext.entries);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      return true;<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>    @Override<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    public void start() {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      startAsync();<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>    @Override<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    public void stop() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      stopAsync();<a name="line.447"></a>
 <span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  public static class InterClusterReplicationEndpointForTest<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      extends HBaseInterClusterReplicationEndpoint {<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    static boolean failedOnce;<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    public InterClusterReplicationEndpointForTest() {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      replicateCount.set(0);<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>    @Override<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      boolean success = super.replicate(replicateContext);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      if (success) {<a name="line.464"></a>
-<span class="sourceLineNo">46

<TRUNCATED>

[04/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html
index ef39f9e..f188fed 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html
@@ -25,543 +25,555 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <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 static org.mockito.Mockito.mock;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.mockito.Mockito.verify;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.mockito.Mockito.when;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.HashMap;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Map;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.UUID;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.Callable;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.Cell;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Waiter;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Put;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Table;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.AfterClass;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.Assert;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.Before;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.BeforeClass;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.ClassRule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Test;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.experimental.categories.Category;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.slf4j.Logger;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.slf4j.LoggerFactory;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>/**<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.68"></a>
-<span class="sourceLineNo">069</span> */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.70"></a>
-<span class="sourceLineNo">071</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  @ClassRule<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.77"></a>
+<span class="sourceLineNo">020</span>import static org.mockito.Mockito.doNothing;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.mockito.Mockito.mock;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.mockito.Mockito.spy;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.mockito.Mockito.verify;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.mockito.Mockito.when;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.ArrayList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.List;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Map;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.UUID;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.Callable;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.Waiter;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Put;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.Table;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.junit.AfterClass;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.junit.Assert;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.Before;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.BeforeClass;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.ClassRule;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Test;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.experimental.categories.Category;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.slf4j.Logger;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.LoggerFactory;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>/**<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.70"></a>
+<span class="sourceLineNo">071</span> */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.72"></a>
+<span class="sourceLineNo">073</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  @ClassRule<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.77"></a>
 <span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  static int numRegionServers;<a name="line.79"></a>
+<span class="sourceLineNo">079</span>  private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.79"></a>
 <span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  @BeforeClass<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public static void setUpBeforeClass() throws Exception {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    TestReplicationBase.setUpBeforeClass();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<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>  @AfterClass<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public static void tearDownAfterClass() throws Exception {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    TestReplicationBase.tearDownAfterClass();<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    // check stop is called<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() &gt; 0);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  @Before<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public void setup() throws Exception {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    ReplicationEndpointForTest.contructedCount.set(0);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    ReplicationEndpointForTest.startedCount.set(0);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    ReplicationEndpointForTest.replicateCount.set(0);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    ReplicationEndpointForTest.lastEntries = null;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    final List&lt;RegionServerThread&gt; rsThreads =<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    for (RegionServerThread rs : rsThreads) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    // Wait for  all log roll to finish<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    utility1.waitFor(3000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      @Override<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      public boolean evaluate() throws Exception {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        for (RegionServerThread rs : rsThreads) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>            return false;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>          }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        return true;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      }<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>      @Override<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      public String explainFailure() throws Exception {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        List&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        for (RegionServerThread rs : rsThreads) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>            logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.123"></a>
-<span class="sourceLineNo">124</span>          }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<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><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  @Test<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public void testCustomReplicationEndpoint() throws Exception {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    // test installing a custom replication endpoint other than the default one.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    admin.addPeer("testCustomReplicationEndpoint",<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.135"></a>
-<span class="sourceLineNo">136</span>            .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>    // check whether the class has been constructed and started<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      @Override<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      public boolean evaluate() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        return ReplicationEndpointForTest.contructedCount.get() &gt;= numRegionServers;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    });<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      @Override<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      public boolean evaluate() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        return ReplicationEndpointForTest.startedCount.get() &gt;= numRegionServers;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    });<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.153"></a>
+<span class="sourceLineNo">081</span>  static int numRegionServers;<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  @BeforeClass<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static void setUpBeforeClass() throws Exception {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    TestReplicationBase.setUpBeforeClass();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  @AfterClass<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public static void tearDownAfterClass() throws Exception {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    TestReplicationBase.tearDownAfterClass();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    // check stop is called<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() &gt; 0);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  @Before<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public void setup() throws Exception {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    ReplicationEndpointForTest.contructedCount.set(0);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    ReplicationEndpointForTest.startedCount.set(0);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    ReplicationEndpointForTest.replicateCount.set(0);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    ReplicationEndpointForTest.lastEntries = null;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    final List&lt;RegionServerThread&gt; rsThreads =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    for (RegionServerThread rs : rsThreads) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    // Wait for  all log roll to finish<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    utility1.waitFor(3000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      @Override<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      public boolean evaluate() throws Exception {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        for (RegionServerThread rs : rsThreads) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>            return false;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        return true;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>      @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      public String explainFailure() throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        List&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        for (RegionServerThread rs : rsThreads) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>            logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>          }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<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>  }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  @Test<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  public void testCustomReplicationEndpoint() throws Exception {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // test installing a custom replication endpoint other than the default one.<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    admin.addPeer("testCustomReplicationEndpoint",<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.137"></a>
+<span class="sourceLineNo">138</span>            .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // check whether the class has been constructed and started<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      @Override<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      public boolean evaluate() throws Exception {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        return ReplicationEndpointForTest.contructedCount.get() &gt;= numRegionServers;<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      @Override<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      public boolean evaluate() throws Exception {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        return ReplicationEndpointForTest.startedCount.get() &gt;= numRegionServers;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    });<a name="line.153"></a>
 <span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // now replicate some data.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    doPut(Bytes.toBytes("row42"));<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      @Override<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      public boolean evaluate() throws Exception {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<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>    doAssert(Bytes.toBytes("row42"));<a name="line.165"></a>
+<span class="sourceLineNo">155</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>    // now replicate some data.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    doPut(Bytes.toBytes("row42"));<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      @Override<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      public boolean evaluate() throws Exception {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<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><a name="line.166"></a>
-<span class="sourceLineNo">167</span>    admin.removePeer("testCustomReplicationEndpoint");<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  @Test<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    int peerCount = admin.getPeersCount();<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    admin.addPeer(id,<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    // debug.  Peer needs to be up for the edit to make it across. This wait on<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // peer count seems to be a hack that has us not progress till peer is up.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (admin.getPeersCount() &lt;= peerCount) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      Threads.sleep(100);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // now replicate some data<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    doPut(row);<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public boolean evaluate() throws Exception {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        // only send over one edit.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        LOG.info("count=" + count);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        return ReplicationEndpointReturningFalse.replicated.get();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    });<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      throw ReplicationEndpointReturningFalse.ex.get();<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>    admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<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>  @Test<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  public void testInterClusterReplication() throws Exception {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    final String id = "testInterClusterReplication";<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    List&lt;HRegion&gt; regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    int totEdits = 0;<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // Make sure edits are spread across regions because we do region based batching<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    // before shipping edits.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    for(HRegion region: regions) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      RegionInfo hri = region.getRegionInfo();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      byte[] row = hri.getStartKey();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      for (int i = 0; i &lt; 100; i++) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        if (row.length &gt; 0) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          Put put = new Put(row);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          put.addColumn(famName, row, row);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          region.put(put);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          totEdits++;<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>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>    admin.addPeer(id,<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.229"></a>
-<span class="sourceLineNo">230</span>            .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        null);<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>    final int numEdits = totEdits;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      @Override<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      public boolean evaluate() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>      @Override<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      public String explainFailure() throws Exception {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.242"></a>
-<span class="sourceLineNo">243</span>            + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        return failure;<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>    admin.removePeer("testInterClusterReplication");<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    utility1.deleteTableData(tableName);<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>  @Test<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    //test that we can create mutliple WALFilters reflectively<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        EverythingPassesWALEntryFilter.class.getName() +<a name="line.258"></a>
-<span class="sourceLineNo">259</span>            "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // now replicate some data.<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      doPut(connection, Bytes.toBytes("row1"));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      doPut(connection, row);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      doPut(connection, Bytes.toBytes("row2"));<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      public boolean evaluate() throws Exception {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    });<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    //make sure our reflectively created filter is in the filter chain<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<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>  @Test (expected=IOException.class)<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  public void testWALEntryFilterAddValidation() throws Exception {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    //test that we can create mutliple WALFilters reflectively<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        "IAmNotARealWalEntryFilter");<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    admin.addPeer("testWALEntryFilterAddValidation", rpc);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  @Test (expected=IOException.class)<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    //test that we can create mutliple WALFilters reflectively<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        "IAmNotARealWalEntryFilter");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  }<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  @Test<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  public void testMetricsSourceBaseSourcePassthrough(){<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    /*<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    allows for custom JMX metrics.<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    the two layers of wrapping to the actual BaseSource.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    */<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    String id = "id";<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    Map&lt;String, MetricsReplicationSourceSource&gt; singleSourceSourceByTable = new HashMap&lt;&gt;();<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    MetricsSource source = new MetricsSource(id, singleSourceSource, globalSourceSource,<a name="line.322"></a>
-<span class="sourceLineNo">323</span>        singleSourceSourceByTable);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    String gaugeName = "gauge";<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    String singleGaugeName = "source.id." + gaugeName;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    String globalGaugeName = "source." + gaugeName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    long delta = 1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    String counterName = "counter";<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    String singleCounterName = "source.id." + counterName;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    String globalCounterName = "source." + counterName;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    long count = 2;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    source.decGauge(gaugeName, delta);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    source.getMetricsContext();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    source.getMetricsDescription();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    source.getMetricsJmxContext();<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    source.getMetricsName();<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    source.incCounters(counterName, count);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    source.incGauge(gaugeName, delta);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    source.init();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    source.removeMetric(gaugeName);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    source.setGauge(gaugeName, delta);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    source.updateHistogram(counterName, count);<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    verify(globalRms).getMetricsContext();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    verify(globalRms).getMetricsJmxContext();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    verify(globalRms).getMetricsName();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    verify(singleRms).incCounters(singleCounterName, count);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    verify(globalRms).incCounters(globalCounterName, count);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    verify(globalRms).init();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    verify(singleRms).removeMetric(singleGaugeName);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    verify(globalRms).removeMetric(globalGaugeName);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    //check singleSourceSourceByTable metrics.<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    // singleSourceSourceByTable map entry will be created only<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    // after calling #setAgeOfLastShippedOpByTable<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    boolean containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        .containsKey("RandomNewTable");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    Assert.assertEquals(false, containsRandomNewTable);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    source.setAgeOfLastShippedOpByTable(123L, "RandomNewTable");<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        .containsKey("RandomNewTable");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    Assert.assertEquals(true, containsRandomNewTable);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    MetricsReplicationSourceSource msr = source.getSingleSourceSourceByTable()<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        .get("RandomNewTable");<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // cannot put more concreate value here to verify because the age is arbitrary.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    // as long as it's greater than 0, we see it as correct answer.<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    Assert.assertTrue(msr.getLastShippedAge() &gt; 0);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private void doPut(byte[] row) throws IOException {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      doPut(connection, row);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    try (Table t = connection.getTable(tableName)) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      Put put = new Put(row);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      put.addColumn(famName, row, row);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      t.put(put);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>  private static void doAssert(byte[] row) throws Exception {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      return; // first call<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    List&lt;Cell&gt; cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    Assert.assertEquals(1, cells.size());<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      cells.get(0).getRowLength(), row, 0, row.length));<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    static UUID uuid = utility1.getRandomUUID();<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    static AtomicInteger contructedCount = new AtomicInteger();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    static AtomicInteger startedCount = new AtomicInteger();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    static volatile List&lt;Entry&gt; lastEntries = null;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public ReplicationEndpointForTest() {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      replicateCount.set(0);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      contructedCount.incrementAndGet();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    @Override<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    public UUID getPeerUUID() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      return uuid;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>    @Override<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      replicateCount.incrementAndGet();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      lastEntries = new ArrayList&lt;&gt;(replicateContext.entries);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      return true;<a name="line.425"></a>
+<span class="sourceLineNo">167</span>    doAssert(Bytes.toBytes("row42"));<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    admin.removePeer("testCustomReplicationEndpoint");<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  @Test<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    int peerCount = admin.getPeersCount();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    admin.addPeer(id,<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    // debug.  Peer needs to be up for the edit to make it across. This wait on<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    // peer count seems to be a hack that has us not progress till peer is up.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    if (admin.getPeersCount() &lt;= peerCount) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      Threads.sleep(100);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    // now replicate some data<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    doPut(row);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<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>        // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        // only send over one edit.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        LOG.info("count=" + count);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        return ReplicationEndpointReturningFalse.replicated.get();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    });<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      throw ReplicationEndpointReturningFalse.ex.get();<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>    admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  @Test<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  public void testInterClusterReplication() throws Exception {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    final String id = "testInterClusterReplication";<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>    List&lt;HRegion&gt; regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    int totEdits = 0;<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // Make sure edits are spread across regions because we do region based batching<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    // before shipping edits.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    for(HRegion region: regions) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      RegionInfo hri = region.getRegionInfo();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      byte[] row = hri.getStartKey();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      for (int i = 0; i &lt; 100; i++) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        if (row.length &gt; 0) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          Put put = new Put(row);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          put.addColumn(famName, row, row);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          region.put(put);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>          totEdits++;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>    admin.addPeer(id,<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.231"></a>
+<span class="sourceLineNo">232</span>            .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        null);<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>    final int numEdits = totEdits;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      @Override<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      public boolean evaluate() throws Exception {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<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>      public String explainFailure() throws Exception {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.244"></a>
+<span class="sourceLineNo">245</span>            + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        return failure;<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>    admin.removePeer("testInterClusterReplication");<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    utility1.deleteTableData(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">254</span>  @Test<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    //test that we can create mutliple WALFilters reflectively<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        EverythingPassesWALEntryFilter.class.getName() +<a name="line.260"></a>
+<span class="sourceLineNo">261</span>            "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    // now replicate some data.<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      doPut(connection, Bytes.toBytes("row1"));<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      doPut(connection, row);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      doPut(connection, Bytes.toBytes("row2"));<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      public boolean evaluate() throws Exception {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 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><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    //make sure our reflectively created filter is in the filter chain<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<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>  @Test (expected=IOException.class)<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  public void testWALEntryFilterAddValidation() throws Exception {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    //test that we can create mutliple WALFilters reflectively<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        "IAmNotARealWalEntryFilter");<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    admin.addPeer("testWALEntryFilterAddValidation", rpc);<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>  @Test (expected=IOException.class)<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    //test that we can create mutliple WALFilters reflectively<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        "IAmNotARealWalEntryFilter");<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  @Test<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public void testMetricsSourceBaseSourcePassthrough(){<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    /*<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    allows for custom JMX metrics.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    the two layers of wrapping to the actual BaseSource.<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    String id = "id";<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    MetricsReplicationSourceSource spyglobalSourceSource = spy(globalSourceSource);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    doNothing().when(spyglobalSourceSource).incrFailedRecoveryQueue();<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    Map&lt;String, MetricsReplicationSourceSource&gt; singleSourceSourceByTable = new HashMap&lt;&gt;();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    MetricsSource source = new MetricsSource(id, singleSourceSource, spyglobalSourceSource,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        singleSourceSourceByTable);<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    String gaugeName = "gauge";<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    String singleGaugeName = "source.id." + gaugeName;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    String globalGaugeName = "source." + gaugeName;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    long delta = 1;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    String counterName = "counter";<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    String singleCounterName = "source.id." + counterName;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    String globalCounterName = "source." + counterName;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    long count = 2;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    source.decGauge(gaugeName, delta);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    source.getMetricsContext();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    source.getMetricsDescription();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    source.getMetricsJmxContext();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    source.getMetricsName();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    source.incCounters(counterName, count);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    source.incGauge(gaugeName, delta);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    source.init();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    source.removeMetric(gaugeName);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    source.setGauge(gaugeName, delta);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    source.updateHistogram(counterName, count);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    source.incrFailedRecoveryQueue();<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>    verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    verify(globalRms).getMetricsContext();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    verify(globalRms).getMetricsJmxContext();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    verify(globalRms).getMetricsName();<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    verify(singleRms).incCounters(singleCounterName, count);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    verify(globalRms).incCounters(globalCounterName, count);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    verify(globalRms).init();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    verify(singleRms).removeMetric(singleGaugeName);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    verify(globalRms).removeMetric(globalGaugeName);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    verify(spyglobalSourceSource).incrFailedRecoveryQueue();<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    //check singleSourceSourceByTable metrics.<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    // singleSourceSourceByTable map entry will be created only<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    // after calling #setAgeOfLastShippedOpByTable<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    boolean containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        .containsKey("RandomNewTable");<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    Assert.assertEquals(false, containsRandomNewTable);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    source.setAgeOfLastShippedOpByTable(123L, "RandomNewTable");<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        .containsKey("RandomNewTable");<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    Assert.assertEquals(true, containsRandomNewTable);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    MetricsReplicationSourceSource msr = source.getSingleSourceSourceByTable()<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        .get("RandomNewTable");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    // cannot put more concreate value here to verify because the age is arbitrary.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    // as long as it's greater than 0, we see it as correct answer.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    Assert.assertTrue(msr.getLastShippedAge() &gt; 0);<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  private void doPut(byte[] row) throws IOException {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      doPut(connection, row);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    try (Table t = connection.getTable(tableName)) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      Put put = new Put(row);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      put.addColumn(famName, row, row);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      t.put(put);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  private static void doAssert(byte[] row) throws Exception {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      return; // first call<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    List&lt;Cell&gt; cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    Assert.assertEquals(1, cells.size());<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      cells.get(0).getRowLength(), row, 0, row.length));<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>  public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    static UUID uuid = utility1.getRandomUUID();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    static AtomicInteger contructedCount = new AtomicInteger();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    static AtomicInteger startedCount = new AtomicInteger();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    static volatile List&lt;Entry&gt; lastEntries = null;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>    public ReplicationEndpointForTest() {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      replicateCount.set(0);<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      contructedCount.incrementAndGet();<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>    @Override<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    public void start() {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      startAsync();<a name="line.430"></a>
+<span class="sourceLineNo">429</span>    public UUID getPeerUUID() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      return uuid;<a name="line.430"></a>
 <span class="sourceLineNo">431</span>    }<a name="line.431"></a>
 <span class="sourceLineNo">432</span><a name="line.432"></a>
 <span class="sourceLineNo">433</span>    @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    public void stop() {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      stopAsync();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    protected void doStart() {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      startedCount.incrementAndGet();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      notifyStarted();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>    @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    protected void doStop() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      stoppedCount.incrementAndGet();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      notifyStopped();<a name="line.447"></a>
+<span class="sourceLineNo">434</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      replicateCount.incrementAndGet();<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      lastEntries = new ArrayList&lt;&gt;(replicateContext.entries);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      return true;<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>    @Override<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    public void start() {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      startAsync();<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>    @Override<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    public void stop() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      stopAsync();<a name="line.447"></a>
 <span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  public static class InterClusterReplicationEndpointForTest<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      extends HBaseInterClusterReplicationEndpoint {<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    static boolean failedOnce;<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    public InterClusterReplicationEndpointForTest() {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      replicateCount.set(0);<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>    @Override<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      boolean success = super.replicate(replicateContext);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      if (success) 

<TRUNCATED>

[24/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html b/devapidocs/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html
index 85c6bf7..20c5cc1 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html
@@ -374,8 +374,10 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#getReplicableHFiles0-java.lang.String-">getReplicableHFiles0</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="i24" class="altColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#getRsNode-org.apache.hadoop.hbase.ServerName-">getRsNode</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#getRsNode-org.apache.hadoop.hbase.ServerName-">getRsNode</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
+<div class="block">Get full znode name for given region server</div>
+</td>
 </tr>
 <tr id="i25" class="rowColor">
 <td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
@@ -621,7 +623,17 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getRsNode</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.121">getRsNode</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/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/ZKReplicationQueueStorage.html#line.122">getRsNode</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getRsNode-org.apache.hadoop.hbase.ServerName-">ReplicationQueueStorage</a></code></span></div>
+<div class="block">Get full znode name for given region server</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getRsNode-org.apache.hadoop.hbase.ServerName-">getRsNode</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>serverName</code> - the name of the region server</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>full znode name</dd>
+</dl>
 </li>
 </ul>
 <a name="getQueueNode-org.apache.hadoop.hbase.ServerName-java.lang.String-">
@@ -630,7 +642,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getQueueNode</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.125">getQueueNode</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.126">getQueueNode</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId)</pre>
 </li>
 </ul>
@@ -640,7 +652,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileNode</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.129">getFileNode</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;queueNode,
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.130">getFileNode</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;queueNode,
                            <a href="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;fileName)</pre>
 </li>
 </ul>
@@ -650,7 +662,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileNode</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.133">getFileNode</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.134">getFileNode</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId,
                            <a href="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;fileName)</pre>
 </li>
@@ -661,7 +673,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getSerialReplicationRegionPeerNode</h4>
-<pre><a href="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/ZKReplicationQueueStorage.html#line.161">getSerialReplicationRegionPeerNode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName,
+<pre><a href="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/ZKReplicationQueueStorage.html#line.162">getSerialReplicationRegionPeerNode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName,
                                           <a href="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"><p>
  Put all regions under /hbase/replication/regions znode will lead to too many children because
@@ -696,7 +708,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>removeQueue</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.173">removeQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.174">removeQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId)
                  throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removeQueue-org.apache.hadoop.hbase.ServerName-java.lang.String-">ReplicationQueueStorage</a></code></span></div>
@@ -718,7 +730,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>addWAL</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.183">addWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.184">addWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId,
                    <a href="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;fileName)
             throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
@@ -743,7 +755,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>removeWAL</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.194">removeWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.195">removeWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId,
                       <a href="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;fileName)
                throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
@@ -767,7 +779,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>addLastSeqIdsToOps</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.207">addLastSeqIdsToOps</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;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.208">addLastSeqIdsToOps</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="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;lastSeqIds,
                                 <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/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&gt;&nbsp;listOfOps)
                          throws org.apache.zookeeper.KeeperException,
@@ -785,7 +797,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>setWALPosition</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.231">setWALPosition</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.232">setWALPosition</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId,
                            <a href="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;fileName,
                            long&nbsp;position,
@@ -813,7 +825,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastSequenceIdWithVersion</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.266">getLastSequenceIdWithVersion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.267">getLastSequenceIdWithVersion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName,
                                                           <a href="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 org.apache.zookeeper.KeeperException</pre>
 <div class="block">Return the {lastPushedSequenceId, ZNodeDataVersion} pair. if ZNodeDataVersion is -1, it means
@@ -830,7 +842,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastSequenceId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.285">getLastSequenceId</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.286">getLastSequenceId</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName,
                               <a href="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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getLastSequenceId-java.lang.String-java.lang.String-">ReplicationQueueStorage</a></code></span></div>
@@ -855,7 +867,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>setLastSequenceIds</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.296">setLastSequenceIds</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/ZKReplicationQueueStorage.html#line.297">setLastSequenceIds</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/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;lastSeqIds)
                         throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#setLastSequenceIds-java.lang.String-java.util.Map-">ReplicationQueueStorage</a></code></span></div>
@@ -878,7 +890,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>removeLastSequenceIds</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.317">removeLastSequenceIds</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/ZKReplicationQueueStorage.html#line.318">removeLastSequenceIds</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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removeLastSequenceIds-java.lang.String-">ReplicationQueueStorage</a></code></span></div>
 <div class="block">Remove all the max sequence id record for the given peer.</div>
@@ -898,7 +910,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>removeLastSequenceIds</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.351">removeLastSequenceIds</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/ZKReplicationQueueStorage.html#line.352">removeLastSequenceIds</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;encodedRegionNames)
                            throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removeLastSequenceIds-java.lang.String-java.util.List-">ReplicationQueueStorage</a></code></span></div>
@@ -920,7 +932,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALPosition</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.365">getWALPosition</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.366">getWALPosition</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId,
                            <a href="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;fileName)
                     throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
@@ -946,7 +958,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>claimQueue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/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/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.385">claimQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sourceServerName,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/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/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.386">claimQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sourceServerName,
                                                  <a href="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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;destServerName)
                                           throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
@@ -972,7 +984,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>removeReplicatorIfQueueIsEmpty</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.443">removeReplicatorIfQueueIsEmpty</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.444">removeReplicatorIfQueueIsEmpty</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
                                     throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removeReplicatorIfQueueIsEmpty-org.apache.hadoop.hbase.ServerName-">ReplicationQueueStorage</a></code></span></div>
 <div class="block">Remove the record of region server if the queue is empty.</div>
@@ -990,7 +1002,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getListOfReplicators0</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.453">getListOfReplicators0</a>()
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.454">getListOfReplicators0</a>()
                                         throws org.apache.zookeeper.KeeperException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1004,7 +1016,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getListOfReplicators</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.462">getListOfReplicators</a>()
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.463">getListOfReplicators</a>()
                                       throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getListOfReplicators--">ReplicationQueueStorage</a></code></span></div>
 <div class="block">Get a list of all region servers that have outstanding replication queues. These servers could
@@ -1025,7 +1037,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALsInQueue0</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/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/ZKReplicationQueueStorage.html#line.470">getWALsInQueue0</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/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/ZKReplicationQueueStorage.html#line.471">getWALsInQueue0</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId)
                               throws org.apache.zookeeper.KeeperException</pre>
 <dl>
@@ -1040,7 +1052,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALsInQueue</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="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/ZKReplicationQueueStorage.html#line.478">getWALsInQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>public&nbsp;<a href="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/ZKReplicationQueueStorage.html#line.479">getWALsInQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId)
                             throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getWALsInQueue-org.apache.hadoop.hbase.ServerName-java.lang.String-">ReplicationQueueStorage</a></code></span></div>
@@ -1064,7 +1076,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllQueues0</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/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/ZKReplicationQueueStorage.html#line.489">getAllQueues0</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/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/ZKReplicationQueueStorage.html#line.490">getAllQueues0</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
                             throws org.apache.zookeeper.KeeperException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1078,7 +1090,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllQueues</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="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/ZKReplicationQueueStorage.html#line.495">getAllQueues</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
+<pre>public&nbsp;<a href="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/ZKReplicationQueueStorage.html#line.496">getAllQueues</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
                           throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getAllQueues-org.apache.hadoop.hbase.ServerName-">ReplicationQueueStorage</a></code></span></div>
 <div class="block">Get a list of all queues for the specified region server.</div>
@@ -1100,7 +1112,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getQueuesZNodeCversion</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.505">getQueuesZNodeCversion</a>()
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.506">getQueuesZNodeCversion</a>()
                               throws org.apache.zookeeper.KeeperException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1114,7 +1126,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllWALs</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/ZKReplicationQueueStorage.html#line.512">getAllWALs</a>()
+<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/ZKReplicationQueueStorage.html#line.513">getAllWALs</a>()
                        throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getAllWALs--">ReplicationQueueStorage</a></code></span></div>
 <div class="block">Load all wals in all replication queues. This method guarantees to return a snapshot which
@@ -1134,7 +1146,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getHFileRefsPeerNode</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.539">getHFileRefsPeerNode</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>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.540">getHFileRefsPeerNode</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="getHFileNode-java.lang.String-java.lang.String-">
@@ -1143,7 +1155,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getHFileNode</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.543">getHFileNode</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;peerNode,
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.544">getHFileNode</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;peerNode,
                             <a href="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;fileName)</pre>
 </li>
 </ul>
@@ -1153,7 +1165,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>addPeerToHFileRefs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.548">addPeerToHFileRefs</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/ZKReplicationQueueStorage.html#line.549">addPeerToHFileRefs</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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#addPeerToHFileRefs-java.lang.String-">ReplicationQueueStorage</a></code></span></div>
 <div class="block">Add a peer to hfile reference queue if peer does not exist.</div>
@@ -1173,7 +1185,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>removePeerFromHFileRefs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.562">removePeerFromHFileRefs</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/ZKReplicationQueueStorage.html#line.563">removePeerFromHFileRefs</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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removePeerFromHFileRefs-java.lang.String-">ReplicationQueueStorage</a></code></span></div>
 <div class="block">Remove a peer from hfile reference queue.</div>
@@ -1193,7 +1205,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>addHFileRefs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.578">addHFileRefs</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/ZKReplicationQueueStorage.html#line.579">addHFileRefs</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="../../../../../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="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#addHFileRefs-java.lang.String-java.util.List-">ReplicationQueueStorage</a></code></span></div>
@@ -1216,7 +1228,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>removeHFileRefs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.595">removeHFileRefs</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/ZKReplicationQueueStorage.html#line.596">removeHFileRefs</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)
                      throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removeHFileRefs-java.lang.String-java.util.List-">ReplicationQueueStorage</a></code></span></div>
@@ -1238,7 +1250,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllPeersFromHFileRefsQueue0</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/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/ZKReplicationQueueStorage.html#line.610">getAllPeersFromHFileRefsQueue0</a>()
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/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/ZKReplicationQueueStorage.html#line.611">getAllPeersFromHFileRefsQueue0</a>()
                                              throws org.apache.zookeeper.KeeperException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1252,7 +1264,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllPeersFromHFileRefsQueue</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="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/ZKReplicationQueueStorage.html#line.616">getAllPeersFromHFileRefsQueue</a>()
+<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="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/ZKReplicationQueueStorage.html#line.617">getAllPeersFromHFileRefsQueue</a>()
                                            throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getAllPeersFromHFileRefsQueue--">ReplicationQueueStorage</a></code></span></div>
 <div class="block">Get list of all peers from hfile reference queue.</div>
@@ -1272,7 +1284,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicableHFiles0</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/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/ZKReplicationQueueStorage.html#line.625">getReplicableHFiles0</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="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/ZKReplicationQueueStorage.html#line.626">getReplicableHFiles0</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 org.apache.zookeeper.KeeperException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1286,7 +1298,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicableHFiles</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="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/ZKReplicationQueueStorage.html#line.632">getReplicableHFiles</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="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/ZKReplicationQueueStorage.html#line.633">getReplicableHFiles</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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getReplicableHFiles-java.lang.String-">ReplicationQueueStorage</a></code></span></div>
 <div class="block">Get a list of all hfile references in the given peer.</div>
@@ -1308,7 +1320,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>getHFileRefsZNodeCversion</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.643">getHFileRefsZNodeCversion</a>()
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.644">getHFileRefsZNodeCversion</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>
@@ -1322,7 +1334,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getAllHFileRefs</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/ZKReplicationQueueStorage.html#line.654">getAllHFileRefs</a>()
+<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/ZKReplicationQueueStorage.html#line.655">getAllHFileRefs</a>()
                             throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getAllHFileRefs--">ReplicationQueueStorage</a></code></span></div>
 <div class="block">Load all hfile references in all replication queues. This method guarantees to return a


[21/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html
index e77672f..edd489e 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":42,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":42,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -339,107 +339,111 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource
 </tr>
 <tr id="i21" class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#incrFailedRecoveryQueue--">incrFailedRecoveryQueue</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i22" class="altColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#incrLogEditsFiltered--">incrLogEditsFiltered</a></span>()</code>
 <div class="block">The number of log edits filtered out.</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#incrLogEditsFiltered-long-">incrLogEditsFiltered</a></span>(long&nbsp;delta)</code>
 <div class="block">Add on the number of log edits filtered</div>
 </td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#incrLogEditsRead--">incrLogEditsRead</a></span>()</code>
 <div class="block">Increment the number of log edits read by one.</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#incrLogEditsRead-long-">incrLogEditsRead</a></span>(long&nbsp;delta)</code>
 <div class="block">Add on the the number of log edits read</div>
 </td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#incrLogReadInBytes-long-">incrLogReadInBytes</a></span>(long&nbsp;readInBytes)</code>
 <div class="block">increase the byte number read by source from log file</div>
 </td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#incrRepeatedFileBytes-long-">incrRepeatedFileBytes</a></span>(long&nbsp;bytes)</code>&nbsp;</td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#incrRestartedWALReading--">incrRestartedWALReading</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#incrSizeOfHFileRefsQueue-long-">incrSizeOfHFileRefsQueue</a></span>(long&nbsp;size)</code>&nbsp;</td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#incrSizeOfLogQueue--">incrSizeOfLogQueue</a></span>()</code>
 <div class="block">Increment size of the log queue.</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#incrUncleanlyClosedWALs--">incrUncleanlyClosedWALs</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#incrUnknownFileLengthForClosedWAL--">incrUnknownFileLengthForClosedWAL</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#init--">init</a></span>()</code>
 <div class="block">Clear out the metrics and re-prepare the source.</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#refreshAgeOfLastShippedOp-java.lang.String-">refreshAgeOfLastShippedOp</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;walGroupId)</code>
 <div class="block">Convenience method to use the last given timestamp to refresh the age of the last edit.</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#removeMetric-java.lang.String-">removeMetric</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;key)</code>
 <div class="block">Remove a metric and no longer announce it.</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#setAgeOfLastShippedOp-long-java.lang.String-">setAgeOfLastShippedOp</a></span>(long&nbsp;timestamp,
                      <a href="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;walGroup)</code>
 <div class="block">Set the age of the last edit that was shipped</div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#setAgeOfLastShippedOpByTable-long-java.lang.String-">setAgeOfLastShippedOpByTable</a></span>(long&nbsp;timestamp,
                             <a href="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;tableName)</code>
 <div class="block">Set the age of the last edit that was shipped group by table</div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#setGauge-java.lang.String-long-">setGauge</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;gaugeName,
         long&nbsp;value)</code>
 <div class="block">Set a gauge to a specific value.</div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#shipBatch-long-int-">shipBatch</a></span>(long&nbsp;batchSize,
          int&nbsp;sizeInBytes)</code>
 <div class="block">Convience method to apply changes to metrics do to shipping a batch of logs.</div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#shipBatch-long-int-long-">shipBatch</a></span>(long&nbsp;batchSize,
          int&nbsp;sizeInBytes,
@@ -447,7 +451,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource
 <div class="block">Convience method to apply changes to metrics do to shipping a batch of logs.</div>
 </td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#updateHistogram-java.lang.String-long-">updateHistogram</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                long&nbsp;value)</code>
@@ -957,13 +961,22 @@ public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.324">incrCompletedRecoveryQueue</a>()</pre>
 </li>
 </ul>
+<a name="incrFailedRecoveryQueue--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>incrFailedRecoveryQueue</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.329">incrFailedRecoveryQueue</a>()</pre>
+</li>
+</ul>
 <a name="init--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.330">init</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.334">init</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#init--">BaseSource</a></code></span></div>
 <div class="block">Clear out the metrics and re-prepare the source.</div>
 <dl>
@@ -978,7 +991,7 @@ public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>setGauge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.336">setGauge</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;gaugeName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.340">setGauge</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;gaugeName,
                      long&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#setGauge-java.lang.String-long-">BaseSource</a></code></span></div>
 <div class="block">Set a gauge to a specific value.</div>
@@ -997,7 +1010,7 @@ public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>incGauge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.342">incGauge</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;gaugeName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.346">incGauge</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;gaugeName,
                      long&nbsp;delta)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#incGauge-java.lang.String-long-">BaseSource</a></code></span></div>
 <div class="block">Add some amount to a gauge.</div>
@@ -1016,7 +1029,7 @@ public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>decGauge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.348">decGauge</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;gaugeName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.352">decGauge</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;gaugeName,
                      long&nbsp;delta)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#decGauge-java.lang.String-long-">BaseSource</a></code></span></div>
 <div class="block">Subtract some amount from a gauge.</div>
@@ -1035,7 +1048,7 @@ public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>removeMetric</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.354">removeMetric</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;key)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.358">removeMetric</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;key)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#removeMetric-java.lang.String-">BaseSource</a></code></span></div>
 <div class="block">Remove a metric and no longer announce it.</div>
 <dl>
@@ -1052,7 +1065,7 @@ public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>incCounters</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.360">incCounters</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;counterName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.364">incCounters</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;counterName,
                         long&nbsp;delta)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#incCounters-java.lang.String-long-">BaseSource</a></code></span></div>
 <div class="block">Add some amount to a counter.</div>
@@ -1071,7 +1084,7 @@ public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>updateHistogram</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.366">updateHistogram</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.370">updateHistogram</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                             long&nbsp;value)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#updateHistogram-java.lang.String-long-">BaseSource</a></code></span></div>
 <div class="block">Add some value to a histogram.</div>
@@ -1090,7 +1103,7 @@ public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetricsContext</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/MetricsSource.html#line.372">getMetricsContext</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/MetricsSource.html#line.376">getMetricsContext</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#getMetricsContext--">BaseSource</a></code></span></div>
 <div class="block">Get the metrics context.  For hadoop metrics2 system this is usually an all lowercased string.
  eg. regionserver, master, thriftserver</div>
@@ -1108,7 +1121,7 @@ public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetricsDescription</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/MetricsSource.html#line.377">getMetricsDescription</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/MetricsSource.html#line.381">getMetricsDescription</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#getMetricsDescription--">BaseSource</a></code></span></div>
 <div class="block">Get the description of what this source exposes.</div>
 <dl>
@@ -1123,7 +1136,7 @@ public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetricsJmxContext</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/MetricsSource.html#line.382">getMetricsJmxContext</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/MetricsSource.html#line.386">getMetricsJmxContext</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#getMetricsJmxContext--">BaseSource</a></code></span></div>
 <div class="block">Get the name of the context in JMX that this source will be exposed through.
  This is in ObjectName format. With the default context being Hadoop -&gt; HBase</div>
@@ -1139,7 +1152,7 @@ public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetricsName</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/MetricsSource.html#line.387">getMetricsName</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/MetricsSource.html#line.391">getMetricsName</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html#getMetricsName--">BaseSource</a></code></span></div>
 <div class="block">Get the name of the metrics that are being exported by this source.
  Eg. IPC, GC, WAL</div>
@@ -1155,7 +1168,7 @@ public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getSingleSourceSourceByTable</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/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.392">getSingleSourceSourceByTable</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="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#line.396">getSingleSourceSourceByTable</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/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 44ab4fc..e34cac6 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
@@ -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.831">ReplicationSourceManager.NodeFailoverWorker</a>
+<pre>class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.834">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>
@@ -250,7 +250,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <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.833">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.836">deadRS</a></pre>
 </li>
 </ul>
 <a name="peersSnapshot">
@@ -259,7 +259,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <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.841">peersSnapshot</a></pre>
+<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.844">peersSnapshot</a></pre>
 </li>
 </ul>
 </li>
@@ -276,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.844">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.847">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>
@@ -293,7 +293,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <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.850">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,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.853">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>
@@ -303,7 +303,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.856">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.859">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/37b8a04a/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 6aec37e..4365151 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.565">ReplicationSourceManager.ReplicationQueueOperation</a></pre>
+private static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.566">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.566">exec</a>()
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html#line.567">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>


[17/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html
index 13d09d1..6c7169e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html
@@ -60,209 +60,215 @@
 <span class="sourceLineNo">052</span>  private final MutableFastCounter repeatedFileBytes;<a name="line.52"></a>
 <span class="sourceLineNo">053</span>  private final MutableFastCounter completedWAL;<a name="line.53"></a>
 <span class="sourceLineNo">054</span>  private final MutableFastCounter completedRecoveryQueue;<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  public MetricsReplicationGlobalSourceSource(MetricsReplicationSourceImpl rms) {<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    this.rms = rms;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>    ageOfLastShippedOpHist = rms.getMetricsRegistry().getHistogram(SOURCE_AGE_OF_LAST_SHIPPED_OP);<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>    sizeOfLogQueueGauge = rms.getMetricsRegistry().getGauge(SOURCE_SIZE_OF_LOG_QUEUE, 0L);<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>    shippedBatchesCounter = rms.getMetricsRegistry().getCounter(SOURCE_SHIPPED_BATCHES, 0L);<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>    shippedOpsCounter = rms.getMetricsRegistry().getCounter(SOURCE_SHIPPED_OPS, 0L);<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>    shippedKBsCounter = rms.getMetricsRegistry().getCounter(SOURCE_SHIPPED_KBS, 0L);<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>    shippedBytesCounter = rms.getMetricsRegistry().getCounter(SOURCE_SHIPPED_BYTES, 0L);<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>    logReadInBytesCounter = rms.getMetricsRegistry().getCounter(SOURCE_LOG_READ_IN_BYTES, 0L);<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>    logReadInEditsCounter = rms.getMetricsRegistry().getCounter(SOURCE_LOG_READ_IN_EDITS, 0L);<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>    logEditsFilteredCounter = rms.getMetricsRegistry().getCounter(SOURCE_LOG_EDITS_FILTERED, 0L);<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>    shippedHFilesCounter = rms.getMetricsRegistry().getCounter(SOURCE_SHIPPED_HFILES, 0L);<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>    sizeOfHFileRefsQueueGauge =<a name="line.79"></a>
-<span class="sourceLineNo">080</span>        rms.getMetricsRegistry().getGauge(SOURCE_SIZE_OF_HFILE_REFS_QUEUE, 0L);<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>    unknownFileLengthForClosedWAL = rms.getMetricsRegistry()<a name="line.82"></a>
-<span class="sourceLineNo">083</span>            .getCounter(SOURCE_CLOSED_LOGS_WITH_UNKNOWN_LENGTH, 0L);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    uncleanlyClosedWAL = rms.getMetricsRegistry().getCounter(SOURCE_UNCLEANLY_CLOSED_LOGS, 0L);<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    uncleanlyClosedSkippedBytes = rms.getMetricsRegistry()<a name="line.85"></a>
-<span class="sourceLineNo">086</span>            .getCounter(SOURCE_UNCLEANLY_CLOSED_IGNORED_IN_BYTES, 0L);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    restartWALReading = rms.getMetricsRegistry().getCounter(SOURCE_RESTARTED_LOG_READING, 0L);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    repeatedFileBytes = rms.getMetricsRegistry().getCounter(SOURCE_REPEATED_LOG_FILE_BYTES, 0L);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    completedWAL = rms.getMetricsRegistry().getCounter(SOURCE_COMPLETED_LOGS, 0L);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    completedRecoveryQueue = rms.getMetricsRegistry()<a name="line.90"></a>
-<span class="sourceLineNo">091</span>            .getCounter(SOURCE_COMPLETED_RECOVERY_QUEUES, 0L);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  @Override public void setLastShippedAge(long age) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    ageOfLastShippedOpHist.add(age);<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>  @Override public void incrSizeOfLogQueue(int size) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    sizeOfLogQueueGauge.incr(size);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  @Override public void decrSizeOfLogQueue(int size) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    sizeOfLogQueueGauge.decr(size);<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>  @Override public void incrLogReadInEdits(long size) {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    logReadInEditsCounter.incr(size);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>  @Override public void incrLogEditsFiltered(long size) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    logEditsFilteredCounter.incr(size);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>  @Override public void incrBatchesShipped(int batches) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    shippedBatchesCounter.incr(batches);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  @Override public void incrOpsShipped(long ops) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    shippedOpsCounter.incr(ops);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  @Override public void incrShippedBytes(long size) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    shippedBytesCounter.incr(size);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    // obtained value maybe smaller than 1024. We should make sure that KB count<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    // eventually picks up even from multiple smaller updates.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    incrementKBsCounter(shippedBytesCounter, shippedKBsCounter);<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>  static void incrementKBsCounter(MutableFastCounter bytesCounter, MutableFastCounter kbsCounter) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    // Following code should be thread-safe.<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    long delta = 0;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    while(true) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      long bytes = bytesCounter.value();<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      delta = (bytes / 1024) - kbsCounter.value();<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      if (delta &gt; 0) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        kbsCounter.incr(delta);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      } else {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>        break;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      }<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>  @Override public void incrLogReadInBytes(long size) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    logReadInBytesCounter.incr(size);<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>  @Override public void clear() {<a name="line.147"></a>
+<span class="sourceLineNo">055</span>  private final MutableFastCounter failedRecoveryQueue;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public MetricsReplicationGlobalSourceSource(MetricsReplicationSourceImpl rms) {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    this.rms = rms;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>    ageOfLastShippedOpHist = rms.getMetricsRegistry().getHistogram(SOURCE_AGE_OF_LAST_SHIPPED_OP);<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>    sizeOfLogQueueGauge = rms.getMetricsRegistry().getGauge(SOURCE_SIZE_OF_LOG_QUEUE, 0L);<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>    shippedBatchesCounter = rms.getMetricsRegistry().getCounter(SOURCE_SHIPPED_BATCHES, 0L);<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>    shippedOpsCounter = rms.getMetricsRegistry().getCounter(SOURCE_SHIPPED_OPS, 0L);<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    shippedKBsCounter = rms.getMetricsRegistry().getCounter(SOURCE_SHIPPED_KBS, 0L);<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>    shippedBytesCounter = rms.getMetricsRegistry().getCounter(SOURCE_SHIPPED_BYTES, 0L);<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>    logReadInBytesCounter = rms.getMetricsRegistry().getCounter(SOURCE_LOG_READ_IN_BYTES, 0L);<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>    logReadInEditsCounter = rms.getMetricsRegistry().getCounter(SOURCE_LOG_READ_IN_EDITS, 0L);<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>    logEditsFilteredCounter = rms.getMetricsRegistry().getCounter(SOURCE_LOG_EDITS_FILTERED, 0L);<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>    shippedHFilesCounter = rms.getMetricsRegistry().getCounter(SOURCE_SHIPPED_HFILES, 0L);<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>    sizeOfHFileRefsQueueGauge =<a name="line.80"></a>
+<span class="sourceLineNo">081</span>        rms.getMetricsRegistry().getGauge(SOURCE_SIZE_OF_HFILE_REFS_QUEUE, 0L);<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>    unknownFileLengthForClosedWAL = rms.getMetricsRegistry()<a name="line.83"></a>
+<span class="sourceLineNo">084</span>            .getCounter(SOURCE_CLOSED_LOGS_WITH_UNKNOWN_LENGTH, 0L);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    uncleanlyClosedWAL = rms.getMetricsRegistry().getCounter(SOURCE_UNCLEANLY_CLOSED_LOGS, 0L);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    uncleanlyClosedSkippedBytes = rms.getMetricsRegistry()<a name="line.86"></a>
+<span class="sourceLineNo">087</span>            .getCounter(SOURCE_UNCLEANLY_CLOSED_IGNORED_IN_BYTES, 0L);<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    restartWALReading = rms.getMetricsRegistry().getCounter(SOURCE_RESTARTED_LOG_READING, 0L);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    repeatedFileBytes = rms.getMetricsRegistry().getCounter(SOURCE_REPEATED_LOG_FILE_BYTES, 0L);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    completedWAL = rms.getMetricsRegistry().getCounter(SOURCE_COMPLETED_LOGS, 0L);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    completedRecoveryQueue = rms.getMetricsRegistry()<a name="line.91"></a>
+<span class="sourceLineNo">092</span>            .getCounter(SOURCE_COMPLETED_RECOVERY_QUEUES, 0L);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    failedRecoveryQueue = rms.getMetricsRegistry()<a name="line.93"></a>
+<span class="sourceLineNo">094</span>            .getCounter(SOURCE_FAILED_RECOVERY_QUEUES, 0L);<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>  @Override public void setLastShippedAge(long age) {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    ageOfLastShippedOpHist.add(age);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  @Override public void incrSizeOfLogQueue(int size) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    sizeOfLogQueueGauge.incr(size);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  @Override public void decrSizeOfLogQueue(int size) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    sizeOfLogQueueGauge.decr(size);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  @Override public void incrLogReadInEdits(long size) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    logReadInEditsCounter.incr(size);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  @Override public void incrLogEditsFiltered(long size) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    logEditsFilteredCounter.incr(size);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  @Override public void incrBatchesShipped(int batches) {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    shippedBatchesCounter.incr(batches);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  @Override public void incrOpsShipped(long ops) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    shippedOpsCounter.incr(ops);<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>  @Override public void incrShippedBytes(long size) {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    shippedBytesCounter.incr(size);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    // obtained value maybe smaller than 1024. We should make sure that KB count<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // eventually picks up even from multiple smaller updates.<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    incrementKBsCounter(shippedBytesCounter, shippedKBsCounter);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  static void incrementKBsCounter(MutableFastCounter bytesCounter, MutableFastCounter kbsCounter) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    // Following code should be thread-safe.<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    long delta = 0;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    while(true) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      long bytes = bytesCounter.value();<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      delta = (bytes / 1024) - kbsCounter.value();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      if (delta &gt; 0) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        kbsCounter.incr(delta);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      } else {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        break;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      }<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>  @Override public void incrLogReadInBytes(long size) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    logReadInBytesCounter.incr(size);<a name="line.147"></a>
 <span class="sourceLineNo">148</span>  }<a name="line.148"></a>
 <span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  @Override<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  public long getLastShippedAge() {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    return ageOfLastShippedOpHist.getMax();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  @Override public void incrHFilesShipped(long hfiles) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    shippedHFilesCounter.incr(hfiles);<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 void incrSizeOfHFileRefsQueue(long size) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    sizeOfHFileRefsQueueGauge.incr(size);<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>  @Override<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  public void decrSizeOfHFileRefsQueue(long size) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    sizeOfHFileRefsQueueGauge.decr(size);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  @Override<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public int getSizeOfLogQueue() {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return (int)sizeOfLogQueueGauge.value();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @Override<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  public void incrUnknownFileLengthForClosedWAL() {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    unknownFileLengthForClosedWAL.incr(1L);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  @Override<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  public void incrUncleanlyClosedWALs() {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    uncleanlyClosedWAL.incr(1L);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  @Override<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  public void incrBytesSkippedInUncleanlyClosedWALs(final long bytes) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    uncleanlyClosedSkippedBytes.incr(bytes);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  @Override<a name="line.186"></a>
-<span class="sourceLineNo">187</span>  public void incrRestartedWALReading() {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    restartWALReading.incr(1L);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  @Override<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  public void incrRepeatedFileBytes(final long bytes) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    repeatedFileBytes.incr(bytes);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  @Override<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  public void incrCompletedWAL() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    completedWAL.incr(1L);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  @Override<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  public void incrCompletedRecoveryQueue() {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    completedRecoveryQueue.incr(1L);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>  @Override<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  public void init() {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    rms.init();<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>  @Override<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  public void setGauge(String gaugeName, long value) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    rms.setGauge(KEY_PREFIX + gaugeName, value);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  @Override<a name="line.213"></a>
-<span class="sourceLineNo">214</span>  public void incGauge(String gaugeName, long delta) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    rms.incGauge(KEY_PREFIX + gaugeName, delta);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  @Override<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  public void decGauge(String gaugeName, long delta) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    rms.decGauge(KEY_PREFIX + gaugeName, delta);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  @Override<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  public void removeMetric(String key) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    rms.removeMetric(KEY_PREFIX + key);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  }<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>  @Override<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  public void incCounters(String counterName, long delta) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    rms.incCounters(KEY_PREFIX + counterName, delta);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>  @Override<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  public void updateHistogram(String name, long value) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    rms.updateHistogram(KEY_PREFIX + name, value);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  @Override<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  public String getMetricsContext() {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    return rms.getMetricsContext();<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  }<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  @Override<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  public String getMetricsDescription() {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return rms.getMetricsDescription();<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>  @Override<a name="line.248"></a>
-<span class="sourceLineNo">249</span>  public String getMetricsJmxContext() {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    return rms.getMetricsJmxContext();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>  @Override<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  public String getMetricsName() {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    return rms.getMetricsName();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>}<a name="line.257"></a>
+<span class="sourceLineNo">150</span>  @Override public void clear() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  @Override<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public long getLastShippedAge() {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    return ageOfLastShippedOpHist.getMax();<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 public void incrHFilesShipped(long hfiles) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    shippedHFilesCounter.incr(hfiles);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void incrSizeOfHFileRefsQueue(long size) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    sizeOfHFileRefsQueueGauge.incr(size);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  public void decrSizeOfHFileRefsQueue(long size) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    sizeOfHFileRefsQueueGauge.decr(size);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  @Override<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public int getSizeOfLogQueue() {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    return (int)sizeOfLogQueueGauge.value();<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 void incrUnknownFileLengthForClosedWAL() {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    unknownFileLengthForClosedWAL.incr(1L);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  @Override<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  public void incrUncleanlyClosedWALs() {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    uncleanlyClosedWAL.incr(1L);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  @Override<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  public void incrBytesSkippedInUncleanlyClosedWALs(final long bytes) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    uncleanlyClosedSkippedBytes.incr(bytes);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  @Override<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  public void incrRestartedWALReading() {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    restartWALReading.incr(1L);<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 void incrRepeatedFileBytes(final long bytes) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    repeatedFileBytes.incr(bytes);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  @Override<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  public void incrCompletedWAL() {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    completedWAL.incr(1L);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  @Override<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  public void incrCompletedRecoveryQueue() {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    completedRecoveryQueue.incr(1L);<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 void incrFailedRecoveryQueue() {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    failedRecoveryQueue.incr(1L);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  public void init() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    rms.init();<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>  @Override<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  public void setGauge(String gaugeName, long value) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    rms.setGauge(KEY_PREFIX + gaugeName, value);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  @Override<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  public void incGauge(String gaugeName, long delta) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    rms.incGauge(KEY_PREFIX + gaugeName, delta);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  @Override<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  public void decGauge(String gaugeName, long delta) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    rms.decGauge(KEY_PREFIX + gaugeName, delta);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>  @Override<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  public void removeMetric(String key) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    rms.removeMetric(KEY_PREFIX + key);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  @Override<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public void incCounters(String counterName, long delta) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    rms.incCounters(KEY_PREFIX + counterName, delta);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  @Override<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  public void updateHistogram(String name, long value) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    rms.updateHistogram(KEY_PREFIX + name, value);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>  @Override<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  public String getMetricsContext() {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    return rms.getMetricsContext();<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  }<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span>  @Override<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  public String getMetricsDescription() {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    return rms.getMetricsDescription();<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>  @Override<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  public String getMetricsJmxContext() {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    return rms.getMetricsJmxContext();<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>  @Override<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  public String getMetricsName() {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    return rms.getMetricsName();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>}<a name="line.263"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html
index 411b879..9152601 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html
@@ -61,30 +61,32 @@
 <span class="sourceLineNo">053</span>  public static final String SOURCE_REPEATED_LOG_FILE_BYTES = "source.repeatedLogFileBytes";<a name="line.53"></a>
 <span class="sourceLineNo">054</span>  public static final String SOURCE_COMPLETED_LOGS = "source.completedLogs";<a name="line.54"></a>
 <span class="sourceLineNo">055</span>  public static final String SOURCE_COMPLETED_RECOVERY_QUEUES = "source.completedRecoverQueues";<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  void setLastShippedAge(long age);<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  void incrSizeOfLogQueue(int size);<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  void decrSizeOfLogQueue(int size);<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  void incrLogEditsFiltered(long size);<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  void incrBatchesShipped(int batches);<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  void incrOpsShipped(long ops);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  void incrShippedBytes(long size);<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  void incrLogReadInBytes(long size);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  void incrLogReadInEdits(long size);<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  void clear();<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  long getLastShippedAge();<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  int getSizeOfLogQueue();<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  void incrHFilesShipped(long hfiles);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  void incrSizeOfHFileRefsQueue(long size);<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  void decrSizeOfHFileRefsQueue(long size);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  void incrUnknownFileLengthForClosedWAL();<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  void incrUncleanlyClosedWALs();<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  void incrBytesSkippedInUncleanlyClosedWALs(final long bytes);<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  void incrRestartedWALReading();<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  void incrRepeatedFileBytes(final long bytes);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  void incrCompletedWAL();<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  void incrCompletedRecoveryQueue();<a name="line.78"></a>
-<span class="sourceLineNo">079</span>}<a name="line.79"></a>
+<span class="sourceLineNo">056</span>  public static final String SOURCE_FAILED_RECOVERY_QUEUES = "source.failedRecoverQueues";<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  void setLastShippedAge(long age);<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  void incrSizeOfLogQueue(int size);<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  void decrSizeOfLogQueue(int size);<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  void incrLogEditsFiltered(long size);<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  void incrBatchesShipped(int batches);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  void incrOpsShipped(long ops);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  void incrShippedBytes(long size);<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  void incrLogReadInBytes(long size);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  void incrLogReadInEdits(long size);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  void clear();<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  long getLastShippedAge();<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  int getSizeOfLogQueue();<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  void incrHFilesShipped(long hfiles);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  void incrSizeOfHFileRefsQueue(long size);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  void decrSizeOfHFileRefsQueue(long size);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  void incrUnknownFileLengthForClosedWAL();<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  void incrUncleanlyClosedWALs();<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  void incrBytesSkippedInUncleanlyClosedWALs(final long bytes);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  void incrRestartedWALReading();<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  void incrRepeatedFileBytes(final long bytes);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  void incrCompletedWAL();<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  void incrCompletedRecoveryQueue();<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  void incrFailedRecoveryQueue();<a name="line.80"></a>
+<span class="sourceLineNo">081</span>}<a name="line.81"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html
index 6263bb7..6a6f905 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html
@@ -266,60 +266,63 @@
 <span class="sourceLineNo">258</span>  }<a name="line.258"></a>
 <span class="sourceLineNo">259</span><a name="line.259"></a>
 <span class="sourceLineNo">260</span>  @Override<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  public void init() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    rms.init();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>  @Override<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  public void setGauge(String gaugeName, long value) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    rms.setGauge(this.keyPrefix + gaugeName, value);<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>  @Override<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  public void incGauge(String gaugeName, long delta) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    rms.incGauge(this.keyPrefix + gaugeName, delta);<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>  @Override<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public void decGauge(String gaugeName, long delta) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    rms.decGauge(this.keyPrefix + gaugeName, delta);<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>  @Override<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  public void removeMetric(String key) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    rms.removeMetric(this.keyPrefix + key);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  @Override<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  public void incCounters(String counterName, long delta) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    rms.incCounters(this.keyPrefix + counterName, delta);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span>  @Override<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  public void updateHistogram(String name, long value) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    rms.updateHistogram(this.keyPrefix + name, value);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span>  @Override<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public String getMetricsContext() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    return rms.getMetricsContext();<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  }<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span>  @Override<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  public String getMetricsDescription() {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    return rms.getMetricsDescription();<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>  @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public String getMetricsJmxContext() {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    return rms.getMetricsJmxContext();<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  }<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span>  @Override<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public String getMetricsName() {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    return rms.getMetricsName();<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">261</span>  public void incrFailedRecoveryQueue() {/*no op*/}<a name="line.261"></a>
+<span class="sourceLineNo">262</span><a name="line.262"></a>
+<span class="sourceLineNo">263</span>  @Override<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  public void init() {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    rms.init();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>  @Override<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  public void setGauge(String gaugeName, long value) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    rms.setGauge(this.keyPrefix + gaugeName, value);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  @Override<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  public void incGauge(String gaugeName, long delta) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    rms.incGauge(this.keyPrefix + gaugeName, delta);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>  @Override<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public void decGauge(String gaugeName, long delta) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    rms.decGauge(this.keyPrefix + gaugeName, delta);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>  @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  public void removeMetric(String key) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    rms.removeMetric(this.keyPrefix + key);<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>  @Override<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  public void incCounters(String counterName, long delta) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    rms.incCounters(this.keyPrefix + counterName, delta);<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>  @Override<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public void updateHistogram(String name, long value) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    rms.updateHistogram(this.keyPrefix + name, value);<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>  @Override<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  public String getMetricsContext() {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    return rms.getMetricsContext();<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>  @Override<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public String getMetricsDescription() {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    return rms.getMetricsDescription();<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>  @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  public String getMetricsJmxContext() {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    return rms.getMetricsJmxContext();<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>  @Override<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  public String getMetricsName() {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    return rms.getMetricsName();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>}<a name="line.317"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html
index 338ff72..ef7b9d4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html
@@ -334,73 +334,77 @@
 <span class="sourceLineNo">326</span>    globalSourceSource.incrCompletedRecoveryQueue();<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>  @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  public void init() {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    singleSourceSource.init();<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    globalSourceSource.init();<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>  @Override<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  public void setGauge(String gaugeName, long value) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    singleSourceSource.setGauge(gaugeName, value);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    globalSourceSource.setGauge(gaugeName, value);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  public void incGauge(String gaugeName, long delta) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    singleSourceSource.incGauge(gaugeName, delta);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    globalSourceSource.incGauge(gaugeName, delta);<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>  public void decGauge(String gaugeName, long delta) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    singleSourceSource.decGauge(gaugeName, delta);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    globalSourceSource.decGauge(gaugeName, delta);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  }<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>  @Override<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  public void removeMetric(String key) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    singleSourceSource.removeMetric(key);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    globalSourceSource.removeMetric(key);<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>  @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  public void incCounters(String counterName, long delta) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    singleSourceSource.incCounters(counterName, delta);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    globalSourceSource.incCounters(counterName, delta);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>  @Override<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  public void updateHistogram(String name, long value) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    singleSourceSource.updateHistogram(name, value);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    globalSourceSource.updateHistogram(name, value);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>  @Override<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  public String getMetricsContext() {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    return globalSourceSource.getMetricsContext();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>  }<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>  @Override<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  public String getMetricsDescription() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    return globalSourceSource.getMetricsDescription();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  @Override<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  public String getMetricsJmxContext() {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    return globalSourceSource.getMetricsJmxContext();<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>  @Override<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  public String getMetricsName() {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    return globalSourceSource.getMetricsName();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  @VisibleForTesting<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  public Map&lt;String, MetricsReplicationSourceSource&gt; getSingleSourceSourceByTable() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    return singleSourceSourceByTable;<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
-<span class="sourceLineNo">395</span>}<a name="line.395"></a>
+<span class="sourceLineNo">329</span>  public void incrFailedRecoveryQueue() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    globalSourceSource.incrFailedRecoveryQueue();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>  @Override<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  public void init() {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    singleSourceSource.init();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    globalSourceSource.init();<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>  public void setGauge(String gaugeName, long value) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    singleSourceSource.setGauge(gaugeName, value);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    globalSourceSource.setGauge(gaugeName, value);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>  @Override<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  public void incGauge(String gaugeName, long delta) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    singleSourceSource.incGauge(gaugeName, delta);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    globalSourceSource.incGauge(gaugeName, delta);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>  @Override<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  public void decGauge(String gaugeName, long delta) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    singleSourceSource.decGauge(gaugeName, delta);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    globalSourceSource.decGauge(gaugeName, delta);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  }<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>  @Override<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  public void removeMetric(String key) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    singleSourceSource.removeMetric(key);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    globalSourceSource.removeMetric(key);<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>  @Override<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  public void incCounters(String counterName, long delta) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    singleSourceSource.incCounters(counterName, delta);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    globalSourceSource.incCounters(counterName, delta);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>  @Override<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  public void updateHistogram(String name, long value) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    singleSourceSource.updateHistogram(name, value);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    globalSourceSource.updateHistogram(name, value);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  @Override<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  public String getMetricsContext() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    return globalSourceSource.getMetricsContext();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
+<span class="sourceLineNo">379</span><a name="line.379"></a>
+<span class="sourceLineNo">380</span>  @Override<a name="line.380"></a>
+<span class="sourceLineNo">381</span>  public String getMetricsDescription() {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    return globalSourceSource.getMetricsDescription();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>  }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>  @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  public String getMetricsJmxContext() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return globalSourceSource.getMetricsJmxContext();<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  @Override<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  public String getMetricsName() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    return globalSourceSource.getMetricsName();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  }<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>  @VisibleForTesting<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  public Map&lt;String, MetricsReplicationSourceSource&gt; getSingleSourceSourceByTable() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    return singleSourceSourceByTable;<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>
 
 
 


[14/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/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 e984063..083ab07 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
@@ -53,1074 +53,1082 @@
 <span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
 <span class="sourceLineNo">046</span>import org.apache.hadoop.fs.FileSystem;<a name="line.46"></a>
 <span class="sourceLineNo">047</span>import org.apache.hadoop.fs.Path;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.HConstants;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.Server;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.ServerName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.TableName;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.replication.ReplicationListener;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.replication.ReplicationPeer;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationPeer.PeerState;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.replication.ReplicationPeerImpl;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.replication.ReplicationPeers;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.replication.ReplicationQueueInfo;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.replication.ReplicationTracker;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.wal.SyncReplicationWALProvider;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.zookeeper.KeeperException;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.slf4j.Logger;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.slf4j.LoggerFactory;<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>/**<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * This class is responsible to manage all the replication sources. There are two classes of<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * sources:<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * &lt;ul&gt;<a name="line.78"></a>
-<span class="sourceLineNo">079</span> * &lt;li&gt;Normal sources are persistent and one per peer cluster&lt;/li&gt;<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * &lt;li&gt;Old sources are recovered from a failed region server and our only goal is to finish<a name="line.80"></a>
-<span class="sourceLineNo">081</span> * replicating the WAL queue it had&lt;/li&gt;<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * &lt;/ul&gt;<a name="line.82"></a>
-<span class="sourceLineNo">083</span> * &lt;p&gt;<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * When a region server dies, this class uses a watcher to get notified and it tries to grab a lock<a name="line.84"></a>
-<span class="sourceLineNo">085</span> * in order to transfer all the queues in a local old source.<a name="line.85"></a>
-<span class="sourceLineNo">086</span> * &lt;p&gt;<a name="line.86"></a>
-<span class="sourceLineNo">087</span> * Synchronization specification:<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * &lt;ul&gt;<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * &lt;li&gt;No need synchronized on {@link #sources}. {@link #sources} is a ConcurrentHashMap and there<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * is a Lock for peer id in {@link PeerProcedureHandlerImpl}. So there is no race for peer<a name="line.90"></a>
-<span class="sourceLineNo">091</span> * operations.&lt;/li&gt;<a name="line.91"></a>
-<span class="sourceLineNo">092</span> * &lt;li&gt;Need synchronized on {@link #walsById}. There are four methods which modify it,<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * {@link #addPeer(String)}, {@link #removePeer(String)},<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * {@link #cleanOldLogs(String, boolean, ReplicationSourceInterface)} and {@link #preLogRoll(Path)}.<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * {@link #walsById} is a ConcurrentHashMap and there is a Lock for peer id in<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * {@link PeerProcedureHandlerImpl}. So there is no race between {@link #addPeer(String)} and<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * {@link #removePeer(String)}. {@link #cleanOldLogs(String, boolean, ReplicationSourceInterface)}<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * is called by {@link ReplicationSourceInterface}. So no race with {@link #addPeer(String)}.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * {@link #removePeer(String)} will terminate the {@link ReplicationSourceInterface} firstly, then<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * remove the wals from {@link #walsById}. So no race with {@link #removePeer(String)}. The only<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * case need synchronized is {@link #cleanOldLogs(String, boolean, ReplicationSourceInterface)} and<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * {@link #preLogRoll(Path)}.&lt;/li&gt;<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * &lt;li&gt;No need synchronized on {@link #walsByIdRecoveredQueues}. There are three methods which<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * modify it, {@link #removePeer(String)} ,<a name="line.104"></a>
-<span class="sourceLineNo">105</span> * {@link #cleanOldLogs(String, boolean, ReplicationSourceInterface)} and<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()}.<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * {@link #cleanOldLogs(String, boolean, ReplicationSourceInterface)} is called by<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * {@link ReplicationSourceInterface}. {@link #removePeer(String)} will terminate the<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * {@link ReplicationSourceInterface} firstly, then remove the wals from<a name="line.109"></a>
-<span class="sourceLineNo">110</span> * {@link #walsByIdRecoveredQueues}. And {@link ReplicationSourceManager.NodeFailoverWorker#run()}<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * will add the wals to {@link #walsByIdRecoveredQueues} firstly, then start up a<a name="line.111"></a>
-<span class="sourceLineNo">112</span> * {@link ReplicationSourceInterface}. So there is no race here. For<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * {@link ReplicationSourceManager.NodeFailoverWorker#run()} and {@link #removePeer(String)}, there<a name="line.113"></a>
-<span class="sourceLineNo">114</span> * is already synchronized on {@link #oldsources}. So no need synchronized on<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * {@link #walsByIdRecoveredQueues}.&lt;/li&gt;<a name="line.115"></a>
-<span class="sourceLineNo">116</span> * &lt;li&gt;Need synchronized on {@link #latestPaths} to avoid the new open source miss new log.&lt;/li&gt;<a name="line.116"></a>
-<span class="sourceLineNo">117</span> * &lt;li&gt;Need synchronized on {@link #oldsources} to avoid adding recovered source for the<a name="line.117"></a>
-<span class="sourceLineNo">118</span> * to-be-removed peer.&lt;/li&gt;<a name="line.118"></a>
-<span class="sourceLineNo">119</span> * &lt;/ul&gt;<a name="line.119"></a>
-<span class="sourceLineNo">120</span> */<a name="line.120"></a>
-<span class="sourceLineNo">121</span>@InterfaceAudience.Private<a name="line.121"></a>
-<span class="sourceLineNo">122</span>public class ReplicationSourceManager implements ReplicationListener {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSourceManager.class);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  // all the sources that read this RS's logs and every peer only has one replication source<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  private final ConcurrentMap&lt;String, ReplicationSourceInterface&gt; sources;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  // List of all the sources we got from died RSs<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private final List&lt;ReplicationSourceInterface&gt; oldsources;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  private final ReplicationQueueStorage queueStorage;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private final ReplicationTracker replicationTracker;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private final ReplicationPeers replicationPeers;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  // UUID for this cluster<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private final UUID clusterId;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  // All about stopping<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private final Server server;<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  // All logs we are currently tracking<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  // Index structure of the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  // For normal replication source, the peer id is same with the queue id<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsById;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  // Logs for recovered sources we are currently tracking<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  // the map is: queue_id-&gt;logPrefix/logGroup-&gt;logs<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  // For recovered source, the queue id's format is peer_id-servername-*<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  private final ConcurrentMap&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; walsByIdRecoveredQueues;<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final SyncReplicationPeerMappingManager syncReplicationPeerMappingManager;<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  private final Configuration conf;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private final FileSystem fs;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  // The paths to the latest log of each wal group, for new coming peers<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  private final Set&lt;Path&gt; latestPaths;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  // Path to the wals directories<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private final Path logDir;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  // Path to the wal archive<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  private final Path oldLogDir;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  private final WALFileLengthProvider walFileLengthProvider;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  // The number of ms that we wait before moving znodes, HBASE-3596<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  private final long sleepBeforeFailover;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  // Homemade executer service for replication<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  private final ThreadPoolExecutor executor;<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  private final boolean replicationForBulkLoadDataEnabled;<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  private AtomicLong totalBufferUsed = new AtomicLong();<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  // How long should we sleep for each retry when deleting remote wal files for sync replication<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  // peer.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  private final long sleepForRetries;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  // Maximum number of retries before taking bold actions when deleting remote wal files for sync<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  // replication peer.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  private final int maxRetriesMultiplier;<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>  /**<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * Creates a replication manager and sets the watch on all the other registered region servers<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @param queueStorage the interface for manipulating replication queues<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @param replicationPeers<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * @param replicationTracker<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * @param conf the configuration to use<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * @param server the server for this region server<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * @param fs the file system to use<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * @param logDir the directory that contains all wal directories of live RSs<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * @param oldLogDir the directory where old logs are archived<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * @param clusterId<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  public ReplicationSourceManager(ReplicationQueueStorage queueStorage,<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      ReplicationPeers replicationPeers, ReplicationTracker replicationTracker, Configuration conf,<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      Server server, FileSystem fs, Path logDir, Path oldLogDir, UUID clusterId,<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      WALFileLengthProvider walFileLengthProvider,<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      SyncReplicationPeerMappingManager syncReplicationPeerMappingManager) throws IOException {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.sources = new ConcurrentHashMap&lt;&gt;();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.queueStorage = queueStorage;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.replicationPeers = replicationPeers;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    this.replicationTracker = replicationTracker;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    this.server = server;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    this.walsById = new ConcurrentHashMap&lt;&gt;();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    this.walsByIdRecoveredQueues = new ConcurrentHashMap&lt;&gt;();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    this.oldsources = new ArrayList&lt;&gt;();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    this.conf = conf;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    this.fs = fs;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    this.logDir = logDir;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    this.oldLogDir = oldLogDir;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    // 30 seconds<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.sleepBeforeFailover = conf.getLong("replication.sleep.before.failover", 30000);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    this.clusterId = clusterId;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    this.walFileLengthProvider = walFileLengthProvider;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    this.syncReplicationPeerMappingManager = syncReplicationPeerMappingManager;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    this.replicationTracker.registerListener(this);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    // It's preferable to failover 1 RS at a time, but with good zk servers<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // more could be processed at the same time.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    int nbWorkers = conf.getInt("replication.executor.workers", 1);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    // use a short 100ms sleep since this could be done inline with a RS startup<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    // even if we fail, other region servers can take care of it<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    this.executor = new ThreadPoolExecutor(nbWorkers, nbWorkers, 100, TimeUnit.MILLISECONDS,<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        new LinkedBlockingQueue&lt;&gt;());<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    ThreadFactoryBuilder tfb = new ThreadFactoryBuilder();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    tfb.setNameFormat("ReplicationExecutor-%d");<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    tfb.setDaemon(true);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    this.executor.setThreadFactory(tfb.build());<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    this.latestPaths = new HashSet&lt;Path&gt;();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    this.replicationForBulkLoadDataEnabled = conf.getBoolean(<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      HConstants.REPLICATION_BULKLOAD_ENABLE_KEY, HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    this.sleepForRetries = this.conf.getLong("replication.source.sync.sleepforretries", 1000);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    this.maxRetriesMultiplier =<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      this.conf.getInt("replication.source.sync.maxretriesmultiplier", 60);<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>  /**<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * Adds a normal source per registered peer cluster and tries to process all old region server wal<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * queues<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * &lt;p&gt;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * The returned future is for adoptAbandonedQueues task.<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  Future&lt;?&gt; init() throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    for (String id : this.replicationPeers.getAllPeerIds()) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      addSource(id);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      if (replicationForBulkLoadDataEnabled) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        // Check if peer exists in hfile-refs queue, if not add it. This can happen in the case<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        // when a peer was added before replication for bulk loaded data was enabled.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        throwIOExceptionWhenFail(() -&gt; this.queueStorage.addPeerToHFileRefs(id));<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>    return this.executor.submit(this::adoptAbandonedQueues);<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>  private void adoptAbandonedQueues() {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    List&lt;ServerName&gt; currentReplicators = null;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    try {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      currentReplicators = queueStorage.getListOfReplicators();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    } catch (ReplicationException e) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      server.abort("Failed to get all replicators", e);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      return;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    if (currentReplicators == null || currentReplicators.isEmpty()) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      return;<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    List&lt;ServerName&gt; otherRegionServers = replicationTracker.getListOfRegionServers().stream()<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        .map(ServerName::valueOf).collect(Collectors.toList());<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    LOG.info(<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      "Current list of replicators: " + currentReplicators + " other RSs: " + otherRegionServers);<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>    // Look if there's anything to process after a restart<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    for (ServerName rs : currentReplicators) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      if (!otherRegionServers.contains(rs)) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        transferQueues(rs);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>  /**<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * &lt;ol&gt;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * &lt;li&gt;Add peer to replicationPeers&lt;/li&gt;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * &lt;li&gt;Add the normal source and related replication queue&lt;/li&gt;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * &lt;li&gt;Add HFile Refs&lt;/li&gt;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * &lt;/ol&gt;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * @param peerId the id of replication peer<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public void addPeer(String peerId) throws IOException {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    boolean added = false;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      added = this.replicationPeers.addPeer(peerId);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    } catch (ReplicationException e) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      throw new IOException(e);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    if (added) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      addSource(peerId);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      if (replicationForBulkLoadDataEnabled) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        throwIOExceptionWhenFail(() -&gt; this.queueStorage.addPeerToHFileRefs(peerId));<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * &lt;ol&gt;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * &lt;li&gt;Remove peer for replicationPeers&lt;/li&gt;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * &lt;li&gt;Remove all the recovered sources for the specified id and related replication queues&lt;/li&gt;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * &lt;li&gt;Remove the normal source and related replication queue&lt;/li&gt;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   * &lt;li&gt;Remove HFile Refs&lt;/li&gt;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * &lt;/ol&gt;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @param peerId the id of the replication peer<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  public void removePeer(String peerId) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    ReplicationPeer peer = replicationPeers.removePeer(peerId);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    String terminateMessage = "Replication stream was removed by a user";<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    List&lt;ReplicationSourceInterface&gt; oldSourcesToDelete = new ArrayList&lt;&gt;();<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    // synchronized on oldsources to avoid adding recovered source for the to-be-removed peer<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    // see NodeFailoverWorker.run<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    synchronized (this.oldsources) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      // First close all the recovered sources for this peer<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      for (ReplicationSourceInterface src : oldsources) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        if (peerId.equals(src.getPeerId())) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>          oldSourcesToDelete.add(src);<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>      for (ReplicationSourceInterface src : oldSourcesToDelete) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        src.terminate(terminateMessage);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        removeRecoveredSource(src);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    LOG.info(<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      "Number of deleted recovered sources for " + peerId + ": " + oldSourcesToDelete.size());<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    // Now close the normal source for this peer<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    ReplicationSourceInterface srcToRemove = this.sources.get(peerId);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    if (srcToRemove != null) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      srcToRemove.terminate(terminateMessage);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      removeSource(srcToRemove);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    } else {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      // This only happened in unit test TestReplicationSourceManager#testPeerRemovalCleanup<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      // Delete queue from storage and memory and queue id is same with peer id for normal<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      // source<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      deleteQueue(peerId);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.walsById.remove(peerId);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    ReplicationPeerConfig peerConfig = peer.getPeerConfig();<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    if (peerConfig.isSyncReplication()) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      syncReplicationPeerMappingManager.remove(peerId, peerConfig);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    // Remove HFile Refs<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    abortWhenFail(() -&gt; this.queueStorage.removePeerFromHFileRefs(peerId));<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * Factory method to create a replication source<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * @param queueId the id of the replication queue<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @return the created source<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  private ReplicationSourceInterface createSource(String queueId, ReplicationPeer replicationPeer)<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      throws IOException {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    ReplicationSourceInterface src = ReplicationSourceFactory.create(conf, queueId);<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    MetricsSource metrics = new MetricsSource(queueId);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    // init replication source<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    src.init(conf, fs, this, queueStorage, replicationPeer, server, queueId, clusterId,<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      walFileLengthProvider, metrics);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    return src;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>  /**<a name="line.356"></a>
-<span class="sourceLineNo">357</span>   * Add a normal source for the given peer on this region server. Meanwhile, add new replication<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   * queue to storage. For the newly added peer, we only need to enqueue the latest log of each wal<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * group and do replication<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * @param peerId the id of the replication peer<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * @return the source that was created<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  @VisibleForTesting<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  ReplicationSourceInterface addSource(String peerId) throws IOException {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    ReplicationPeer peer = replicationPeers.getPeer(peerId);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    ReplicationSourceInterface src = createSource(peerId, peer);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    // synchronized on latestPaths to avoid missing the new log<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    synchronized (this.latestPaths) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      this.sources.put(peerId, src);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      Map&lt;String, NavigableSet&lt;String&gt;&gt; walsByGroup = new HashMap&lt;&gt;();<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      this.walsById.put(peerId, walsByGroup);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      // Add the latest wal to that source's queue<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      if (this.latestPaths.size() &gt; 0) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        for (Path logPath : latestPaths) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          String name = logPath.getName();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          String walPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(name);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          NavigableSet&lt;String&gt; logs = new TreeSet&lt;&gt;();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          logs.add(name);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          walsByGroup.put(walPrefix, logs);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>          // Abort RS and throw exception to make add peer failed<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          abortAndThrowIOExceptionWhenFail(<a name="line.381"></a>
-<span class="sourceLineNo">382</span>            () -&gt; this.queueStorage.addWAL(server.getServerName(), peerId, name));<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          src.enqueueLog(logPath);<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>    }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    ReplicationPeerConfig peerConfig = peer.getPeerConfig();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    if (peerConfig.isSyncReplication()) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      syncReplicationPeerMappingManager.add(peer.getId(), peerConfig);<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    src.startup();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    return src;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>  /**<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * &lt;p&gt;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * This is used when we transit a sync replication peer to {@link SyncReplicationState#STANDBY}.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * &lt;/p&gt;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * &lt;p&gt;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * When transiting to {@link SyncReplicationState#STANDBY}, we can remove all the pending wal<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * files for a replication peer as we do not need to replicate them any more. And this is<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * necessary, otherwise when we transit back to {@link SyncReplicationState#DOWNGRADE_ACTIVE}<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * later, the stale data will be replicated again and cause inconsistency.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * &lt;/p&gt;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * &lt;p&gt;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * See HBASE-20426 for more details.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   * &lt;/p&gt;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   * @param peerId the id of the sync replication peer<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   */<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  public void drainSources(String peerId) throws IOException, ReplicationException {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    String terminateMessage = "Sync replication peer " + peerId +<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      " is transiting to STANDBY. Will close the previous replication source and open a new one";<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    ReplicationPeer peer = replicationPeers.getPeer(peerId);<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    assert peer.getPeerConfig().isSyncReplication();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    ReplicationSourceInterface src = createSource(peerId, peer);<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // synchronized here to avoid race with preLogRoll where we add new log to source and also<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    // walsById.<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    ReplicationSourceInterface toRemove;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    Map&lt;String, NavigableSet&lt;String&gt;&gt; wals = new HashMap&lt;&gt;();<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    synchronized (latestPaths) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      toRemove = sources.put(peerId, src);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      if (toRemove != null) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        LOG.info("Terminate replication source for " + toRemove.getPeerId());<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        toRemove.terminate(terminateMessage);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        toRemove.getSourceMetrics().clear();<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      // Here we make a copy of all the remaining wal files and then delete them from the<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      // replication queue storage after releasing the lock. It is not safe to just remove the old<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      // map from walsById since later we may fail to delete them from the replication queue<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      // storage, and when we retry next time, we can not know the wal files that need to be deleted<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      // from the replication queue storage.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      walsById.get(peerId).forEach((k, v) -&gt; wals.put(k, new TreeSet&lt;&gt;(v)));<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    LOG.info("Startup replication source for " + src.getPeerId());<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    src.startup();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    for (NavigableSet&lt;String&gt; walsByGroup : wals.values()) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      for (String wal : walsByGroup) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        queueStorage.removeWAL(server.getServerName(), peerId, wal);<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>    synchronized (walsById) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      Map&lt;String, NavigableSet&lt;String&gt;&gt; oldWals = walsById.get(peerId);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      wals.forEach((k, v) -&gt; {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        NavigableSet&lt;String&gt; walsByGroup = oldWals.get(k);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        if (walsByGroup != null) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>          walsByGroup.removeAll(v);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      });<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    }<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    // synchronized on oldsources to avoid race with NodeFailoverWorker. Since NodeFailoverWorker is<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    // a background task, we will delete the file from replication queue storage under the lock to<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    // simplify the logic.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    synchronized (this.oldsources) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      for (Iterator&lt;ReplicationSourceInterface&gt; iter = oldsources.iterator(); iter.hasNext();) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        ReplicationSourceInterface oldSource = iter.next();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        if (oldSource.getPeerId().equals(peerId)) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          String queueId = oldSource.getQueueId();<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          oldSource.terminate(terminateMessage);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          oldSource.getSourceMetrics().clear();<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          queueStorage.removeQueue(server.getServerName(), queueId);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          walsByIdRecoveredQueues.remove(queueId);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>          iter.remove();<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<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>   * Close the previous replication sources of this peer id and open new sources to trigger the new<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * replication state changes or new replication config changes. Here we don't need to change<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * replication queue storage and only to enqueue all logs to the new replication source<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * @param peerId the id of the replication peer<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
-<span class="sourceLineNo">474</span>  public void refreshSources(String peerId) throws IOException {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    String terminateMessage = "Peer " + peerId +<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      " state or config changed. Will close the previous replication source and open a new one";<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    ReplicationPeer peer = replicationPeers.getPeer(peerId);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    ReplicationSourceInterface src = createSource(peerId, peer);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // synchronized on latestPaths to avoid missing the new log<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    synchronized (this.latestPaths) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      ReplicationSourceInterface toRemove = this.sources.put(peerId, src);<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (toRemove != null) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        LOG.info("Terminate replication source for " + toRemove.getPeerId());<a name="line.483"></a>
-<span class="sourceLineNo">484</span>        toRemove.terminate(terminateMessage);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      }<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      for (NavigableSet&lt;String&gt; walsByGroup : walsById.get(peerId).values()) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        walsByGroup.forEach(wal -&gt; src.enqueueLog(new Path(this.logDir, wal)));<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    LOG.info("Startup replication source for " + src.getPeerId());<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    src.startup();<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>    List&lt;ReplicationSourceInterface&gt; toStartup = new ArrayList&lt;&gt;();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    // synchronized on oldsources to avoid race with NodeFailoverWorker<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    synchronized (this.oldsources) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      List&lt;String&gt; previousQueueIds = new ArrayList&lt;&gt;();<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      for (ReplicationSourceInterface oldSource : this.oldsources) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        if (oldSource.getPeerId().equals(peerId)) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          previousQueueIds.add(oldSource.getQueueId());<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          oldSource.terminate(terminateMessage);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>          this.oldsources.remove(oldSource);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      for (String queueId : previousQueueIds) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        ReplicationSourceInterface replicationSource = createSource(queueId, peer);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        this.oldsources.add(replicationSource);<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        for (SortedSet&lt;String&gt; walsByGroup : walsByIdRecoveredQueues.get(queueId).values()) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          walsByGroup.forEach(wal -&gt; src.enqueueLog(new Path(wal)));<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        toStartup.add(replicationSource);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    }<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    for (ReplicationSourceInterface replicationSource : toStartup) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      replicationSource.startup();<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>   * Clear the metrics and related replication queue of the specified old source<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * @param src source to clear<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  private boolean removeRecoveredSource(ReplicationSourceInterface src) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    if (!this.oldsources.remove(src)) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      return false;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    LOG.info("Done with the recovered queue {}", src.getQueueId());<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    // Delete queue from storage and memory<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    deleteQueue(src.getQueueId());<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    this.walsByIdRecoveredQueues.remove(src.getQueueId());<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    return true;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>  }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>  void finishRecoveredSource(ReplicationSourceInterface src) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    synchronized (oldsources) {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (!removeRecoveredSource(src)) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        return;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      }<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    LOG.info("Finished recovering queue {} with the following stats: {}", src.getQueueId(),<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      src.getStats());<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>  /**<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   * Clear the metrics and related replication queue of the specified old source<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * @param src source to clear<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   */<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  void removeSource(ReplicationSourceInterface src) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    LOG.info("Done with the queue " + src.getQueueId());<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    this.sources.remove(src.getPeerId());<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    // Delete queue from storage and memory<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    deleteQueue(src.getQueueId());<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    this.walsById.remove(src.getQueueId());<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>  }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>  /**<a name="line.556"></a>
-<span class="sourceLineNo">557</span>   * Delete a complete queue of wals associated with a replication source<a name="line.557"></a>
-<span class="sourceLineNo">558</span>   * @param queueId the id of replication queue to delete<a name="line.558"></a>
-<span class="sourceLineNo">559</span>   */<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  private void deleteQueue(String queueId) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    abortWhenFail(() -&gt; this.queueStorage.removeQueue(server.getServerName(), queueId));<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>  @FunctionalInterface<a name="line.564"></a>
-<span class="sourceLineNo">565</span>  private interface ReplicationQueueOperation {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    void exec() throws ReplicationException;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>  /**<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   * Refresh replication source will terminate the old source first, then the source thread will be<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * interrupted. Need to handle it instead of abort the region server.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   */<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  private void interruptOrAbortWhenFail(ReplicationQueueOperation op) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    try {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      op.exec();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    } catch (ReplicationException e) {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      if (e.getCause() != null &amp;&amp; e.getCause() instanceof KeeperException.SystemErrorException<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          &amp;&amp; e.getCause().getCause() != null &amp;&amp; e.getCause()<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          .getCause() instanceof InterruptedException) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>        throw new RuntimeException(<a name="line.580"></a>
-<span class="sourceLineNo">581</span>            "Thread is interrupted, the replication source may be terminated");<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      }<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      server.abort("Failed to operate on replication queue", e);<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><a name="line.586"></a>
-<span class="sourceLineNo">587</span>  private void abortWhenFail(ReplicationQueueOperation op) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    try {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      op.exec();<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    } catch (ReplicationException e) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      server.abort("Failed to operate on replication queue", e);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    }<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  private void throwIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    try {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      op.exec();<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    } catch (ReplicationException e) {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      throw new IOException(e);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    }<a name="line.600"></a>
-<span class="sourceLineNo">601</span>  }<a name="line.601"></a>
-<span class="sourceLineNo">602</span><a name="line.602"></a>
-<span class="sourceLineNo">603</span>  private void abortAndThrowIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    try {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      op.exec();<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    } catch (ReplicationException e) {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      server.abort("Failed to operate on replication queue", e);<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      throw new IOException(e);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    }<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>  /**<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * This method will log the current position to storage. And also clean old logs from the<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * replication queue.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @param source the replication source<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * @param entryBatch the wal entry batch we just shipped<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  public void logPositionAndCleanOldLogs(ReplicationSourceInterface source,<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      WALEntryBatch entryBatch) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    String fileName = entryBatch.getLastWalPath().getName();<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    interruptOrAbortWhenFail(() -&gt; this.queueStorage.setWALPosition(server.getServerName(),<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      source.getQueueId(), fileName, entryBatch.getLastWalPosition(), entryBatch.getLastSeqIds()));<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    cleanOldLogs(fileName, entryBatch.isEndOfFile(), source);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  }<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span>  /**<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * Cleans a log file and all older logs from replication queue. Called when we are sure that a log<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * file is closed and has no more entries.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * @param log Path to the log<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * @param inclusive whether we should also remove the given log file<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   * @param source the replication source<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   */<a name="line.632"></a>
-<span class="sourceLineNo">633</span>  @VisibleForTesting<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  void cleanOldLogs(String log, boolean inclusive, ReplicationSourceInterface source) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(log);<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    if (source.isRecovered()) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      NavigableSet&lt;String&gt; wals = walsByIdRecoveredQueues.get(source.getQueueId()).get(logPrefix);<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      if (wals != null) {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        NavigableSet&lt;String&gt; walsToRemove = wals.headSet(log, inclusive);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        if (walsToRemove.isEmpty()) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>          return;<a name="line.641"></a>
-<span class="sourceLineNo">642</span>        }<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        cleanOldLogs(walsToRemove, source);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>        walsToRemove.clear();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      }<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    } else {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      NavigableSet&lt;String&gt; wals;<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      NavigableSet&lt;String&gt; walsToRemove;<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      // synchronized on walsById to avoid race with preLogRoll<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      synchronized (this.walsById) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        wals = walsById.get(source.getQueueId()).get(logPrefix);<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        if (wals == null) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>          return;<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        }<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        walsToRemove = wals.headSet(log, inclusive);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>        if (walsToRemove.isEmpty()) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>          return;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>        }<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        walsToRemove = new TreeSet&lt;&gt;(walsToRemove);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      }<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      // cleanOldLogs may spend some time, especially for sync replication where we may want to<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      // remove remote wals as the remote cluster may have already been down, so we do it outside<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      // the lock to avoid block preLogRoll<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      cleanOldLogs(walsToRemove, source);<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      // now let's remove the files in the set<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      synchronized (this.walsById) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        wals.removeAll(walsToRemove);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span>  private void removeRemoteWALs(String peerId, String remoteWALDir, Collection&lt;String&gt; wals)<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      throws IOException {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    Path remoteWALDirForPeer = ReplicationUtils.getPeerRemoteWALDir(remoteWALDir, peerId);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    FileSystem fs = ReplicationUtils.getRemoteWALFileSystem(conf, remoteWALDir);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    for (String wal : wals) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      Path walFile = new Path(remoteWALDirForPeer, wal);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      try {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        if (!fs.delete(walFile, false) &amp;&amp; fs.exists(walFile)) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>          throw new IOException("Can not delete " + walFile);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        }<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      } catch (FileNotFoundException e) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        // Just ignore since this means the file has already been deleted.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>        // The javadoc of the FileSystem.delete methods does not specify the behavior of deleting an<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        // inexistent file, so here we deal with both, i.e, check the return value of the<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        // FileSystem.delete, and also catch FNFE.<a name="line.686"></a>
-<span class="sourceLineNo">687</span>        LOG.debug("The remote wal {} has already been deleted?", walFile, e);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      }<a name="line.688"></a>
-<span class="sourceLineNo">689</span>    }<a name="line.689"></a>
-<span class="sourceLineNo">690</span>  }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>  private void cleanOldLogs(NavigableSet&lt;String&gt; wals, ReplicationSourceInterface source) {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    LOG.debug("Removing {} logs in the list: {}", wals.size(), wals);<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    // The intention here is that, we want to delete the remote wal files ASAP as it may effect the<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    // failover time if you want to transit the remote cluster from S to A. And the infinite retry<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    // is not a problem, as if we can not contact with the remote HDFS cluster, then usually we can<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    // not contact with the HBase cluster either, so the replication will be blocked either.<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    if (source.isSyncReplication()) {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      String peerId = source.getPeerId();<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      String remoteWALDir = source.getPeer().getPeerConfig().getRemoteWALDir();<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      // Filter out the wals need to be removed from the remote directory. Its name should be the<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      // special format, and also, the peer id in its name should match the peer id for the<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      // replication source.<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      List&lt;String&gt; remoteWals = wals.stream().filter(w -&gt; SyncReplicationWALProvider<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        .getSyncReplicationPeerIdFromWALName(w).map(peerId::equals).orElse(false))<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        .collect(Collectors.toList());<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      LOG.debug("Removing {} logs from remote dir {} in the list: {}", remoteWals.size(),<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        remoteWALDir, remoteWals);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      if (!remoteWals.isEmpty()) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        for (int sleepMultiplier = 0;;) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>          try {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>            removeRemoteWALs(peerId, remoteWALDir, remoteWals);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>            break;<a name="line.713"></a>
-<span class="sourceLineNo">714</span>          } catch (IOException e) {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>            LOG.warn("Failed to delete remote wals from remote dir {} for peer {}", remoteWALDir,<a name="line.715"></a>
-<span class="sourceLineNo">716</span>              peerId);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>          }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>          if (!source.isSourceActive()) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>            // skip the following operations<a name="line.719"></a>
-<span class="sourceLineNo">720</span>            return;<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>          if (ReplicationUtils.sleepForRetries("Failed to delete remote wals", sleepForRetries,<a name="line.722"></a>
-<span class="sourceLineNo">723</span>            sleepMultiplier, maxRetriesMultiplier)) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>            sleepMultiplier++;<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          }<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        }<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    }<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    String queueId = source.getQueueId();<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    for (String wal : wals) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      interruptOrAbortWhenFail(<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        () -&gt; this.queueStorage.removeWAL(server.getServerName(), queueId, wal));<a name="line.732"></a>
-<span class="sourceLineNo">733</span>    }<a name="line.733"></a>
-<span class="sourceLineNo">734</span>  }<a name="line.734"></a>
-<span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>  // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.736"></a>
-<span class="sourceLineNo">737</span>  @VisibleForTesting<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  public void preLogRoll(Path newLog) throws IOException {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    String logName = newLog.getName();<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(logName);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    // synchronized on latestPaths to avoid the new open source miss the new log<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    synchronized (this.latestPaths) {<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      // Add log to queue storage<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        // If record log to queue storage failed, abort RS and throw exception to make log roll<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        // failed<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        abortAndThrowIOExceptionWhenFail(<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          () -&gt; this.queueStorage.addWAL(server.getServerName(), source.getQueueId(), logName));<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>      // synchronized on walsById to avoid race with cleanOldLogs<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      synchronized (this.walsById) {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        // Update walsById map<a name="line.753"></a>
-<span class="sourceLineNo">754</span>        for (Map.Entry&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; entry : this.walsById<a name="line.754"></a>
-<span class="sourceLineNo">755</span>          .entrySet()) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>          String peerId = entry.getKey();<a name="line.756"></a>
-<span class="sourceLineNo">757</span>          Map&lt;String, NavigableSet&lt;String&gt;&gt; walsByPrefix = entry.getValue();<a name="line.757"></a>
-<span class="sourceLineNo">758</span>          boolean existingPrefix = false;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>          for (Map.Entry&lt;String, NavigableSet&lt;String&gt;&gt; walsEntry : walsByPrefix.entrySet()) {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>            SortedSet&lt;String&gt; wals = walsEntry.getValue();<a name="line.760"></a>
-<span class="sourceLineNo">761</span>            if (this.sources.isEmpty()) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>              // If there's no slaves, don't need to keep the old wals since<a name="line.762"></a>
-<span class="sourceLineNo">763</span>              // we only consider the last one when a new slave comes in<a name="line.763"></a>
-<span class="sourceLineNo">764</span>              wals.clear();<a name="line.764"></a>
-<span class="sourceLineNo">765</span>            }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>            if (logPrefix.equals(walsEntry.getKey())) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>              wals.add(logName);<a name="line.767"></a>
-<span class="sourceLineNo">768</span>              existingPrefix = true;<a name="line.768"></a>
-<span class="sourceLineNo">769</span>            }<a name="line.769"></a>
-<span class="sourceLineNo">770</span>          }<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          if (!existingPrefix) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>            // The new log belongs to a new group, add it into this peer<a name="line.772"></a>
-<span class="sourceLineNo">773</span>            LOG.debug("Start tracking logs for wal group {} for peer {}", logPrefix, peerId);<a name="line.773"></a>
-<span class="sourceLineNo">774</span>            NavigableSet&lt;String&gt; wals = new TreeSet&lt;&gt;();<a name="line.774"></a>
-<span class="sourceLineNo">775</span>            wals.add(logName);<a name="line.775"></a>
-<span class="sourceLineNo">776</span>            walsByPrefix.put(logPrefix, wals);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>          }<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        }<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      }<a name="line.779"></a>
-<span class="sourceLineNo">780</span><a name="line.780"></a>
-<span class="sourceLineNo">781</span>      // Add to latestPaths<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      Iterator&lt;Path&gt; iterator = latestPaths.iterator();<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      while (iterator.hasNext()) {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>        Path path = iterator.next();<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        if (path.getName().contains(logPrefix)) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          iterator.remove();<a name="line.786"></a>
-<span class="sourceLineNo">787</span>          break;<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        }<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      this.latestPaths.add(newLog);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    }<a name="line.791"></a>
-<span class="sourceLineNo">792</span>  }<a name="line.792"></a>
-<span class="sourceLineNo">793</span><a name="line.793"></a>
-<span class="sourceLineNo">794</span>  // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.794"></a>
-<span class="sourceLineNo">795</span>  @VisibleForTesting<a name="line.795"></a>
-<span class="sourceLineNo">796</span>  public void postLogRoll(Path newLog) throws IOException {<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    // This only updates the sources we own, not the recovered ones<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      source.enqueueLog(newLog);<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    }<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span>  @Override<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  public void regionServerRemoved(String regionserver) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    transferQueues(ServerName.valueOf(regionserver));<a name="line.805"></a>
-<span class="sourceLineNo">806</span>  }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>  /**<a name="line.808"></a>
-<span class="sourceLineNo">809</span>   * Transfer all the queues of the specified to this region server. First it tries to grab a lock<a name="line.809"></a>
-<span class="sourceLineNo">810</span>   * and if it works it will move the old queues and finally will delete the old queues.<a name="line.810"></a>
-<span class="sourceLineNo">811</span>   * &lt;p&gt;<a name="line.811"></a>
-<span class="sourceLineNo">812</span>   * It creates one old source for any type of source of the old rs.<a name="line.812"></a>
-<span class="sourceLineNo">813</span>   */<a name="line.813"></a>
-<span class="sourceLineNo">814</span>  private void transferQueues(ServerName deadRS) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span>    if (server.getServerName().equals(deadRS)) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      // it's just us, give up<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      return;<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    NodeFailoverWorker transfer = new NodeFailoverWorker(deadRS);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    try {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>      this.executor.execute(transfer);<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    } catch (RejectedExecutionException ex) {<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      LOG.info("Cancelling the transfer of " + deadRS + " because of " + ex.getMessage());<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    }<a name="line.824"></a>
-<span class="sourceLineNo">825</span>  }<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>  /**<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   * Class responsible to setup new ReplicationSources to take care of the queues from dead region<a name="line.828"></a>
-<span class="sourceLineNo">829</span>   * servers.<a name="line.829"></a>
-<span class="sourceLineNo">830</span>   */<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  class NodeFailoverWorker extends Thread {<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>    private final ServerName deadRS;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    // After claim the queues from dead region server, the NodeFailoverWorker will skip to start<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    // the RecoveredReplicationSource if the peer has been removed. but there's possible that<a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // remove a peer with peerId = 2 and add a peer with peerId = 2 again during the<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    // NodeFailoverWorker. So we need a deep copied &lt;peerId, peer&gt; map to decide whether we<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    // should start the RecoveredReplicationSource. If the latest peer is not the old peer when<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    // NodeFailoverWorker begin, we should skip to start the RecoveredReplicationSource, Otherwise<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    // the rs will abort (See HBASE-20475).<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    private final Map&lt;String, ReplicationPeerImpl&gt; peersSnapshot;<a name="line.841"></a>
-<span class="sourceLineNo">842</span><a name="line.842"></a>
-<span class="sourceLineNo">843</span>    @VisibleForTesting<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    public NodeFailoverWorker(ServerName deadRS) {<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      super("Failover-for-" + deadRS);<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      this.deadRS = deadRS;<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      peersSnapshot = new HashMap&lt;&gt;(replicationPeers.getPeerCache());<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    }<a name="line.848"></a>
-<span class="sourceLineNo">849</span><a name="line.849"></a>
-<span class="sourceLineNo">850</span>    private boolean isOldPeer(String peerId, ReplicationPeerImpl newPeerRef) {<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      ReplicationPeerImpl oldPeerRef = peersSnapshot.get(peerId);<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      return oldPeerRef != null &amp;&amp; oldPeerRef == newPeerRef;<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    }<a name="line.853"></a>
-<span class="sourceLineNo">854</span><a name="line.854"></a>
-<span class="sourceLineNo">855</span>    @Override<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    public void run() {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      // Wait a bit before transferring the queues, we may be shutting down.<a name="line.857"></a>
-<span class="sourceLineNo">858</span>      // This sleep may not be enough in some cases.<a name="line.858"></a>
-<span class="sourceLineNo">859</span>      try {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>        Thread.sleep(sleepBeforeFailover +<a name="line.860"></a>
-<span class="sourceLineNo">861</span>          (long) (ThreadLocalRandom.current().nextFloat() * sleepBeforeFailover));<a name="line.861"></a>
-<span class="sourceLineNo">862</span>      } catch (InterruptedException e) {<a name="line.862"></a>
-<span class="sourceLineNo">863</span>        LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.863"></a>
-<span class="sourceLineNo">864</span>        Thread.currentThread().interrupt();<a name="line.864"></a>
-<span class="sourceLineNo">865</span>      }<a name="line.865"></a>
-<span class="sourceLineNo">866</span>      // We try to lock that rs' queue directory<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      if (server.isStopped()) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>        LOG.info("Not transferring queue since we are shutting down");<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        return;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      Map&lt;String, Set&lt;String&gt;&gt; newQueues = new HashMap&lt;&gt;();<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      try {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>        List&lt;String&gt; queues = queueStorage.getAllQueues(deadRS);<a name="line.873"></a>
-<span class="sourceLineNo">874</span>        while (!queues.isEmpty()) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>          Pair&lt;String, SortedSet&lt;String&gt;&gt; peer = queueStorage.claimQueue(deadRS,<a name="line.875"></a>
-<span class="sourceLineNo">876</span>            queues.get(ThreadLocalRandom.current().nextInt(queues.size())), server.getServerName());<a name="line.876"></a>
-<span class="sourceLineNo">877</span>          long sleep = sleepBeforeFailover / 2;<a name="line.877"></a>
-<span class="sourceLineNo">878</span>          if (!peer.getSecond().isEmpty()) {<a name="line.878"></a>
-<span class="sourceLineNo">879</span>            newQueues.put(peer.getFirst(), peer.getSecond());<a name="line.879"></a>
-<span class="sourceLineNo">880</span>            sleep = sleepBeforeFailover;<a name="line.880"></a>
-<span class="sourceLineNo">881</span>          }<a name="line.881"></a>
-<span class="sourceLineNo">882</span>          try {<a name="line.882"></a>
-<span class="sourceLineNo">883</span>            Thread.sleep(sleep);<a name="line.883"></a>
-<span class="sourceLineNo">884</span>          } catch (InterruptedException e) {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>            LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.885"></a>
-<span class="sourceLineNo">886</span>            Thread.currentThread().interrupt();<a name="line.886"></a>

<TRUNCATED>

[08/26] hbase-site git commit: Published site at 42aa3dd463c0d30a9b940d296b87316b5c67e1f5.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/37b8a04a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html
index ef39f9e..f188fed 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html
@@ -25,543 +25,555 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <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 static org.mockito.Mockito.mock;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.mockito.Mockito.verify;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.mockito.Mockito.when;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.HashMap;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Map;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.UUID;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.Callable;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.Cell;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Waiter;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Put;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Table;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.AfterClass;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.Assert;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.Before;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.BeforeClass;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.ClassRule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Test;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.experimental.categories.Category;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.slf4j.Logger;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.slf4j.LoggerFactory;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>/**<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.68"></a>
-<span class="sourceLineNo">069</span> */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.70"></a>
-<span class="sourceLineNo">071</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  @ClassRule<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.77"></a>
+<span class="sourceLineNo">020</span>import static org.mockito.Mockito.doNothing;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.mockito.Mockito.mock;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.mockito.Mockito.spy;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.mockito.Mockito.verify;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.mockito.Mockito.when;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.ArrayList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.List;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Map;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.UUID;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.Callable;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.Waiter;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Put;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.Table;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.junit.AfterClass;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.junit.Assert;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.Before;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.BeforeClass;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.ClassRule;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Test;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.experimental.categories.Category;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.slf4j.Logger;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.LoggerFactory;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>/**<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.70"></a>
+<span class="sourceLineNo">071</span> */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.72"></a>
+<span class="sourceLineNo">073</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  @ClassRule<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.77"></a>
 <span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  static int numRegionServers;<a name="line.79"></a>
+<span class="sourceLineNo">079</span>  private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.79"></a>
 <span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  @BeforeClass<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public static void setUpBeforeClass() throws Exception {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    TestReplicationBase.setUpBeforeClass();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<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>  @AfterClass<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public static void tearDownAfterClass() throws Exception {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    TestReplicationBase.tearDownAfterClass();<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    // check stop is called<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() &gt; 0);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  @Before<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public void setup() throws Exception {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    ReplicationEndpointForTest.contructedCount.set(0);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    ReplicationEndpointForTest.startedCount.set(0);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    ReplicationEndpointForTest.replicateCount.set(0);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    ReplicationEndpointForTest.lastEntries = null;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    final List&lt;RegionServerThread&gt; rsThreads =<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    for (RegionServerThread rs : rsThreads) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    // Wait for  all log roll to finish<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    utility1.waitFor(3000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      @Override<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      public boolean evaluate() throws Exception {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        for (RegionServerThread rs : rsThreads) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>            return false;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>          }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        return true;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      }<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>      @Override<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      public String explainFailure() throws Exception {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        List&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        for (RegionServerThread rs : rsThreads) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>            logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.123"></a>
-<span class="sourceLineNo">124</span>          }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<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><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  @Test<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public void testCustomReplicationEndpoint() throws Exception {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    // test installing a custom replication endpoint other than the default one.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    admin.addPeer("testCustomReplicationEndpoint",<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.135"></a>
-<span class="sourceLineNo">136</span>            .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>    // check whether the class has been constructed and started<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      @Override<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      public boolean evaluate() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        return ReplicationEndpointForTest.contructedCount.get() &gt;= numRegionServers;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    });<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      @Override<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      public boolean evaluate() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        return ReplicationEndpointForTest.startedCount.get() &gt;= numRegionServers;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    });<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.153"></a>
+<span class="sourceLineNo">081</span>  static int numRegionServers;<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  @BeforeClass<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static void setUpBeforeClass() throws Exception {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    TestReplicationBase.setUpBeforeClass();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  @AfterClass<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public static void tearDownAfterClass() throws Exception {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    TestReplicationBase.tearDownAfterClass();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    // check stop is called<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() &gt; 0);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  @Before<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public void setup() throws Exception {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    ReplicationEndpointForTest.contructedCount.set(0);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    ReplicationEndpointForTest.startedCount.set(0);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    ReplicationEndpointForTest.replicateCount.set(0);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    ReplicationEndpointForTest.lastEntries = null;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    final List&lt;RegionServerThread&gt; rsThreads =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    for (RegionServerThread rs : rsThreads) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    // Wait for  all log roll to finish<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    utility1.waitFor(3000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      @Override<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      public boolean evaluate() throws Exception {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        for (RegionServerThread rs : rsThreads) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>            return false;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        return true;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>      @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      public String explainFailure() throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        List&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        for (RegionServerThread rs : rsThreads) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>          if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>            logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>          }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<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>  }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  @Test<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  public void testCustomReplicationEndpoint() throws Exception {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // test installing a custom replication endpoint other than the default one.<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    admin.addPeer("testCustomReplicationEndpoint",<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.137"></a>
+<span class="sourceLineNo">138</span>            .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // check whether the class has been constructed and started<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      @Override<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      public boolean evaluate() throws Exception {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        return ReplicationEndpointForTest.contructedCount.get() &gt;= numRegionServers;<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      @Override<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      public boolean evaluate() throws Exception {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        return ReplicationEndpointForTest.startedCount.get() &gt;= numRegionServers;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    });<a name="line.153"></a>
 <span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // now replicate some data.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    doPut(Bytes.toBytes("row42"));<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      @Override<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      public boolean evaluate() throws Exception {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<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>    doAssert(Bytes.toBytes("row42"));<a name="line.165"></a>
+<span class="sourceLineNo">155</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>    // now replicate some data.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    doPut(Bytes.toBytes("row42"));<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      @Override<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      public boolean evaluate() throws Exception {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<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><a name="line.166"></a>
-<span class="sourceLineNo">167</span>    admin.removePeer("testCustomReplicationEndpoint");<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  @Test<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    int peerCount = admin.getPeersCount();<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    admin.addPeer(id,<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    // debug.  Peer needs to be up for the edit to make it across. This wait on<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // peer count seems to be a hack that has us not progress till peer is up.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (admin.getPeersCount() &lt;= peerCount) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      Threads.sleep(100);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // now replicate some data<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    doPut(row);<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      @Override<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      public boolean evaluate() throws Exception {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        // only send over one edit.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        LOG.info("count=" + count);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        return ReplicationEndpointReturningFalse.replicated.get();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    });<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      throw ReplicationEndpointReturningFalse.ex.get();<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>    admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<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>  @Test<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  public void testInterClusterReplication() throws Exception {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    final String id = "testInterClusterReplication";<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    List&lt;HRegion&gt; regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    int totEdits = 0;<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // Make sure edits are spread across regions because we do region based batching<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    // before shipping edits.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    for(HRegion region: regions) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      RegionInfo hri = region.getRegionInfo();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      byte[] row = hri.getStartKey();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      for (int i = 0; i &lt; 100; i++) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        if (row.length &gt; 0) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          Put put = new Put(row);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          put.addColumn(famName, row, row);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          region.put(put);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          totEdits++;<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>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>    admin.addPeer(id,<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.229"></a>
-<span class="sourceLineNo">230</span>            .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        null);<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>    final int numEdits = totEdits;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      @Override<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      public boolean evaluate() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>      @Override<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      public String explainFailure() throws Exception {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.242"></a>
-<span class="sourceLineNo">243</span>            + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        return failure;<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>    admin.removePeer("testInterClusterReplication");<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    utility1.deleteTableData(tableName);<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>  @Test<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    //test that we can create mutliple WALFilters reflectively<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        EverythingPassesWALEntryFilter.class.getName() +<a name="line.258"></a>
-<span class="sourceLineNo">259</span>            "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // now replicate some data.<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      doPut(connection, Bytes.toBytes("row1"));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      doPut(connection, row);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      doPut(connection, Bytes.toBytes("row2"));<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      public boolean evaluate() throws Exception {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 1;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    });<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    //make sure our reflectively created filter is in the filter chain<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<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>  @Test (expected=IOException.class)<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  public void testWALEntryFilterAddValidation() throws Exception {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    //test that we can create mutliple WALFilters reflectively<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        "IAmNotARealWalEntryFilter");<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    admin.addPeer("testWALEntryFilterAddValidation", rpc);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  @Test (expected=IOException.class)<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    //test that we can create mutliple WALFilters reflectively<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        "IAmNotARealWalEntryFilter");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  }<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  @Test<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  public void testMetricsSourceBaseSourcePassthrough(){<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    /*<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    allows for custom JMX metrics.<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    the two layers of wrapping to the actual BaseSource.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    */<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    String id = "id";<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    Map&lt;String, MetricsReplicationSourceSource&gt; singleSourceSourceByTable = new HashMap&lt;&gt;();<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    MetricsSource source = new MetricsSource(id, singleSourceSource, globalSourceSource,<a name="line.322"></a>
-<span class="sourceLineNo">323</span>        singleSourceSourceByTable);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    String gaugeName = "gauge";<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    String singleGaugeName = "source.id." + gaugeName;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    String globalGaugeName = "source." + gaugeName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    long delta = 1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    String counterName = "counter";<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    String singleCounterName = "source.id." + counterName;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    String globalCounterName = "source." + counterName;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    long count = 2;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    source.decGauge(gaugeName, delta);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    source.getMetricsContext();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    source.getMetricsDescription();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    source.getMetricsJmxContext();<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    source.getMetricsName();<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    source.incCounters(counterName, count);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    source.incGauge(gaugeName, delta);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    source.init();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    source.removeMetric(gaugeName);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    source.setGauge(gaugeName, delta);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    source.updateHistogram(counterName, count);<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    verify(globalRms).getMetricsContext();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    verify(globalRms).getMetricsJmxContext();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    verify(globalRms).getMetricsName();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    verify(singleRms).incCounters(singleCounterName, count);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    verify(globalRms).incCounters(globalCounterName, count);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    verify(globalRms).init();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    verify(singleRms).removeMetric(singleGaugeName);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    verify(globalRms).removeMetric(globalGaugeName);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    //check singleSourceSourceByTable metrics.<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    // singleSourceSourceByTable map entry will be created only<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    // after calling #setAgeOfLastShippedOpByTable<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    boolean containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        .containsKey("RandomNewTable");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    Assert.assertEquals(false, containsRandomNewTable);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    source.setAgeOfLastShippedOpByTable(123L, "RandomNewTable");<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        .containsKey("RandomNewTable");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    Assert.assertEquals(true, containsRandomNewTable);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    MetricsReplicationSourceSource msr = source.getSingleSourceSourceByTable()<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        .get("RandomNewTable");<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // cannot put more concreate value here to verify because the age is arbitrary.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    // as long as it's greater than 0, we see it as correct answer.<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    Assert.assertTrue(msr.getLastShippedAge() &gt; 0);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private void doPut(byte[] row) throws IOException {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      doPut(connection, row);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    try (Table t = connection.getTable(tableName)) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      Put put = new Put(row);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      put.addColumn(famName, row, row);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      t.put(put);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>  private static void doAssert(byte[] row) throws Exception {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      return; // first call<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    List&lt;Cell&gt; cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    Assert.assertEquals(1, cells.size());<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      cells.get(0).getRowLength(), row, 0, row.length));<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    static UUID uuid = utility1.getRandomUUID();<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    static AtomicInteger contructedCount = new AtomicInteger();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    static AtomicInteger startedCount = new AtomicInteger();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    static volatile List&lt;Entry&gt; lastEntries = null;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public ReplicationEndpointForTest() {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      replicateCount.set(0);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      contructedCount.incrementAndGet();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    @Override<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    public UUID getPeerUUID() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      return uuid;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>    @Override<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      replicateCount.incrementAndGet();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      lastEntries = new ArrayList&lt;&gt;(replicateContext.entries);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      return true;<a name="line.425"></a>
+<span class="sourceLineNo">167</span>    doAssert(Bytes.toBytes("row42"));<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    admin.removePeer("testCustomReplicationEndpoint");<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  @Test<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    int peerCount = admin.getPeersCount();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    admin.addPeer(id,<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    // debug.  Peer needs to be up for the edit to make it across. This wait on<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    // peer count seems to be a hack that has us not progress till peer is up.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    if (admin.getPeersCount() &lt;= peerCount) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      Threads.sleep(100);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    // now replicate some data<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    doPut(row);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<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>        // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        // only send over one edit.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        LOG.info("count=" + count);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        return ReplicationEndpointReturningFalse.replicated.get();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    });<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      throw ReplicationEndpointReturningFalse.ex.get();<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>    admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  @Test<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  public void testInterClusterReplication() throws Exception {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    final String id = "testInterClusterReplication";<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>    List&lt;HRegion&gt; regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    int totEdits = 0;<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // Make sure edits are spread across regions because we do region based batching<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    // before shipping edits.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    for(HRegion region: regions) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      RegionInfo hri = region.getRegionInfo();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      byte[] row = hri.getStartKey();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      for (int i = 0; i &lt; 100; i++) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        if (row.length &gt; 0) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          Put put = new Put(row);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          put.addColumn(famName, row, row);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          region.put(put);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>          totEdits++;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>    admin.addPeer(id,<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.231"></a>
+<span class="sourceLineNo">232</span>            .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        null);<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>    final int numEdits = totEdits;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate&lt;Exception&gt;() {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      @Override<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      public boolean evaluate() throws Exception {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<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>      public String explainFailure() throws Exception {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.244"></a>
+<span class="sourceLineNo">245</span>            + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        return failure;<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>    admin.removePeer("testInterClusterReplication");<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    utility1.deleteTableData(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">254</span>  @Test<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    //test that we can create mutliple WALFilters reflectively<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        EverythingPassesWALEntryFilter.class.getName() +<a name="line.260"></a>
+<span class="sourceLineNo">261</span>            "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    // now replicate some data.<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      doPut(connection, Bytes.toBytes("row1"));<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      doPut(connection, row);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      doPut(connection, Bytes.toBytes("row2"));<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>    Waiter.waitFor(conf1, 60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      @Override<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      public boolean evaluate() throws Exception {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        return ReplicationEndpointForTest.replicateCount.get() &gt;= 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><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    //make sure our reflectively created filter is in the filter chain<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<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>  @Test (expected=IOException.class)<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  public void testWALEntryFilterAddValidation() throws Exception {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    //test that we can create mutliple WALFilters reflectively<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        "IAmNotARealWalEntryFilter");<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    admin.addPeer("testWALEntryFilterAddValidation", rpc);<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>  @Test (expected=IOException.class)<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    ReplicationPeerConfig rpc =  new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    //test that we can create mutliple WALFilters reflectively<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        "IAmNotARealWalEntryFilter");<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  @Test<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public void testMetricsSourceBaseSourcePassthrough(){<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    /*<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    allows for custom JMX metrics.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    the two layers of wrapping to the actual BaseSource.<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    */<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    String id = "id";<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    MetricsReplicationSourceSource spyglobalSourceSource = spy(globalSourceSource);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    doNothing().when(spyglobalSourceSource).incrFailedRecoveryQueue();<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    Map&lt;String, MetricsReplicationSourceSource&gt; singleSourceSourceByTable = new HashMap&lt;&gt;();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    MetricsSource source = new MetricsSource(id, singleSourceSource, spyglobalSourceSource,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        singleSourceSourceByTable);<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    String gaugeName = "gauge";<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    String singleGaugeName = "source.id." + gaugeName;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    String globalGaugeName = "source." + gaugeName;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    long delta = 1;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    String counterName = "counter";<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    String singleCounterName = "source.id." + counterName;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    String globalCounterName = "source." + counterName;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    long count = 2;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    source.decGauge(gaugeName, delta);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    source.getMetricsContext();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    source.getMetricsDescription();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    source.getMetricsJmxContext();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    source.getMetricsName();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    source.incCounters(counterName, count);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    source.incGauge(gaugeName, delta);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    source.init();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    source.removeMetric(gaugeName);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    source.setGauge(gaugeName, delta);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    source.updateHistogram(counterName, count);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    source.incrFailedRecoveryQueue();<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>    verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    verify(globalRms).getMetricsContext();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    verify(globalRms).getMetricsJmxContext();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    verify(globalRms).getMetricsName();<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    verify(singleRms).incCounters(singleCounterName, count);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    verify(globalRms).incCounters(globalCounterName, count);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    verify(globalRms).init();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    verify(singleRms).removeMetric(singleGaugeName);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    verify(globalRms).removeMetric(globalGaugeName);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    verify(spyglobalSourceSource).incrFailedRecoveryQueue();<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    //check singleSourceSourceByTable metrics.<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    // singleSourceSourceByTable map entry will be created only<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    // after calling #setAgeOfLastShippedOpByTable<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    boolean containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        .containsKey("RandomNewTable");<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    Assert.assertEquals(false, containsRandomNewTable);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    source.setAgeOfLastShippedOpByTable(123L, "RandomNewTable");<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    containsRandomNewTable = source.getSingleSourceSourceByTable()<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        .containsKey("RandomNewTable");<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    Assert.assertEquals(true, containsRandomNewTable);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    MetricsReplicationSourceSource msr = source.getSingleSourceSourceByTable()<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        .get("RandomNewTable");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    // cannot put more concreate value here to verify because the age is arbitrary.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    // as long as it's greater than 0, we see it as correct answer.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    Assert.assertTrue(msr.getLastShippedAge() &gt; 0);<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  private void doPut(byte[] row) throws IOException {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      doPut(connection, row);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    try (Table t = connection.getTable(tableName)) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      Put put = new Put(row);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      put.addColumn(famName, row, row);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      t.put(put);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  private static void doAssert(byte[] row) throws Exception {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      return; // first call<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    List&lt;Cell&gt; cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    Assert.assertEquals(1, cells.size());<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      cells.get(0).getRowLength(), row, 0, row.length));<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>  public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    static UUID uuid = utility1.getRandomUUID();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    static AtomicInteger contructedCount = new AtomicInteger();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    static AtomicInteger startedCount = new AtomicInteger();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    static volatile List&lt;Entry&gt; lastEntries = null;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>    public ReplicationEndpointForTest() {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      replicateCount.set(0);<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      contructedCount.incrementAndGet();<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>    @Override<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    public void start() {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      startAsync();<a name="line.430"></a>
+<span class="sourceLineNo">429</span>    public UUID getPeerUUID() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      return uuid;<a name="line.430"></a>
 <span class="sourceLineNo">431</span>    }<a name="line.431"></a>
 <span class="sourceLineNo">432</span><a name="line.432"></a>
 <span class="sourceLineNo">433</span>    @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    public void stop() {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      stopAsync();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    protected void doStart() {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      startedCount.incrementAndGet();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      notifyStarted();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>    @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    protected void doStop() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      stoppedCount.incrementAndGet();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      notifyStopped();<a name="line.447"></a>
+<span class="sourceLineNo">434</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      replicateCount.incrementAndGet();<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      lastEntries = new ArrayList&lt;&gt;(replicateContext.entries);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      return true;<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>    @Override<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    public void start() {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      startAsync();<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>    @Override<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    public void stop() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      stopAsync();<a name="line.447"></a>
 <span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  public static class InterClusterReplicationEndpointForTest<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      extends HBaseInterClusterReplicationEndpoint {<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>    static AtomicInteger replicateCount = new AtomicInteger();<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    static boolean failedOnce;<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    public InterClusterReplicationEndpointForTest() {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      replicateCount.set(0);<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>    @Override<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    public boolean replicate(ReplicateContext replicateContext) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      boolean success = super.replicate(replicateContext);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      if (succ

<TRUNCATED>