You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mi...@apache.org on 2015/12/23 00:24:24 UTC

[01/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site d917c66aa -> 32d40534a


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/xref-test/org/apache/hadoop/hbase/client/TestMultiParallel.html
----------------------------------------------------------------------
diff --git a/xref-test/org/apache/hadoop/hbase/client/TestMultiParallel.html b/xref-test/org/apache/hadoop/hbase/client/TestMultiParallel.html
index c51427e..4e1d389 100644
--- a/xref-test/org/apache/hadoop/hbase/client/TestMultiParallel.html
+++ b/xref-test/org/apache/hadoop/hbase/client/TestMultiParallel.html
@@ -154,569 +154,570 @@
 <a class="jxr_linenumber" name="144" href="#144">144</a> <em class="jxr_javadoccomment">   * @throws NoSuchFieldException</em>
 <a class="jxr_linenumber" name="145" href="#145">145</a> <em class="jxr_javadoccomment">   * @throws SecurityException</em>
 <a class="jxr_linenumber" name="146" href="#146">146</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="147" href="#147">147</a>   @Ignore (<span class="jxr_string">"Nice bug flakey... expected 5 but was 4.."</span>) @Test(timeout=300000)
+<a class="jxr_linenumber" name="147" href="#147">147</a>   @Test(timeout=300000)
 <a class="jxr_linenumber" name="148" href="#148">148</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testActiveThreadsCount() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="149" href="#149">149</a>     <strong class="jxr_keyword">try</strong> (Connection connection = ConnectionFactory.createConnection(UTIL.getConfiguration())) {
-<a class="jxr_linenumber" name="150" href="#150">150</a>       ThreadPoolExecutor executor = HTable.getDefaultExecutor(UTIL.getConfiguration());
-<a class="jxr_linenumber" name="151" href="#151">151</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="152" href="#152">152</a>         <strong class="jxr_keyword">try</strong> (Table t = connection.getTable(TEST_TABLE, executor)) {
-<a class="jxr_linenumber" name="153" href="#153">153</a>           List&lt;Put&gt; puts = constructPutRequests(); <em class="jxr_comment">// creates a Put for every region</em>
-<a class="jxr_linenumber" name="154" href="#154">154</a>           t.batch(puts, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="155" href="#155">155</a>           HashSet&lt;ServerName&gt; regionservers = <strong class="jxr_keyword">new</strong> HashSet&lt;ServerName&gt;();
-<a class="jxr_linenumber" name="156" href="#156">156</a>           <strong class="jxr_keyword">try</strong> (RegionLocator locator = connection.getRegionLocator(TEST_TABLE)) {
-<a class="jxr_linenumber" name="157" href="#157">157</a>             <strong class="jxr_keyword">for</strong> (Row r : puts) {
-<a class="jxr_linenumber" name="158" href="#158">158</a>               HRegionLocation location = locator.getRegionLocation(r.getRow());
-<a class="jxr_linenumber" name="159" href="#159">159</a>               regionservers.add(location.getServerName());
-<a class="jxr_linenumber" name="160" href="#160">160</a>             }
-<a class="jxr_linenumber" name="161" href="#161">161</a>           }
-<a class="jxr_linenumber" name="162" href="#162">162</a>           assertEquals(regionservers.size(), executor.getLargestPoolSize());
-<a class="jxr_linenumber" name="163" href="#163">163</a>         }
-<a class="jxr_linenumber" name="164" href="#164">164</a>       } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="165" href="#165">165</a>         executor.shutdownNow();
-<a class="jxr_linenumber" name="166" href="#166">166</a>       }
-<a class="jxr_linenumber" name="167" href="#167">167</a>     }
-<a class="jxr_linenumber" name="168" href="#168">168</a>   }
-<a class="jxr_linenumber" name="169" href="#169">169</a> 
-<a class="jxr_linenumber" name="170" href="#170">170</a>   @Test(timeout=300000)
-<a class="jxr_linenumber" name="171" href="#171">171</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testBatchWithGet() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="172" href="#172">172</a>     LOG.info(<span class="jxr_string">"test=testBatchWithGet"</span>);
-<a class="jxr_linenumber" name="173" href="#173">173</a>     Table table = UTIL.getConnection().getTable(TEST_TABLE);
-<a class="jxr_linenumber" name="174" href="#174">174</a> 
-<a class="jxr_linenumber" name="175" href="#175">175</a>     <em class="jxr_comment">// load test data</em>
-<a class="jxr_linenumber" name="176" href="#176">176</a>     List&lt;Put&gt; puts = constructPutRequests();
-<a class="jxr_linenumber" name="177" href="#177">177</a>     table.batch(puts, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="178" href="#178">178</a> 
-<a class="jxr_linenumber" name="179" href="#179">179</a>     <em class="jxr_comment">// create a list of gets and run it</em>
-<a class="jxr_linenumber" name="180" href="#180">180</a>     List&lt;Row&gt; gets = <strong class="jxr_keyword">new</strong> ArrayList&lt;Row&gt;();
-<a class="jxr_linenumber" name="181" href="#181">181</a>     <strong class="jxr_keyword">for</strong> (byte[] k : KEYS) {
-<a class="jxr_linenumber" name="182" href="#182">182</a>       Get get = <strong class="jxr_keyword">new</strong> Get(k);
-<a class="jxr_linenumber" name="183" href="#183">183</a>       get.addColumn(BYTES_FAMILY, QUALIFIER);
-<a class="jxr_linenumber" name="184" href="#184">184</a>       gets.add(get);
-<a class="jxr_linenumber" name="185" href="#185">185</a>     }
-<a class="jxr_linenumber" name="186" href="#186">186</a>     Result[] multiRes = <strong class="jxr_keyword">new</strong> Result[gets.size()];
-<a class="jxr_linenumber" name="187" href="#187">187</a>     table.batch(gets, multiRes);
-<a class="jxr_linenumber" name="188" href="#188">188</a> 
-<a class="jxr_linenumber" name="189" href="#189">189</a>     <em class="jxr_comment">// Same gets using individual call API</em>
-<a class="jxr_linenumber" name="190" href="#190">190</a>     List&lt;Result&gt; singleRes = <strong class="jxr_keyword">new</strong> ArrayList&lt;Result&gt;();
-<a class="jxr_linenumber" name="191" href="#191">191</a>     <strong class="jxr_keyword">for</strong> (Row get : gets) {
-<a class="jxr_linenumber" name="192" href="#192">192</a>       singleRes.add(table.get((Get) get));
-<a class="jxr_linenumber" name="193" href="#193">193</a>     }
-<a class="jxr_linenumber" name="194" href="#194">194</a>     <em class="jxr_comment">// Compare results</em>
-<a class="jxr_linenumber" name="195" href="#195">195</a>     Assert.assertEquals(singleRes.size(), multiRes.length);
-<a class="jxr_linenumber" name="196" href="#196">196</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; singleRes.size(); i++) {
-<a class="jxr_linenumber" name="197" href="#197">197</a>       Assert.assertTrue(singleRes.get(i).containsColumn(BYTES_FAMILY, QUALIFIER));
-<a class="jxr_linenumber" name="198" href="#198">198</a>       Cell[] singleKvs = singleRes.get(i).rawCells();
-<a class="jxr_linenumber" name="199" href="#199">199</a>       Cell[] multiKvs = multiRes[i].rawCells();
-<a class="jxr_linenumber" name="200" href="#200">200</a>       <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> j = 0; j &lt; singleKvs.length; j++) {
-<a class="jxr_linenumber" name="201" href="#201">201</a>         Assert.assertEquals(singleKvs[j], multiKvs[j]);
-<a class="jxr_linenumber" name="202" href="#202">202</a>         Assert.assertEquals(0, Bytes.compareTo(CellUtil.cloneValue(singleKvs[j]),
-<a class="jxr_linenumber" name="203" href="#203">203</a>             CellUtil.cloneValue(multiKvs[j])));
-<a class="jxr_linenumber" name="204" href="#204">204</a>       }
-<a class="jxr_linenumber" name="205" href="#205">205</a>     }
-<a class="jxr_linenumber" name="206" href="#206">206</a>     table.close();
-<a class="jxr_linenumber" name="207" href="#207">207</a>   }
-<a class="jxr_linenumber" name="208" href="#208">208</a> 
-<a class="jxr_linenumber" name="209" href="#209">209</a>   @Test
-<a class="jxr_linenumber" name="210" href="#210">210</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testBadFam() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="211" href="#211">211</a>     LOG.info(<span class="jxr_string">"test=testBadFam"</span>);
-<a class="jxr_linenumber" name="212" href="#212">212</a>     Table table = UTIL.getConnection().getTable(TEST_TABLE);
-<a class="jxr_linenumber" name="213" href="#213">213</a> 
-<a class="jxr_linenumber" name="214" href="#214">214</a>     List&lt;Row&gt; actions = <strong class="jxr_keyword">new</strong> ArrayList&lt;Row&gt;();
-<a class="jxr_linenumber" name="215" href="#215">215</a>     Put p = <strong class="jxr_keyword">new</strong> Put(Bytes.toBytes(<span class="jxr_string">"row1"</span>));
-<a class="jxr_linenumber" name="216" href="#216">216</a>     p.addColumn(Bytes.toBytes(<span class="jxr_string">"bad_family"</span>), Bytes.toBytes(<span class="jxr_string">"qual"</span>), Bytes.toBytes(<span class="jxr_string">"value"</span>));
-<a class="jxr_linenumber" name="217" href="#217">217</a>     actions.add(p);
-<a class="jxr_linenumber" name="218" href="#218">218</a>     p = <strong class="jxr_keyword">new</strong> Put(Bytes.toBytes(<span class="jxr_string">"row2"</span>));
-<a class="jxr_linenumber" name="219" href="#219">219</a>     p.addColumn(BYTES_FAMILY, Bytes.toBytes(<span class="jxr_string">"qual"</span>), Bytes.toBytes(<span class="jxr_string">"value"</span>));
-<a class="jxr_linenumber" name="220" href="#220">220</a>     actions.add(p);
-<a class="jxr_linenumber" name="221" href="#221">221</a> 
-<a class="jxr_linenumber" name="222" href="#222">222</a>     <em class="jxr_comment">// row1 and row2 should be in the same region.</em>
-<a class="jxr_linenumber" name="223" href="#223">223</a> 
-<a class="jxr_linenumber" name="224" href="#224">224</a>     Object [] r = <strong class="jxr_keyword">new</strong> Object[actions.size()];
-<a class="jxr_linenumber" name="225" href="#225">225</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="226" href="#226">226</a>       table.batch(actions, r);
-<a class="jxr_linenumber" name="227" href="#227">227</a>       fail();
-<a class="jxr_linenumber" name="228" href="#228">228</a>     } <strong class="jxr_keyword">catch</strong> (RetriesExhaustedWithDetailsException ex) {
-<a class="jxr_linenumber" name="229" href="#229">229</a>       LOG.debug(ex);
-<a class="jxr_linenumber" name="230" href="#230">230</a>       <em class="jxr_comment">// good!</em>
-<a class="jxr_linenumber" name="231" href="#231">231</a>       assertFalse(ex.mayHaveClusterIssues());
-<a class="jxr_linenumber" name="232" href="#232">232</a>     }
-<a class="jxr_linenumber" name="233" href="#233">233</a>     assertEquals(2, r.length);
-<a class="jxr_linenumber" name="234" href="#234">234</a>     assertTrue(r[0] instanceof Throwable);
-<a class="jxr_linenumber" name="235" href="#235">235</a>     assertTrue(r[1] instanceof Result);
-<a class="jxr_linenumber" name="236" href="#236">236</a>     table.close();
-<a class="jxr_linenumber" name="237" href="#237">237</a>   }
-<a class="jxr_linenumber" name="238" href="#238">238</a> 
-<a class="jxr_linenumber" name="239" href="#239">239</a>   @Test (timeout=300000)
-<a class="jxr_linenumber" name="240" href="#240">240</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testFlushCommitsNoAbort() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="241" href="#241">241</a>     LOG.info(<span class="jxr_string">"test=testFlushCommitsNoAbort"</span>);
-<a class="jxr_linenumber" name="242" href="#242">242</a>     doTestFlushCommits(false);
-<a class="jxr_linenumber" name="243" href="#243">243</a>   }
-<a class="jxr_linenumber" name="244" href="#244">244</a> 
-<a class="jxr_linenumber" name="245" href="#245">245</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="246" href="#246">246</a> <em class="jxr_javadoccomment">   * Only run one Multi test with a forced RegionServer abort. Otherwise, the</em>
-<a class="jxr_linenumber" name="247" href="#247">247</a> <em class="jxr_javadoccomment">   * unit tests will take an unnecessarily long time to run.</em>
-<a class="jxr_linenumber" name="248" href="#248">248</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="249" href="#249">249</a> <em class="jxr_javadoccomment">   * @throws Exception</em>
-<a class="jxr_linenumber" name="250" href="#250">250</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="251" href="#251">251</a>   @Test (timeout=360000)
-<a class="jxr_linenumber" name="252" href="#252">252</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testFlushCommitsWithAbort() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="253" href="#253">253</a>     LOG.info(<span class="jxr_string">"test=testFlushCommitsWithAbort"</span>);
-<a class="jxr_linenumber" name="254" href="#254">254</a>     doTestFlushCommits(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="255" href="#255">255</a>   }
-<a class="jxr_linenumber" name="256" href="#256">256</a> 
-<a class="jxr_linenumber" name="257" href="#257">257</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="258" href="#258">258</a> <em class="jxr_javadoccomment">   * Set table auto flush to false and test flushing commits</em>
-<a class="jxr_linenumber" name="259" href="#259">259</a> <em class="jxr_javadoccomment">   * @param doAbort true if abort one regionserver in the testing</em>
-<a class="jxr_linenumber" name="260" href="#260">260</a> <em class="jxr_javadoccomment">   * @throws Exception</em>
-<a class="jxr_linenumber" name="261" href="#261">261</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="262" href="#262">262</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> doTestFlushCommits(<strong class="jxr_keyword">boolean</strong> doAbort) <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="263" href="#263">263</a>     <em class="jxr_comment">// Load the data</em>
-<a class="jxr_linenumber" name="264" href="#264">264</a>     LOG.info(<span class="jxr_string">"get new table"</span>);
-<a class="jxr_linenumber" name="265" href="#265">265</a>     Table table = UTIL.getConnection().getTable(TEST_TABLE);
-<a class="jxr_linenumber" name="266" href="#266">266</a>     table.setWriteBufferSize(10 * 1024 * 1024);
-<a class="jxr_linenumber" name="267" href="#267">267</a> 
-<a class="jxr_linenumber" name="268" href="#268">268</a>     LOG.info(<span class="jxr_string">"constructPutRequests"</span>);
-<a class="jxr_linenumber" name="269" href="#269">269</a>     List&lt;Put&gt; puts = constructPutRequests();
-<a class="jxr_linenumber" name="270" href="#270">270</a>     table.put(puts);
-<a class="jxr_linenumber" name="271" href="#271">271</a>     LOG.info(<span class="jxr_string">"puts"</span>);
-<a class="jxr_linenumber" name="272" href="#272">272</a>     <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> liveRScount = UTIL.getMiniHBaseCluster().getLiveRegionServerThreads()
-<a class="jxr_linenumber" name="273" href="#273">273</a>         .size();
-<a class="jxr_linenumber" name="274" href="#274">274</a>     assert liveRScount &gt; 0;
-<a class="jxr_linenumber" name="275" href="#275">275</a>     JVMClusterUtil.RegionServerThread liveRS = UTIL.getMiniHBaseCluster()
-<a class="jxr_linenumber" name="276" href="#276">276</a>         .getLiveRegionServerThreads().get(0);
-<a class="jxr_linenumber" name="277" href="#277">277</a>     <strong class="jxr_keyword">if</strong> (doAbort) {
-<a class="jxr_linenumber" name="278" href="#278">278</a>       liveRS.getRegionServer().abort(<span class="jxr_string">"Aborting for tests"</span>,
-<a class="jxr_linenumber" name="279" href="#279">279</a>           <strong class="jxr_keyword">new</strong> Exception(<span class="jxr_string">"doTestFlushCommits"</span>));
-<a class="jxr_linenumber" name="280" href="#280">280</a>       <em class="jxr_comment">// If we wait for no regions being online after we abort the server, we</em>
-<a class="jxr_linenumber" name="281" href="#281">281</a>       <em class="jxr_comment">// could ensure the master has re-assigned the regions on killed server</em>
-<a class="jxr_linenumber" name="282" href="#282">282</a>       <em class="jxr_comment">// after writing successfully. It means the server we aborted is dead</em>
-<a class="jxr_linenumber" name="283" href="#283">283</a>       <em class="jxr_comment">// and detected by matser</em>
-<a class="jxr_linenumber" name="284" href="#284">284</a>       <strong class="jxr_keyword">while</strong> (liveRS.getRegionServer().getNumberOfOnlineRegions() != 0) {
-<a class="jxr_linenumber" name="285" href="#285">285</a>         Thread.sleep(100);
-<a class="jxr_linenumber" name="286" href="#286">286</a>       }
-<a class="jxr_linenumber" name="287" href="#287">287</a>       <em class="jxr_comment">// try putting more keys after the abort. same key/qual... just validating</em>
-<a class="jxr_linenumber" name="288" href="#288">288</a>       <em class="jxr_comment">// no exceptions thrown</em>
-<a class="jxr_linenumber" name="289" href="#289">289</a>       puts = constructPutRequests();
-<a class="jxr_linenumber" name="290" href="#290">290</a>       table.put(puts);
-<a class="jxr_linenumber" name="291" href="#291">291</a>     }
-<a class="jxr_linenumber" name="292" href="#292">292</a> 
-<a class="jxr_linenumber" name="293" href="#293">293</a>     LOG.info(<span class="jxr_string">"validating loaded data"</span>);
-<a class="jxr_linenumber" name="294" href="#294">294</a>     validateLoadedData(table);
-<a class="jxr_linenumber" name="295" href="#295">295</a> 
-<a class="jxr_linenumber" name="296" href="#296">296</a>     <em class="jxr_comment">// Validate server and region count</em>
-<a class="jxr_linenumber" name="297" href="#297">297</a>     List&lt;JVMClusterUtil.RegionServerThread&gt; liveRSs = UTIL.getMiniHBaseCluster().getLiveRegionServerThreads();
-<a class="jxr_linenumber" name="298" href="#298">298</a>     <strong class="jxr_keyword">int</strong> count = 0;
-<a class="jxr_linenumber" name="299" href="#299">299</a>     <strong class="jxr_keyword">for</strong> (JVMClusterUtil.RegionServerThread t: liveRSs) {
-<a class="jxr_linenumber" name="300" href="#300">300</a>       count++;
-<a class="jxr_linenumber" name="301" href="#301">301</a>       LOG.info(<span class="jxr_string">"Count="</span> + count + <span class="jxr_string">", Alive="</span> + t.getRegionServer());
-<a class="jxr_linenumber" name="302" href="#302">302</a>     }
-<a class="jxr_linenumber" name="303" href="#303">303</a>     LOG.info(<span class="jxr_string">"Count="</span> + count);
-<a class="jxr_linenumber" name="304" href="#304">304</a>     Assert.assertEquals(<span class="jxr_string">"Server count="</span> + count + <span class="jxr_string">", abort="</span> + doAbort,
-<a class="jxr_linenumber" name="305" href="#305">305</a>         (doAbort ? (liveRScount - 1) : liveRScount), count);
-<a class="jxr_linenumber" name="306" href="#306">306</a>     <strong class="jxr_keyword">if</strong> (doAbort) {
-<a class="jxr_linenumber" name="307" href="#307">307</a>       UTIL.getMiniHBaseCluster().waitOnRegionServer(0);
-<a class="jxr_linenumber" name="308" href="#308">308</a>       UTIL.waitFor(15 * 1000, <strong class="jxr_keyword">new</strong> Waiter.Predicate&lt;Exception&gt;() {
-<a class="jxr_linenumber" name="309" href="#309">309</a>         @Override
-<a class="jxr_linenumber" name="310" href="#310">310</a>         <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> evaluate() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="311" href="#311">311</a>           <em class="jxr_comment">// Master is also a regionserver, so the count is liveRScount</em>
-<a class="jxr_linenumber" name="312" href="#312">312</a>           <strong class="jxr_keyword">return</strong> UTIL.getMiniHBaseCluster().getMaster()
-<a class="jxr_linenumber" name="313" href="#313">313</a>               .getClusterStatus().getServersSize() == liveRScount;
-<a class="jxr_linenumber" name="314" href="#314">314</a>         }
-<a class="jxr_linenumber" name="315" href="#315">315</a>       });
-<a class="jxr_linenumber" name="316" href="#316">316</a>       UTIL.waitFor(15 * 1000, UTIL.predicateNoRegionsInTransition());
-<a class="jxr_linenumber" name="317" href="#317">317</a>     }
-<a class="jxr_linenumber" name="318" href="#318">318</a> 
-<a class="jxr_linenumber" name="319" href="#319">319</a>     table.close();
-<a class="jxr_linenumber" name="320" href="#320">320</a>     LOG.info(<span class="jxr_string">"done"</span>);
-<a class="jxr_linenumber" name="321" href="#321">321</a>   }
-<a class="jxr_linenumber" name="322" href="#322">322</a> 
-<a class="jxr_linenumber" name="323" href="#323">323</a>   @Test (timeout=300000)
-<a class="jxr_linenumber" name="324" href="#324">324</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testBatchWithPut() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="325" href="#325">325</a>     LOG.info(<span class="jxr_string">"test=testBatchWithPut"</span>);
-<a class="jxr_linenumber" name="326" href="#326">326</a>     Table table = CONNECTION.getTable(TEST_TABLE);
-<a class="jxr_linenumber" name="327" href="#327">327</a>     <em class="jxr_comment">// put multiple rows using a batch</em>
-<a class="jxr_linenumber" name="328" href="#328">328</a>     List&lt;Put&gt; puts = constructPutRequests();
-<a class="jxr_linenumber" name="329" href="#329">329</a> 
-<a class="jxr_linenumber" name="330" href="#330">330</a>     Object[] results = <strong class="jxr_keyword">new</strong> Object[puts.size()];
-<a class="jxr_linenumber" name="331" href="#331">331</a>     table.batch(puts, results);
-<a class="jxr_linenumber" name="332" href="#332">332</a>     validateSizeAndEmpty(results, KEYS.length);
-<a class="jxr_linenumber" name="333" href="#333">333</a> 
-<a class="jxr_linenumber" name="334" href="#334">334</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">true</strong>) {
-<a class="jxr_linenumber" name="335" href="#335">335</a>       <strong class="jxr_keyword">int</strong> liveRScount = UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().size();
-<a class="jxr_linenumber" name="336" href="#336">336</a>       assert liveRScount &gt; 0;
-<a class="jxr_linenumber" name="337" href="#337">337</a>       JVMClusterUtil.RegionServerThread liveRS =
-<a class="jxr_linenumber" name="338" href="#338">338</a>         UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().get(0);
-<a class="jxr_linenumber" name="339" href="#339">339</a>       liveRS.getRegionServer().abort(<span class="jxr_string">"Aborting for tests"</span>, <strong class="jxr_keyword">new</strong> Exception(<span class="jxr_string">"testBatchWithPut"</span>));
-<a class="jxr_linenumber" name="340" href="#340">340</a>       puts = constructPutRequests();
-<a class="jxr_linenumber" name="341" href="#341">341</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="342" href="#342">342</a>         results = <strong class="jxr_keyword">new</strong> Object[puts.size()];
-<a class="jxr_linenumber" name="343" href="#343">343</a>         table.batch(puts, results);
-<a class="jxr_linenumber" name="344" href="#344">344</a>       } <strong class="jxr_keyword">catch</strong> (RetriesExhaustedWithDetailsException ree) {
-<a class="jxr_linenumber" name="345" href="#345">345</a>         LOG.info(ree.getExhaustiveDescription());
-<a class="jxr_linenumber" name="346" href="#346">346</a>         table.close();
-<a class="jxr_linenumber" name="347" href="#347">347</a>         <strong class="jxr_keyword">throw</strong> ree;
-<a class="jxr_linenumber" name="348" href="#348">348</a>       }
-<a class="jxr_linenumber" name="349" href="#349">349</a>       validateSizeAndEmpty(results, KEYS.length);
-<a class="jxr_linenumber" name="350" href="#350">350</a>     }
-<a class="jxr_linenumber" name="351" href="#351">351</a> 
-<a class="jxr_linenumber" name="352" href="#352">352</a>     validateLoadedData(table);
-<a class="jxr_linenumber" name="353" href="#353">353</a>     table.close();
-<a class="jxr_linenumber" name="354" href="#354">354</a>   }
-<a class="jxr_linenumber" name="355" href="#355">355</a> 
-<a class="jxr_linenumber" name="356" href="#356">356</a>   @Test(timeout=300000)
-<a class="jxr_linenumber" name="357" href="#357">357</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testBatchWithDelete() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="358" href="#358">358</a>     LOG.info(<span class="jxr_string">"test=testBatchWithDelete"</span>);
-<a class="jxr_linenumber" name="359" href="#359">359</a>     Table table = UTIL.getConnection().getTable(TEST_TABLE);
-<a class="jxr_linenumber" name="360" href="#360">360</a> 
-<a class="jxr_linenumber" name="361" href="#361">361</a>     <em class="jxr_comment">// Load some data</em>
-<a class="jxr_linenumber" name="362" href="#362">362</a>     List&lt;Put&gt; puts = constructPutRequests();
-<a class="jxr_linenumber" name="363" href="#363">363</a>     Object[] results = <strong class="jxr_keyword">new</strong> Object[puts.size()];
-<a class="jxr_linenumber" name="364" href="#364">364</a>     table.batch(puts, results);
-<a class="jxr_linenumber" name="365" href="#365">365</a>     validateSizeAndEmpty(results, KEYS.length);
-<a class="jxr_linenumber" name="366" href="#366">366</a> 
-<a class="jxr_linenumber" name="367" href="#367">367</a>     <em class="jxr_comment">// Deletes</em>
-<a class="jxr_linenumber" name="368" href="#368">368</a>     List&lt;Row&gt; deletes = <strong class="jxr_keyword">new</strong> ArrayList&lt;Row&gt;();
-<a class="jxr_linenumber" name="369" href="#369">369</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; KEYS.length; i++) {
-<a class="jxr_linenumber" name="370" href="#370">370</a>       Delete delete = <strong class="jxr_keyword">new</strong> Delete(KEYS[i]);
-<a class="jxr_linenumber" name="371" href="#371">371</a>       delete.addFamily(BYTES_FAMILY);
-<a class="jxr_linenumber" name="372" href="#372">372</a>       deletes.add(delete);
-<a class="jxr_linenumber" name="373" href="#373">373</a>     }
-<a class="jxr_linenumber" name="374" href="#374">374</a>     results= <strong class="jxr_keyword">new</strong> Object[deletes.size()];
-<a class="jxr_linenumber" name="375" href="#375">375</a>     table.batch(deletes, results);
-<a class="jxr_linenumber" name="376" href="#376">376</a>     validateSizeAndEmpty(results, KEYS.length);
-<a class="jxr_linenumber" name="377" href="#377">377</a> 
-<a class="jxr_linenumber" name="378" href="#378">378</a>     <em class="jxr_comment">// Get to make sure ...</em>
-<a class="jxr_linenumber" name="379" href="#379">379</a>     <strong class="jxr_keyword">for</strong> (byte[] k : KEYS) {
-<a class="jxr_linenumber" name="380" href="#380">380</a>       Get get = <strong class="jxr_keyword">new</strong> Get(k);
-<a class="jxr_linenumber" name="381" href="#381">381</a>       get.addColumn(BYTES_FAMILY, QUALIFIER);
-<a class="jxr_linenumber" name="382" href="#382">382</a>       Assert.assertFalse(table.exists(get));
-<a class="jxr_linenumber" name="383" href="#383">383</a>     }
-<a class="jxr_linenumber" name="384" href="#384">384</a>     table.close();
-<a class="jxr_linenumber" name="385" href="#385">385</a>   }
-<a class="jxr_linenumber" name="386" href="#386">386</a> 
-<a class="jxr_linenumber" name="387" href="#387">387</a>   @Test(timeout=300000)
-<a class="jxr_linenumber" name="388" href="#388">388</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testHTableDeleteWithList() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="389" href="#389">389</a>     LOG.info(<span class="jxr_string">"test=testHTableDeleteWithList"</span>);
-<a class="jxr_linenumber" name="390" href="#390">390</a>     Table table = UTIL.getConnection().getTable(TEST_TABLE);
-<a class="jxr_linenumber" name="391" href="#391">391</a> 
-<a class="jxr_linenumber" name="392" href="#392">392</a>     <em class="jxr_comment">// Load some data</em>
-<a class="jxr_linenumber" name="393" href="#393">393</a>     List&lt;Put&gt; puts = constructPutRequests();
-<a class="jxr_linenumber" name="394" href="#394">394</a>     Object[] results = <strong class="jxr_keyword">new</strong> Object[puts.size()];
-<a class="jxr_linenumber" name="395" href="#395">395</a>     table.batch(puts, results);
-<a class="jxr_linenumber" name="396" href="#396">396</a>     validateSizeAndEmpty(results, KEYS.length);
-<a class="jxr_linenumber" name="397" href="#397">397</a> 
-<a class="jxr_linenumber" name="398" href="#398">398</a>     <em class="jxr_comment">// Deletes</em>
-<a class="jxr_linenumber" name="399" href="#399">399</a>     ArrayList&lt;Delete&gt; deletes = <strong class="jxr_keyword">new</strong> ArrayList&lt;Delete&gt;();
-<a class="jxr_linenumber" name="400" href="#400">400</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; KEYS.length; i++) {
-<a class="jxr_linenumber" name="401" href="#401">401</a>       Delete delete = <strong class="jxr_keyword">new</strong> Delete(KEYS[i]);
-<a class="jxr_linenumber" name="402" href="#402">402</a>       delete.addFamily(BYTES_FAMILY);
-<a class="jxr_linenumber" name="403" href="#403">403</a>       deletes.add(delete);
-<a class="jxr_linenumber" name="404" href="#404">404</a>     }
-<a class="jxr_linenumber" name="405" href="#405">405</a>     table.delete(deletes);
-<a class="jxr_linenumber" name="406" href="#406">406</a>     Assert.assertTrue(deletes.isEmpty());
-<a class="jxr_linenumber" name="407" href="#407">407</a> 
-<a class="jxr_linenumber" name="408" href="#408">408</a>     <em class="jxr_comment">// Get to make sure ...</em>
-<a class="jxr_linenumber" name="409" href="#409">409</a>     <strong class="jxr_keyword">for</strong> (byte[] k : KEYS) {
-<a class="jxr_linenumber" name="410" href="#410">410</a>       Get get = <strong class="jxr_keyword">new</strong> Get(k);
-<a class="jxr_linenumber" name="411" href="#411">411</a>       get.addColumn(BYTES_FAMILY, QUALIFIER);
-<a class="jxr_linenumber" name="412" href="#412">412</a>       Assert.assertFalse(table.exists(get));
-<a class="jxr_linenumber" name="413" href="#413">413</a>     }
-<a class="jxr_linenumber" name="414" href="#414">414</a>     table.close();
-<a class="jxr_linenumber" name="415" href="#415">415</a>   }
-<a class="jxr_linenumber" name="416" href="#416">416</a> 
-<a class="jxr_linenumber" name="417" href="#417">417</a>   @Test(timeout=300000)
-<a class="jxr_linenumber" name="418" href="#418">418</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testBatchWithManyColsInOneRowGetAndPut() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="419" href="#419">419</a>     LOG.info(<span class="jxr_string">"test=testBatchWithManyColsInOneRowGetAndPut"</span>);
-<a class="jxr_linenumber" name="420" href="#420">420</a>     Table table = UTIL.getConnection().getTable(TEST_TABLE);
-<a class="jxr_linenumber" name="421" href="#421">421</a> 
-<a class="jxr_linenumber" name="422" href="#422">422</a>     List&lt;Row&gt; puts = <strong class="jxr_keyword">new</strong> ArrayList&lt;Row&gt;();
-<a class="jxr_linenumber" name="423" href="#423">423</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; 100; i++) {
-<a class="jxr_linenumber" name="424" href="#424">424</a>       Put put = <strong class="jxr_keyword">new</strong> Put(ONE_ROW);
-<a class="jxr_linenumber" name="425" href="#425">425</a>       byte[] qual = Bytes.toBytes(<span class="jxr_string">"column"</span> + i);
-<a class="jxr_linenumber" name="426" href="#426">426</a>       put.addColumn(BYTES_FAMILY, qual, VALUE);
-<a class="jxr_linenumber" name="427" href="#427">427</a>       puts.add(put);
-<a class="jxr_linenumber" name="428" href="#428">428</a>     }
-<a class="jxr_linenumber" name="429" href="#429">429</a>     Object[] results = <strong class="jxr_keyword">new</strong> Object[puts.size()];
-<a class="jxr_linenumber" name="430" href="#430">430</a>     table.batch(puts, results);
-<a class="jxr_linenumber" name="431" href="#431">431</a> 
-<a class="jxr_linenumber" name="432" href="#432">432</a>     <em class="jxr_comment">// validate</em>
-<a class="jxr_linenumber" name="433" href="#433">433</a>     validateSizeAndEmpty(results, 100);
-<a class="jxr_linenumber" name="434" href="#434">434</a> 
-<a class="jxr_linenumber" name="435" href="#435">435</a>     <em class="jxr_comment">// get the data back and validate that it is correct</em>
-<a class="jxr_linenumber" name="436" href="#436">436</a>     List&lt;Row&gt; gets = <strong class="jxr_keyword">new</strong> ArrayList&lt;Row&gt;();
-<a class="jxr_linenumber" name="437" href="#437">437</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; 100; i++) {
-<a class="jxr_linenumber" name="438" href="#438">438</a>       Get get = <strong class="jxr_keyword">new</strong> Get(ONE_ROW);
-<a class="jxr_linenumber" name="439" href="#439">439</a>       byte[] qual = Bytes.toBytes(<span class="jxr_string">"column"</span> + i);
-<a class="jxr_linenumber" name="440" href="#440">440</a>       get.addColumn(BYTES_FAMILY, qual);
-<a class="jxr_linenumber" name="441" href="#441">441</a>       gets.add(get);
-<a class="jxr_linenumber" name="442" href="#442">442</a>     }
-<a class="jxr_linenumber" name="443" href="#443">443</a> 
-<a class="jxr_linenumber" name="444" href="#444">444</a>     Object[] multiRes = <strong class="jxr_keyword">new</strong> Object[gets.size()];
-<a class="jxr_linenumber" name="445" href="#445">445</a>     table.batch(gets, multiRes);
-<a class="jxr_linenumber" name="446" href="#446">446</a> 
-<a class="jxr_linenumber" name="447" href="#447">447</a>     <strong class="jxr_keyword">int</strong> idx = 0;
-<a class="jxr_linenumber" name="448" href="#448">448</a>     <strong class="jxr_keyword">for</strong> (Object r : multiRes) {
-<a class="jxr_linenumber" name="449" href="#449">449</a>       byte[] qual = Bytes.toBytes(<span class="jxr_string">"column"</span> + idx);
-<a class="jxr_linenumber" name="450" href="#450">450</a>       validateResult(r, qual, VALUE);
-<a class="jxr_linenumber" name="451" href="#451">451</a>       idx++;
-<a class="jxr_linenumber" name="452" href="#452">452</a>     }
-<a class="jxr_linenumber" name="453" href="#453">453</a>     table.close();
-<a class="jxr_linenumber" name="454" href="#454">454</a>   }
-<a class="jxr_linenumber" name="455" href="#455">455</a> 
-<a class="jxr_linenumber" name="456" href="#456">456</a>   @Test(timeout=300000)
-<a class="jxr_linenumber" name="457" href="#457">457</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testBatchWithIncrementAndAppend() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="458" href="#458">458</a>     LOG.info(<span class="jxr_string">"test=testBatchWithIncrementAndAppend"</span>);
-<a class="jxr_linenumber" name="459" href="#459">459</a>     <strong class="jxr_keyword">final</strong> byte[] QUAL1 = Bytes.toBytes(<span class="jxr_string">"qual1"</span>);
-<a class="jxr_linenumber" name="460" href="#460">460</a>     <strong class="jxr_keyword">final</strong> byte[] QUAL2 = Bytes.toBytes(<span class="jxr_string">"qual2"</span>);
-<a class="jxr_linenumber" name="461" href="#461">461</a>     <strong class="jxr_keyword">final</strong> byte[] QUAL3 = Bytes.toBytes(<span class="jxr_string">"qual3"</span>);
-<a class="jxr_linenumber" name="462" href="#462">462</a>     <strong class="jxr_keyword">final</strong> byte[] QUAL4 = Bytes.toBytes(<span class="jxr_string">"qual4"</span>);
-<a class="jxr_linenumber" name="463" href="#463">463</a>     Table table = UTIL.getConnection().getTable(TEST_TABLE);
-<a class="jxr_linenumber" name="464" href="#464">464</a>     Delete d = <strong class="jxr_keyword">new</strong> Delete(ONE_ROW);
-<a class="jxr_linenumber" name="465" href="#465">465</a>     table.delete(d);
-<a class="jxr_linenumber" name="466" href="#466">466</a>     Put put = <strong class="jxr_keyword">new</strong> Put(ONE_ROW);
-<a class="jxr_linenumber" name="467" href="#467">467</a>     put.addColumn(BYTES_FAMILY, QUAL1, Bytes.toBytes(<span class="jxr_string">"abc"</span>));
-<a class="jxr_linenumber" name="468" href="#468">468</a>     put.addColumn(BYTES_FAMILY, QUAL2, Bytes.toBytes(1L));
-<a class="jxr_linenumber" name="469" href="#469">469</a>     table.put(put);
-<a class="jxr_linenumber" name="470" href="#470">470</a> 
-<a class="jxr_linenumber" name="471" href="#471">471</a>     Increment inc = <strong class="jxr_keyword">new</strong> Increment(ONE_ROW);
-<a class="jxr_linenumber" name="472" href="#472">472</a>     inc.addColumn(BYTES_FAMILY, QUAL2, 1);
-<a class="jxr_linenumber" name="473" href="#473">473</a>     inc.addColumn(BYTES_FAMILY, QUAL3, 1);
-<a class="jxr_linenumber" name="474" href="#474">474</a> 
-<a class="jxr_linenumber" name="475" href="#475">475</a>     Append a = <strong class="jxr_keyword">new</strong> Append(ONE_ROW);
-<a class="jxr_linenumber" name="476" href="#476">476</a>     a.add(BYTES_FAMILY, QUAL1, Bytes.toBytes(<span class="jxr_string">"def"</span>));
-<a class="jxr_linenumber" name="477" href="#477">477</a>     a.add(BYTES_FAMILY, QUAL4, Bytes.toBytes(<span class="jxr_string">"xyz"</span>));
-<a class="jxr_linenumber" name="478" href="#478">478</a>     List&lt;Row&gt; actions = <strong class="jxr_keyword">new</strong> ArrayList&lt;Row&gt;();
-<a class="jxr_linenumber" name="479" href="#479">479</a>     actions.add(inc);
-<a class="jxr_linenumber" name="480" href="#480">480</a>     actions.add(a);
-<a class="jxr_linenumber" name="481" href="#481">481</a> 
-<a class="jxr_linenumber" name="482" href="#482">482</a>     Object[] multiRes = <strong class="jxr_keyword">new</strong> Object[actions.size()];
-<a class="jxr_linenumber" name="483" href="#483">483</a>     table.batch(actions, multiRes);
-<a class="jxr_linenumber" name="484" href="#484">484</a>     validateResult(multiRes[1], QUAL1, Bytes.toBytes(<span class="jxr_string">"abcdef"</span>));
-<a class="jxr_linenumber" name="485" href="#485">485</a>     validateResult(multiRes[1], QUAL4, Bytes.toBytes(<span class="jxr_string">"xyz"</span>));
-<a class="jxr_linenumber" name="486" href="#486">486</a>     validateResult(multiRes[0], QUAL2, Bytes.toBytes(2L));
-<a class="jxr_linenumber" name="487" href="#487">487</a>     validateResult(multiRes[0], QUAL3, Bytes.toBytes(1L));
-<a class="jxr_linenumber" name="488" href="#488">488</a>     table.close();
-<a class="jxr_linenumber" name="489" href="#489">489</a>   }
-<a class="jxr_linenumber" name="490" href="#490">490</a> 
-<a class="jxr_linenumber" name="491" href="#491">491</a>   @Test(timeout=300000)
-<a class="jxr_linenumber" name="492" href="#492">492</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testNonceCollision() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="493" href="#493">493</a>     LOG.info(<span class="jxr_string">"test=testNonceCollision"</span>);
-<a class="jxr_linenumber" name="494" href="#494">494</a>     <strong class="jxr_keyword">final</strong> Connection connection = ConnectionFactory.createConnection(UTIL.getConfiguration());
-<a class="jxr_linenumber" name="495" href="#495">495</a>     Table table = connection.getTable(TEST_TABLE);
-<a class="jxr_linenumber" name="496" href="#496">496</a>     Put put = <strong class="jxr_keyword">new</strong> Put(ONE_ROW);
-<a class="jxr_linenumber" name="497" href="#497">497</a>     put.addColumn(BYTES_FAMILY, QUALIFIER, Bytes.toBytes(0L));
-<a class="jxr_linenumber" name="498" href="#498">498</a> 
-<a class="jxr_linenumber" name="499" href="#499">499</a>     <em class="jxr_comment">// Replace nonce manager with the one that returns each nonce twice.</em>
-<a class="jxr_linenumber" name="500" href="#500">500</a>     NonceGenerator cnm = <strong class="jxr_keyword">new</strong> PerClientRandomNonceGenerator() {
-<a class="jxr_linenumber" name="501" href="#501">501</a>       <strong class="jxr_keyword">long</strong> lastNonce = -1;
-<a class="jxr_linenumber" name="502" href="#502">502</a>       @Override
-<a class="jxr_linenumber" name="503" href="#503">503</a>       <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">long</strong> newNonce() {
-<a class="jxr_linenumber" name="504" href="#504">504</a>         <strong class="jxr_keyword">long</strong> nonce = 0;
-<a class="jxr_linenumber" name="505" href="#505">505</a>         <strong class="jxr_keyword">if</strong> (lastNonce == -1) {
-<a class="jxr_linenumber" name="506" href="#506">506</a>           lastNonce = nonce = <strong class="jxr_keyword">super</strong>.newNonce();
-<a class="jxr_linenumber" name="507" href="#507">507</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="508" href="#508">508</a>           nonce = lastNonce;
-<a class="jxr_linenumber" name="509" href="#509">509</a>           lastNonce = -1L;
-<a class="jxr_linenumber" name="510" href="#510">510</a>         }
-<a class="jxr_linenumber" name="511" href="#511">511</a>         <strong class="jxr_keyword">return</strong> nonce;
-<a class="jxr_linenumber" name="512" href="#512">512</a>       }
-<a class="jxr_linenumber" name="513" href="#513">513</a>     };
-<a class="jxr_linenumber" name="514" href="#514">514</a> 
-<a class="jxr_linenumber" name="515" href="#515">515</a>     NonceGenerator oldCnm =
-<a class="jxr_linenumber" name="516" href="#516">516</a>       ConnectionUtils.injectNonceGeneratorForTesting((ClusterConnection)connection, cnm);
-<a class="jxr_linenumber" name="517" href="#517">517</a> 
-<a class="jxr_linenumber" name="518" href="#518">518</a>     <em class="jxr_comment">// First test sequential requests.</em>
-<a class="jxr_linenumber" name="519" href="#519">519</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="520" href="#520">520</a>       Increment inc = <strong class="jxr_keyword">new</strong> Increment(ONE_ROW);
-<a class="jxr_linenumber" name="521" href="#521">521</a>       inc.addColumn(BYTES_FAMILY, QUALIFIER, 1L);
-<a class="jxr_linenumber" name="522" href="#522">522</a>       table.increment(inc);
-<a class="jxr_linenumber" name="523" href="#523">523</a>       inc = <strong class="jxr_keyword">new</strong> Increment(ONE_ROW);
-<a class="jxr_linenumber" name="524" href="#524">524</a>       inc.addColumn(BYTES_FAMILY, QUALIFIER, 1L);
-<a class="jxr_linenumber" name="525" href="#525">525</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="526" href="#526">526</a>         table.increment(inc);
-<a class="jxr_linenumber" name="527" href="#527">527</a>         fail(<span class="jxr_string">"Should have thrown an exception"</span>);
-<a class="jxr_linenumber" name="528" href="#528">528</a>       } <strong class="jxr_keyword">catch</strong> (OperationConflictException ex) {
-<a class="jxr_linenumber" name="529" href="#529">529</a>       }
-<a class="jxr_linenumber" name="530" href="#530">530</a>       Get get = <strong class="jxr_keyword">new</strong> Get(ONE_ROW);
-<a class="jxr_linenumber" name="531" href="#531">531</a>       get.addColumn(BYTES_FAMILY, QUALIFIER);
-<a class="jxr_linenumber" name="532" href="#532">532</a>       Result result = table.get(get);
-<a class="jxr_linenumber" name="533" href="#533">533</a>       validateResult(result, QUALIFIER, Bytes.toBytes(1L));
-<a class="jxr_linenumber" name="534" href="#534">534</a> 
-<a class="jxr_linenumber" name="535" href="#535">535</a>       <em class="jxr_comment">// Now run a bunch of requests in parallel, exactly half should succeed.</em>
-<a class="jxr_linenumber" name="536" href="#536">536</a>       <strong class="jxr_keyword">int</strong> numRequests = 40;
-<a class="jxr_linenumber" name="537" href="#537">537</a>       <strong class="jxr_keyword">final</strong> CountDownLatch startedLatch = <strong class="jxr_keyword">new</strong> CountDownLatch(numRequests);
-<a class="jxr_linenumber" name="538" href="#538">538</a>       <strong class="jxr_keyword">final</strong> CountDownLatch startLatch = <strong class="jxr_keyword">new</strong> CountDownLatch(1);
-<a class="jxr_linenumber" name="539" href="#539">539</a>       <strong class="jxr_keyword">final</strong> CountDownLatch doneLatch = <strong class="jxr_keyword">new</strong> CountDownLatch(numRequests);
-<a class="jxr_linenumber" name="540" href="#540">540</a>       <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; numRequests; ++i) {
-<a class="jxr_linenumber" name="541" href="#541">541</a>         Runnable r = <strong class="jxr_keyword">new</strong> Runnable() {
-<a class="jxr_linenumber" name="542" href="#542">542</a>           @Override
-<a class="jxr_linenumber" name="543" href="#543">543</a>           <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> run() {
-<a class="jxr_linenumber" name="544" href="#544">544</a>             Table table = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="545" href="#545">545</a>             <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="546" href="#546">546</a>               table = connection.getTable(TEST_TABLE);
-<a class="jxr_linenumber" name="547" href="#547">547</a>             } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="548" href="#548">548</a>               fail(<span class="jxr_string">"Not expected"</span>);
-<a class="jxr_linenumber" name="549" href="#549">549</a>             }
-<a class="jxr_linenumber" name="550" href="#550">550</a>             Increment inc = <strong class="jxr_keyword">new</strong> Increment(ONE_ROW);
-<a class="jxr_linenumber" name="551" href="#551">551</a>             inc.addColumn(BYTES_FAMILY, QUALIFIER, 1L);
-<a class="jxr_linenumber" name="552" href="#552">552</a>             startedLatch.countDown();
-<a class="jxr_linenumber" name="553" href="#553">553</a>             <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="554" href="#554">554</a>               startLatch.await();
-<a class="jxr_linenumber" name="555" href="#555">555</a>             } <strong class="jxr_keyword">catch</strong> (InterruptedException e) {
-<a class="jxr_linenumber" name="556" href="#556">556</a>               fail(<span class="jxr_string">"Not expected"</span>);
-<a class="jxr_linenumber" name="557" href="#557">557</a>             }
-<a class="jxr_linenumber" name="558" href="#558">558</a>             <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="559" href="#559">559</a>               table.increment(inc);
-<a class="jxr_linenumber" name="560" href="#560">560</a>             } <strong class="jxr_keyword">catch</strong> (OperationConflictException ex) { <em class="jxr_comment">// Some threads are expected to fail.</em>
-<a class="jxr_linenumber" name="561" href="#561">561</a>             } <strong class="jxr_keyword">catch</strong> (IOException ioEx) {
-<a class="jxr_linenumber" name="562" href="#562">562</a>               fail(<span class="jxr_string">"Not expected"</span>);
-<a class="jxr_linenumber" name="563" href="#563">563</a>             }
-<a class="jxr_linenumber" name="564" href="#564">564</a>             doneLatch.countDown();
-<a class="jxr_linenumber" name="565" href="#565">565</a>           }
-<a class="jxr_linenumber" name="566" href="#566">566</a>         };
-<a class="jxr_linenumber" name="567" href="#567">567</a>         Threads.setDaemonThreadRunning(<strong class="jxr_keyword">new</strong> Thread(r));
-<a class="jxr_linenumber" name="568" href="#568">568</a>       }
-<a class="jxr_linenumber" name="569" href="#569">569</a>       startedLatch.await(); <em class="jxr_comment">// Wait until all threads are ready...</em>
-<a class="jxr_linenumber" name="570" href="#570">570</a>       startLatch.countDown(); <em class="jxr_comment">// ...and unleash the herd!</em>
-<a class="jxr_linenumber" name="571" href="#571">571</a>       doneLatch.await();
-<a class="jxr_linenumber" name="572" href="#572">572</a>       <em class="jxr_comment">// Now verify</em>
-<a class="jxr_linenumber" name="573" href="#573">573</a>       get = <strong class="jxr_keyword">new</strong> Get(ONE_ROW);
-<a class="jxr_linenumber" name="574" href="#574">574</a>       get.addColumn(BYTES_FAMILY, QUALIFIER);
-<a class="jxr_linenumber" name="575" href="#575">575</a>       result = table.get(get);
-<a class="jxr_linenumber" name="576" href="#576">576</a>       validateResult(result, QUALIFIER, Bytes.toBytes((numRequests / 2) + 1L));
-<a class="jxr_linenumber" name="577" href="#577">577</a>       table.close();
-<a class="jxr_linenumber" name="578" href="#578">578</a>     } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="579" href="#579">579</a>       ConnectionImplementation.injectNonceGeneratorForTesting((ClusterConnection) connection, oldCnm);
-<a class="jxr_linenumber" name="580" href="#580">580</a>     }
-<a class="jxr_linenumber" name="581" href="#581">581</a>   }
-<a class="jxr_linenumber" name="582" href="#582">582</a> 
-<a class="jxr_linenumber" name="583" href="#583">583</a>   @Test(timeout=300000)
-<a class="jxr_linenumber" name="584" href="#584">584</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testBatchWithMixedActions() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="585" href="#585">585</a>     LOG.info(<span class="jxr_string">"test=testBatchWithMixedActions"</span>);
-<a class="jxr_linenumber" name="586" href="#586">586</a>     Table table = UTIL.getConnection().getTable(TEST_TABLE);
-<a class="jxr_linenumber" name="587" href="#587">587</a> 
-<a class="jxr_linenumber" name="588" href="#588">588</a>     <em class="jxr_comment">// Load some data to start</em>
-<a class="jxr_linenumber" name="589" href="#589">589</a>     List&lt;Put&gt; puts = constructPutRequests();
-<a class="jxr_linenumber" name="590" href="#590">590</a>     Object[] results = <strong class="jxr_keyword">new</strong> Object[puts.size()];
-<a class="jxr_linenumber" name="591" href="#591">591</a>     table.batch(puts, results);
-<a class="jxr_linenumber" name="592" href="#592">592</a>     validateSizeAndEmpty(results, KEYS.length);
-<a class="jxr_linenumber" name="593" href="#593">593</a> 
-<a class="jxr_linenumber" name="594" href="#594">594</a>     <em class="jxr_comment">// Batch: get, get, put(new col), delete, get, get of put, get of deleted,</em>
-<a class="jxr_linenumber" name="595" href="#595">595</a>     <em class="jxr_comment">// put</em>
-<a class="jxr_linenumber" name="596" href="#596">596</a>     List&lt;Row&gt; actions = <strong class="jxr_keyword">new</strong> ArrayList&lt;Row&gt;();
-<a class="jxr_linenumber" name="597" href="#597">597</a> 
-<a class="jxr_linenumber" name="598" href="#598">598</a>     byte[] qual2 = Bytes.toBytes(<span class="jxr_string">"qual2"</span>);
-<a class="jxr_linenumber" name="599" href="#599">599</a>     byte[] val2 = Bytes.toBytes(<span class="jxr_string">"putvalue2"</span>);
-<a class="jxr_linenumber" name="600" href="#600">600</a> 
-<a class="jxr_linenumber" name="601" href="#601">601</a>     <em class="jxr_comment">// 0 get</em>
-<a class="jxr_linenumber" name="602" href="#602">602</a>     Get get = <strong class="jxr_keyword">new</strong> Get(KEYS[10]);
-<a class="jxr_linenumber" name="603" href="#603">603</a>     get.addColumn(BYTES_FAMILY, QUALIFIER);
-<a class="jxr_linenumber" name="604" href="#604">604</a>     actions.add(get);
-<a class="jxr_linenumber" name="605" href="#605">605</a> 
-<a class="jxr_linenumber" name="606" href="#606">606</a>     <em class="jxr_comment">// 1 get</em>
-<a class="jxr_linenumber" name="607" href="#607">607</a>     get = <strong class="jxr_keyword">new</strong> Get(KEYS[11]);
-<a class="jxr_linenumber" name="608" href="#608">608</a>     get.addColumn(BYTES_FAMILY, QUALIFIER);
-<a class="jxr_linenumber" name="609" href="#609">609</a>     actions.add(get);
-<a class="jxr_linenumber" name="610" href="#610">610</a> 
-<a class="jxr_linenumber" name="611" href="#611">611</a>     <em class="jxr_comment">// 2 put of new column</em>
-<a class="jxr_linenumber" name="612" href="#612">612</a>     Put put = <strong class="jxr_keyword">new</strong> Put(KEYS[10]);
-<a class="jxr_linenumber" name="613" href="#613">613</a>     put.addColumn(BYTES_FAMILY, qual2, val2);
-<a class="jxr_linenumber" name="614" href="#614">614</a>     actions.add(put);
-<a class="jxr_linenumber" name="615" href="#615">615</a> 
-<a class="jxr_linenumber" name="616" href="#616">616</a>     <em class="jxr_comment">// 3 delete</em>
-<a class="jxr_linenumber" name="617" href="#617">617</a>     Delete delete = <strong class="jxr_keyword">new</strong> Delete(KEYS[20]);
-<a class="jxr_linenumber" name="618" href="#618">618</a>     delete.addFamily(BYTES_FAMILY);
-<a class="jxr_linenumber" name="619" href="#619">619</a>     actions.add(delete);
-<a class="jxr_linenumber" name="620" href="#620">620</a> 
-<a class="jxr_linenumber" name="621" href="#621">621</a>     <em class="jxr_comment">// 4 get</em>
-<a class="jxr_linenumber" name="622" href="#622">622</a>     get = <strong class="jxr_keyword">new</strong> Get(KEYS[30]);
-<a class="jxr_linenumber" name="623" href="#623">623</a>     get.addColumn(BYTES_FAMILY, QUALIFIER);
-<a class="jxr_linenumber" name="624" href="#624">624</a>     actions.add(get);
-<a class="jxr_linenumber" name="625" href="#625">625</a> 
-<a class="jxr_linenumber" name="626" href="#626">626</a>     <em class="jxr_comment">// There used to be a 'get' of a previous put here, but removed</em>
-<a class="jxr_linenumber" name="627" href="#627">627</a>     <em class="jxr_comment">// since this API really cannot guarantee order in terms of mixed</em>
-<a class="jxr_linenumber" name="628" href="#628">628</a>     <em class="jxr_comment">// get/puts.</em>
-<a class="jxr_linenumber" name="629" href="#629">629</a> 
-<a class="jxr_linenumber" name="630" href="#630">630</a>     <em class="jxr_comment">// 5 put of new column</em>
-<a class="jxr_linenumber" name="631" href="#631">631</a>     put = <strong class="jxr_keyword">new</strong> Put(KEYS[40]);
-<a class="jxr_linenumber" name="632" href="#632">632</a>     put.addColumn(BYTES_FAMILY, qual2, val2);
-<a class="jxr_linenumber" name="633" href="#633">633</a>     actions.add(put);
-<a class="jxr_linenumber" name="634" href="#634">634</a> 
-<a class="jxr_linenumber" name="635" href="#635">635</a>     results = <strong class="jxr_keyword">new</strong> Object[actions.size()];
-<a class="jxr_linenumber" name="636" href="#636">636</a>     table.batch(actions, results);
-<a class="jxr_linenumber" name="637" href="#637">637</a> 
-<a class="jxr_linenumber" name="638" href="#638">638</a>     <em class="jxr_comment">// Validation</em>
-<a class="jxr_linenumber" name="639" href="#639">639</a> 
-<a class="jxr_linenumber" name="640" href="#640">640</a>     validateResult(results[0]);
-<a class="jxr_linenumber" name="641" href="#641">641</a>     validateResult(results[1]);
-<a class="jxr_linenumber" name="642" href="#642">642</a>     validateEmpty(results[2]);
-<a class="jxr_linenumber" name="643" href="#643">643</a>     validateEmpty(results[3]);
-<a class="jxr_linenumber" name="644" href="#644">644</a>     validateResult(results[4]);
-<a class="jxr_linenumber" name="645" href="#645">645</a>     validateEmpty(results[5]);
-<a class="jxr_linenumber" name="646" href="#646">646</a> 
-<a class="jxr_linenumber" name="647" href="#647">647</a>     <em class="jxr_comment">// validate last put, externally from the batch</em>
-<a class="jxr_linenumber" name="648" href="#648">648</a>     get = <strong class="jxr_keyword">new</strong> Get(KEYS[40]);
-<a class="jxr_linenumber" name="649" href="#649">649</a>     get.addColumn(BYTES_FAMILY, qual2);
-<a class="jxr_linenumber" name="650" href="#650">650</a>     Result r = table.get(get);
-<a class="jxr_linenumber" name="651" href="#651">651</a>     validateResult(r, qual2, val2);
-<a class="jxr_linenumber" name="652" href="#652">652</a> 
-<a class="jxr_linenumber" name="653" href="#653">653</a>     table.close();
-<a class="jxr_linenumber" name="654" href="#654">654</a>   }
-<a class="jxr_linenumber" name="655" href="#655">655</a> 
-<a class="jxr_linenumber" name="656" href="#656">656</a>   <em class="jxr_comment">// // Helper methods ////</em>
-<a class="jxr_linenumber" name="657" href="#657">657</a> 
-<a class="jxr_linenumber" name="658" href="#658">658</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> validateResult(Object r) {
-<a class="jxr_linenumber" name="659" href="#659">659</a>     validateResult(r, QUALIFIER, VALUE);
-<a class="jxr_linenumber" name="660" href="#660">660</a>   }
-<a class="jxr_linenumber" name="661" href="#661">661</a> 
-<a class="jxr_linenumber" name="662" href="#662">662</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> validateResult(Object r1, byte[] qual, byte[] val) {
-<a class="jxr_linenumber" name="663" href="#663">663</a>     Result r = (Result)r1;
-<a class="jxr_linenumber" name="664" href="#664">664</a>     Assert.assertTrue(r.containsColumn(BYTES_FAMILY, qual));
-<a class="jxr_linenumber" name="665" href="#665">665</a>     byte[] value = r.getValue(BYTES_FAMILY, qual);
-<a class="jxr_linenumber" name="666" href="#666">666</a>     <strong class="jxr_keyword">if</strong> (0 != Bytes.compareTo(val, value)) {
-<a class="jxr_linenumber" name="667" href="#667">667</a>       fail(<span class="jxr_string">"Expected ["</span> + Bytes.toStringBinary(val)
-<a class="jxr_linenumber" name="668" href="#668">668</a>           + <span class="jxr_string">"] but got ["</span> + Bytes.toStringBinary(value) + <span class="jxr_string">"]"</span>);
-<a class="jxr_linenumber" name="669" href="#669">669</a>     }
-<a class="jxr_linenumber" name="670" href="#670">670</a>   }
-<a class="jxr_linenumber" name="671" href="#671">671</a> 
-<a class="jxr_linenumber" name="672" href="#672">672</a>   <strong class="jxr_keyword">private</strong> List&lt;Put&gt; constructPutRequests() {
-<a class="jxr_linenumber" name="673" href="#673">673</a>     List&lt;Put&gt; puts = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
-<a class="jxr_linenumber" name="674" href="#674">674</a>     <strong class="jxr_keyword">for</strong> (byte[] k : KEYS) {
-<a class="jxr_linenumber" name="675" href="#675">675</a>       Put put = <strong class="jxr_keyword">new</strong> Put(k);
-<a class="jxr_linenumber" name="676" href="#676">676</a>       put.addColumn(BYTES_FAMILY, QUALIFIER, VALUE);
-<a class="jxr_linenumber" name="677" href="#677">677</a>       puts.add(put);
-<a class="jxr_linenumber" name="678" href="#678">678</a>     }
-<a class="jxr_linenumber" name="679" href="#679">679</a>     <strong class="jxr_keyword">return</strong> puts;
-<a class="jxr_linenumber" name="680" href="#680">680</a>   }
-<a class="jxr_linenumber" name="681" href="#681">681</a> 
-<a class="jxr_linenumber" name="682" href="#682">682</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> validateLoadedData(Table table) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="683" href="#683">683</a>     <em class="jxr_comment">// get the data back and validate that it is correct</em>
-<a class="jxr_linenumber" name="684" href="#684">684</a>     LOG.info(<span class="jxr_string">"Validating data on "</span> + table);
-<a class="jxr_linenumber" name="685" href="#685">685</a>     <strong class="jxr_keyword">for</strong> (byte[] k : KEYS) {
-<a class="jxr_linenumber" name="686" href="#686">686</a>       Get get = <strong class="jxr_keyword">new</strong> Get(k);
-<a class="jxr_linenumber" name="687" href="#687">687</a>       get.addColumn(BYTES_FAMILY, QUALIFIER);
-<a class="jxr_linenumber" name="688" href="#688">688</a>       Result r = table.get(get);
-<a class="jxr_linenumber" name="689" href="#689">689</a>       Assert.assertTrue(r.containsColumn(BYTES_FAMILY, QUALIFIER));
-<a class="jxr_linenumber" name="690" href="#690">690</a>       Assert.assertEquals(0, Bytes.compareTo(VALUE, r
-<a class="jxr_linenumber" name="691" href="#691">691</a>           .getValue(BYTES_FAMILY, QUALIFIER)));
-<a class="jxr_linenumber" name="692" href="#692">692</a>     }
-<a class="jxr_linenumber" name="693" href="#693">693</a>   }
-<a class="jxr_linenumber" name="694" href="#694">694</a> 
-<a class="jxr_linenumber" name="695" href="#695">695</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> validateEmpty(Object r1) {
-<a class="jxr_linenumber" name="696" href="#696">696</a>     Result result = (Result)r1;
-<a class="jxr_linenumber" name="697" href="#697">697</a>     Assert.assertTrue(result != <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="698" href="#698">698</a>     Assert.assertTrue(result.getRow() == <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="699" href="#699">699</a>     Assert.assertEquals(0, result.rawCells().length);
-<a class="jxr_linenumber" name="700" href="#700">700</a>   }
-<a class="jxr_linenumber" name="701" href="#701">701</a> 
-<a class="jxr_linenumber" name="702" href="#702">702</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> validateSizeAndEmpty(Object[] results, <strong class="jxr_keyword">int</strong> expectedSize) {
-<a class="jxr_linenumber" name="703" href="#703">703</a>     <em class="jxr_comment">// Validate got back the same number of Result objects, all empty</em>
-<a class="jxr_linenumber" name="704" href="#704">704</a>     Assert.assertEquals(expectedSize, results.length);
-<a class="jxr_linenumber" name="705" href="#705">705</a>     <strong class="jxr_keyword">for</strong> (Object result : results) {
-<a class="jxr_linenumber" name="706" href="#706">706</a>       validateEmpty(result);
-<a class="jxr_linenumber" name="707" href="#707">707</a>     }
-<a class="jxr_linenumber" name="708" href="#708">708</a>   }
-<a class="jxr_linenumber" name="709" href="#709">709</a> }
+<a class="jxr_linenumber" name="149" href="#149">149</a>     UTIL.getConfiguration().setLong(<span class="jxr_string">"hbase.htable.threads.coresize"</span>, slaves + 1);
+<a class="jxr_linenumber" name="150" href="#150">150</a>     <strong class="jxr_keyword">try</strong> (Connection connection = ConnectionFactory.createConnection(UTIL.getConfiguration())) {
+<a class="jxr_linenumber" name="151" href="#151">151</a>       ThreadPoolExecutor executor = HTable.getDefaultExecutor(UTIL.getConfiguration());
+<a class="jxr_linenumber" name="152" href="#152">152</a>       <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="153" href="#153">153</a>         <strong class="jxr_keyword">try</strong> (Table t = connection.getTable(TEST_TABLE, executor)) {
+<a class="jxr_linenumber" name="154" href="#154">154</a>           List&lt;Put&gt; puts = constructPutRequests(); <em class="jxr_comment">// creates a Put for every region</em>
+<a class="jxr_linenumber" name="155" href="#155">155</a>           t.batch(puts, <strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="156" href="#156">156</a>           HashSet&lt;ServerName&gt; regionservers = <strong class="jxr_keyword">new</strong> HashSet&lt;ServerName&gt;();
+<a class="jxr_linenumber" name="157" href="#157">157</a>           <strong class="jxr_keyword">try</strong> (RegionLocator locator = connection.getRegionLocator(TEST_TABLE)) {
+<a class="jxr_linenumber" name="158" href="#158">158</a>             <strong class="jxr_keyword">for</strong> (Row r : puts) {
+<a class="jxr_linenumber" name="159" href="#159">159</a>               HRegionLocation location = locator.getRegionLocation(r.getRow());
+<a class="jxr_linenumber" name="160" href="#160">160</a>               regionservers.add(location.getServerName());
+<a class="jxr_linenumber" name="161" href="#161">161</a>             }
+<a class="jxr_linenumber" name="162" href="#162">162</a>           }
+<a class="jxr_linenumber" name="163" href="#163">163</a>           assertEquals(regionservers.size(), executor.getLargestPoolSize());
+<a class="jxr_linenumber" name="164" href="#164">164</a>         }
+<a class="jxr_linenumber" name="165" href="#165">165</a>       } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="166" href="#166">166</a>         executor.shutdownNow();
+<a class="jxr_linenumber" name="167" href="#167">167</a>       }
+<a class="jxr_linenumber" name="168" href="#168">168</a>     }
+<a class="jxr_linenumber" name="169" href="#169">169</a>   }
+<a class="jxr_linenumber" name="170" href="#170">170</a> 
+<a class="jxr_linenumber" name="171" href="#171">171</a>   @Test(timeout=300000)
+<a class="jxr_linenumber" name="172" href="#172">172</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testBatchWithGet() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="173" href="#173">173</a>     LOG.info(<span class="jxr_string">"test=testBatchWithGet"</span>);
+<a class="jxr_linenumber" name="174" href="#174">174</a>     Table table = UTIL.getConnection().getTable(TEST_TABLE);
+<a class="jxr_linenumber" name="175" href="#175">175</a> 
+<a class="jxr_linenumber" name="176" href="#176">176</a>     <em class="jxr_comment">// load test data</em>
+<a class="jxr_linenumber" name="177" href="#177">177</a>     List&lt;Put&gt; puts = constructPutRequests();
+<a class="jxr_linenumber" name="178" href="#178">178</a>     table.batch(puts, <strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="179" href="#179">179</a> 
+<a class="jxr_linenumber" name="180" href="#180">180</a>     <em class="jxr_comment">// create a list of gets and run it</em>
+<a class="jxr_linenumber" name="181" href="#181">181</a>     List&lt;Row&gt; gets = <strong class="jxr_keyword">new</strong> ArrayList&lt;Row&gt;();
+<a class="jxr_linenumber" name="182" href="#182">182</a>     <strong class="jxr_keyword">for</strong> (byte[] k : KEYS) {
+<a class="jxr_linenumber" name="183" href="#183">183</a>       Get get = <strong class="jxr_keyword">new</strong> Get(k);
+<a class="jxr_linenumber" name="184" href="#184">184</a>       get.addColumn(BYTES_FAMILY, QUALIFIER);
+<a class="jxr_linenumber" name="185" href="#185">185</a>       gets.add(get);
+<a class="jxr_linenumber" name="186" href="#186">186</a>     }
+<a class="jxr_linenumber" name="187" href="#187">187</a>     Result[] multiRes = <strong class="jxr_keyword">new</strong> Result[gets.size()];
+<a class="jxr_linenumber" name="188" href="#188">188</a>     table.batch(gets, multiRes);
+<a class="jxr_linenumber" name="189" href="#189">189</a> 
+<a class="jxr_linenumber" name="190" href="#190">190</a>     <em class="jxr_comment">// Same gets using individual call API</em>
+<a class="jxr_linenumber" name="191" href="#191">191</a>     List&lt;Result&gt; singleRes = <strong class="jxr_keyword">new</strong> ArrayList&lt;Result&gt;();
+<a class="jxr_linenumber" name="192" href="#192">192</a>     <strong class="jxr_keyword">for</strong> (Row get : gets) {
+<a class="jxr_linenumber" name="193" href="#193">193</a>       singleRes.add(table.get((Get) get));
+<a class="jxr_linenumber" name="194" href="#194">194</a>     }
+<a class="jxr_linenumber" name="195" href="#195">195</a>     <em class="jxr_comment">// Compare results</em>
+<a class="jxr_linenumber" name="196" href="#196">196</a>     Assert.assertEquals(singleRes.size(), multiRes.length);
+<a class="jxr_linenumber" name="197" href="#197">197</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; singleRes.size(); i++) {
+<a class="jxr_linenumber" name="198" href="#198">198</a>       Assert.assertTrue(singleRes.get(i).containsColumn(BYTES_FAMILY, QUALIFIER));
+<a class="jxr_linenumber" name="199" href="#199">199</a>       Cell[] singleKvs = singleRes.get(i).rawCells();
+<a class="jxr_linenumber" name="200" href="#200">200</a>       Cell[] multiKvs = multiRes[i].rawCells();
+<a class="jxr_linenumber" name="201" href="#201">201</a>       <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> j = 0; j &lt; singleKvs.length; j++) {
+<a class="jxr_linenumber" name="202" href="#202">202</a>         Assert.assertEquals(singleKvs[j], multiKvs[j]);
+<a class="jxr_linenumber" name="203" href="#203">203</a>         Assert.assertEquals(0, Bytes.compareTo(CellUtil.cloneValue(singleKvs[j]),
+<a class="jxr_linenumber" name="204" href="#204">204</a>             CellUtil.cloneValue(multiKvs[j])));
+<a class="jxr_linenumber" name="205" href="#205">205</a>       }
+<a class="jxr_linenumber" name="206" href="#206">206</a>     }
+<a class="jxr_linenumber" name="207" href="#207">207</a>     table.close();
+<a class="jxr_linenumber" name="208" href="#208">208</a>   }
+<a class="jxr_linenumber" name="209" href="#209">209</a> 
+<a class="jxr_linenumber" name="210" href="#210">210</a>   @Test
+<a class="jxr_linenumber" name="211" href="#211">211</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testBadFam() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="212" href="#212">212</a>     LOG.info(<span class="jxr_string">"test=testBadFam"</span>);
+<a class="jxr_linenumber" name="213" href="#213">213</a>     Table table = UTIL.getConnection().getTable(TEST_TABLE);
+<a class="jxr_linenumber" name="214" href="#214">214</a> 
+<a class="jxr_linenumber" name="215" href="#215">215</a>     List&lt;Row&gt; actions = <strong class="jxr_keyword">new</strong> ArrayList&lt;Row&gt;();
+<a class="jxr_linenumber" name="216" href="#216">216</a>     Put p = <strong class="jxr_keyword">new</strong> Put(Bytes.toBytes(<span class="jxr_string">"row1"</span>));
+<a class="jxr_linenumber" name="217" href="#217">217</a>     p.addColumn(Bytes.toBytes(<span class="jxr_string">"bad_family"</span>), Bytes.toBytes(<span class="jxr_string">"qual"</span>), Bytes.toBytes(<span class="jxr_string">"value"</span>));
+<a class="jxr_linenumber" name="218" href="#218">218</a>     actions.add(p);
+<a class="jxr_linenumber" name="219" href="#219">219</a>     p = <strong class="jxr_keyword">new</strong> Put(Bytes.toBytes(<span class="jxr_string">"row2"</span>));
+<a class="jxr_linenumber" name="220" href="#220">220</a>     p.addColumn(BYTES_FAMILY, Bytes.toBytes(<span class="jxr_string">"qual"</span>), Bytes.toBytes(<span class="jxr_string">"value"</span>));
+<a class="jxr_linenumber" name="221" href="#221">221</a>     actions.add(p);
+<a class="jxr_linenumber" name="222" href="#222">222</a> 
+<a class="jxr_linenumber" name="223" href="#223">223</a>     <em class="jxr_comment">// row1 and row2 should be in the same region.</em>
+<a class="jxr_linenumber" name="224" href="#224">224</a> 
+<a class="jxr_linenumber" name="225" href="#225">225</a>     Object [] r = <strong class="jxr_keyword">new</strong> Object[actions.size()];
+<a class="jxr_linenumber" name="226" href="#226">226</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="227" href="#227">227</a>       table.batch(actions, r);
+<a class="jxr_linenumber" name="228" href="#228">228</a>       fail();
+<a class="jxr_linenumber" name="229" href="#229">229</a>     } <strong class="jxr_keyword">catch</strong> (RetriesExhaustedWithDetailsException ex) {
+<a class="jxr_linenumber" name="230" href="#230">230</a>       LOG.debug(ex);
+<a class="jxr_linenumber" name="231" href="#231">231</a>       <em class="jxr_comment">// good!</em>
+<a class="jxr_linenumber" name="232" href="#232">232</a>       assertFalse(ex.mayHaveClusterIssues());
+<a class="jxr_linenumber" name="233" href="#233">233</a>     }
+<a class="jxr_linenumber" name="234" href="#234">234</a>     assertEquals(2, r.length);
+<a class="jxr_linenumber" name="235" href="#235">235</a>     assertTrue(r[0] instanceof Throwable);
+<a class="jxr_linenumber" name="236" href="#236">236</a>     assertTrue(r[1] instanceof Result);
+<a class="jxr_linenumber" name="237" href="#237">237</a>     table.close();
+<a class="jxr_linenumber" name="238" href="#238">238</a>   }
+<a class="jxr_linenumber" name="239" href="#239">239</a> 
+<a class="jxr_linenumber" name="240" href="#240">240</a>   @Test (timeout=300000)
+<a class="jxr_linenumber" name="241" href="#241">241</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testFlushCommitsNoAbort() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="242" href="#242">242</a>     LOG.info(<span class="jxr_string">"test=testFlushCommitsNoAbort"</span>);
+<a class="jxr_linenumber" name="243" href="#243">243</a>     doTestFlushCommits(false);
+<a class="jxr_linenumber" name="244" href="#244">244</a>   }
+<a class="jxr_linenumber" name="245" href="#245">245</a> 
+<a class="jxr_linenumber" name="246" href="#246">246</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="247" href="#247">247</a> <em class="jxr_javadoccomment">   * Only run one Multi test with a forced RegionServer abort. Otherwise, the</em>
+<a class="jxr_linenumber" name="248" href="#248">248</a> <em class="jxr_javadoccomment">   * unit tests will take an unnecessarily long time to run.</em>
+<a class="jxr_linenumber" name="249" href="#249">249</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="250" href="#250">250</a> <em class="jxr_javadoccomment">   * @throws Exception</em>
+<a class="jxr_linenumber" name="251" href="#251">251</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="252" href="#252">252</a>   @Test (timeout=360000)
+<a class="jxr_linenumber" name="253" href="#253">253</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testFlushCommitsWithAbort() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="254" href="#254">254</a>     LOG.info(<span class="jxr_string">"test=testFlushCommitsWithAbort"</span>);
+<a class="jxr_linenumber" name="255" href="#255">255</a>     doTestFlushCommits(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="256" href="#256">256</a>   }
+<a class="jxr_linenumber" name="257" href="#257">257</a> 
+<a class="jxr_linenumber" name="258" href="#258">258</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="259" href="#259">259</a> <em class="jxr_javadoccomment">   * Set table auto flush to false and test flushing commits</em>
+<a class="jxr_linenumber" name="260" href="#260">260</a> <em class="jxr_javadoccomment">   * @param doAbort true if abort one regionserver in the testing</em>
+<a class="jxr_linenumber" name="261" href="#261">261</a> <em class="jxr_javadoccomment">   * @throws Exception</em>
+<a class="jxr_linenumber" name="262" href="#262">262</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="263" href="#263">263</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> doTestFlushCommits(<strong class="jxr_keyword">boolean</strong> doAbort) <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="264" href="#264">264</a>     <em class="jxr_comment">// Load the data</em>
+<a class="jxr_linenumber" name="265" href="#265">265</a>     LOG.info(<span class="jxr_string">"get new table"</span>);
+<a class="jxr_linenumber" name="266" href="#266">266</a>     Table table = UTIL.getConnection().getTable(TEST_TABLE);
+<a class="jxr_linenumber" name="267" href="#267">267</a>     table.setWriteBufferSize(10 * 1024 * 1024);
+<a class="jxr_linenumber" name="268" href="#268">268</a> 
+<a class="jxr_linenumber" name="269" href="#269">269</a>     LOG.info(<span class="jxr_string">"constructPutRequests"</span>);
+<a class="jxr_linenumber" name="270" href="#270">270</a>     List&lt;Put&gt; puts = constructPutRequests();
+<a class="jxr_linenumber" name="271" href="#271">271</a>     table.put(puts);
+<a class="jxr_linenumber" name="272" href="#272">272</a>     LOG.info(<span class="jxr_string">"puts"</span>);
+<a class="jxr_linenumber" name="273" href="#273">273</a>     <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> liveRScount = UTIL.getMiniHBaseCluster().getLiveRegionServerThreads()
+<a class="jxr_linenumber" name="274" href="#274">274</a>         .size();
+<a class="jxr_linenumber" name="275" href="#275">275</a>     assert liveRScount &gt; 0;
+<a class="jxr_linenumber" name="276" href="#276">276</a>     JVMClusterUtil.RegionServerThread liveRS = UTIL.getMiniHBaseCluster()
+<a class="jxr_linenumber" name="277" href="#277">277</a>         .getLiveRegionServerThreads().get(0);
+<a class="jxr_linenumber" name="278" href="#278">278</a>     <strong class="jxr_keyword">if</strong> (doAbort) {
+<a class="jxr_linenumber" name="279" href="#279">279</a>       liveRS.getRegionServer().abort(<span class="jxr_string">"Aborting for tests"</span>,
+<a class="jxr_linenumber" name="280" href="#280">280</a>           <strong class="jxr_keyword">new</strong> Exception(<span class="jxr_string">"doTestFlushCommits"</span>));
+<a class="jxr_linenumber" name="281" href="#281">281</a>       <em class="jxr_comment">// If we wait for no regions being online after we abort the server, we</em>
+<a class="jxr_linenumber" name="282" href="#282">282</a>       <em class="jxr_comment">// could ensure the master has re-assigned the regions on killed server</em>
+<a class="jxr_linenumber" name="283" href="#283">283</a>       <em class="jxr_comment">// after writing successfully. It means the server we aborted is dead</em>
+<a class="jxr_linenumber" name="284" href="#284">284</a>       <em class="jxr_comment">// and detected by matser</em>
+<a class="jxr_linenumber" name="285" href="#285">285</a>       <strong class="jxr_keyword">while</strong> (liveRS.getRegionServer().getNumberOfOnlineRegions() != 0) {
+<a class="jxr_linenumber" name="286" href="#286">286</a>         Thread.sleep(100);
+<a class="jxr_linenumber" name="287" href="#287">287</a>       }
+<a class="jxr_linenumber" name="288" href="#288">288</a>       <em class="jxr_comment">// try putting more keys after the abort. same key/qual... just validating</em>
+<a class="jxr_linenumber" name="289" href="#289">289</a>       <em class="jxr_comment">// no exceptions thrown</em>
+<a class="jxr_linenumber" name="290" href="#290">290</a>       puts = constructPutRequests();
+<a class="jxr_linenumber" name="291" href="#291">291</a>       table.put(puts);
+<a class="jxr_linenumber" name="292" href="#292">292</a>     }
+<a class="jxr_linenumber" name="293" href="#293">293</a> 
+<a class="jxr_linenumber" name="294" href="#294">294</a>     LOG.info(<span class="jxr_string">"validating loaded data"</span>);
+<a class="jxr_linenumber" name="295" href="#295">295</a>     validateLoadedData(table);
+<a class="jxr_linenumber" name="296" href="#296">296</a> 
+<a class="jxr_linenumber" name="297" href="#297">297</a>     <em class="jxr_comment">// Validate server and region count</em>
+<a class="jxr_linenumber" name="298" href="#298">298</a>     List&lt;JVMClusterUtil.RegionServerThread&gt; liveRSs = UTIL.getMiniHBaseCluster().getLiveRegionServerThreads();
+<a class="jxr_linenumber" name="299" href="#299">299</a>     <strong class="jxr_keyword">int</strong> count = 0;
+<a class="jxr_linenumber" name="300" href="#300">300</a>     <strong class="jxr_keyword">for</strong> (JVMClusterUtil.RegionServerThread t: liveRSs) {
+<a class="jxr_linenumber" name="301" href="#301">301</a>       count++;
+<a class="jxr_linenumber" name="302" href="#302">302</a>       LOG.info(<span class="jxr_string">"Count="</span> + count + <span class="jxr_string">", Alive="</span> + t.getRegionServer());
+<a class="jxr_linenumber" name="303" href="#303">303</a>     }
+<a class="jxr_linenumber" name="304" href="#304">304</a>     LOG.info(<span class="jxr_string">"Count="</span> + count);
+<a class="jxr_linenumber" name="305" href="#305">305</a>     Assert.assertEquals(<span class="jxr_string">"Server count="</span> + count + <span class="jxr_string">", abort="</span> + doAbort,
+<a class="jxr_linenumber" name="306" href="#306">306</a>         (doAbort ? (liveRScount - 1) : liveRScount), count);
+<a class="jxr_linenumber" name="307" href="#307">307</a>     <strong class="jxr_keyword">if</strong> (doAbort) {
+<a class="jxr_linenumber" name="308" href="#308">308</a>       UTIL.getMiniHBaseCluster().waitOnRegionServer(0);
+<a class="jxr_linenumber" name="309" href="#309">309</a>       UTIL.waitFor(15 * 1000, <strong class="jxr_keyword">new</strong> Waiter.Predicate&lt;Exception&gt;() {
+<a class="jxr_linenumber" name="310" href="#310">310</a>         @Override
+<a class="jxr_linenumber" name="311" href="#311">311</a>         <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> evaluate() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="312" href="#312">312</a>           <em class="jxr_comment">// Master is also a regionserver, so the count is liveRScount</em>
+<a class="jxr_linenumber" name="313" href="#313">313</a>           <strong class="jxr_keyword">return</strong> UTIL.getMiniHBaseCluster().getMaster()
+<a class="jxr_linenumber" name="314" href="#314">314</a>               .getClusterStatus().getServersSize() == liveRScount;
+<a class="jxr_linenumber" name="315" href="#315">315</a>         }
+<a class="jxr_linenumber" name="316" href="#316">316</a>       });
+<a class="jxr_linenumber" name="317" href="#317">317</a>       UTIL.waitFor(15 * 1000, UTIL.predicateNoRegionsInTransition());
+<a class="jxr_linenumber" name="318" href="#318">318</a>     }
+<a class="jxr_linenumber" name="319" href="#319">319</a> 
+<a class="jxr_linenumber" name="320" href="#320">320</a>     table.close();
+<a class="jxr_linenumber" name="321" href="#321">321</a>     LOG.info(<span class="jxr_string">"done"</span>);
+<a class="jxr_linenumber" name="322" href="#322">322</a>   }
+<a class="jxr_linenumber" name="323" href="#323">323</a> 
+<a class="jxr_linenumber" name="324" href="#324">324</a>   @Test (timeout=300000)
+<a class="jxr_linenumber" name="325" href="#325">325</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testBatchWithPut() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="326" href="#326">326</a>     LOG.info(<span class="jxr_string">"test=testBatchWithPut"</span>);
+<a class="jxr_linenumber" name="327" href="#327">327</a>     Table table = CONNECTION.getTable(TEST_TABLE);
+<a class="jxr_linenumber" name="328" href="#328">328</a>     <em class="jxr_comment">// put multiple rows using a batch</em>
+<a class="jxr_linenumber" name="329" href="#329">329</a>     List&lt;Put&gt; puts = constructPutRequests();
+<a class="jxr_linenumber" name="330" href="#330">330</a> 
+<a class="jxr_linenumber" name="331" href="#331">331</a>     Object[] results = <strong class="jxr_keyword">new</strong> Object[puts.size()];
+<a class="jxr_linenumber" name="332" href="#332">332</a>     table.batch(puts, results);
+<a class="jxr_linenumber" name="333" href="#333">333</a>     validateSizeAndEmpty(results, KEYS.length);
+<a class="jxr_linenumber" name="334" href="#334">334</a> 
+<a class="jxr_linenumber" name="335" href="#335">335</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">true</strong>) {
+<a class="jxr_linenumber" name="336" href="#336">336</a>       <strong class="jxr_keyword">int</strong> liveRScount = UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().size();
+<a class="jxr_linenumber" name="337" href="#337">337</a>       assert liveRScount &gt; 0;
+<a class="jxr_linenumber" name="338" href="#338">338</a>       JVMClusterUtil.RegionServerThread liveRS =
+<a class="jxr_linenumber" name="339" href="#339">339</a>         UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().get(0);
+<a class="jxr_linenumber" name="340" href="#340">340</a>       liveRS.getRegionServer().abort(<span class="jxr_string">"Aborting for tests"</span>, <strong class="jxr_keyword">new</strong> Exception(<span class="jxr_string">"testBatchWithPut"</span>));
+<a class="jxr_linenumber" name="341" href="#341">341</a>       puts = constructPutRequests();
+<a class="jxr_linenumber" name="342" href="#342">342</a>       <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="343" href="#343">343</a>         results = <strong class="jxr_keyword">new</strong> Object[puts.size()];
+<a class="jxr_linenumber" name="344" href="#344">344</a>         table.batch(puts, results);
+<a class="jxr_linenumber" name="345" href="#345">345</a>       } <strong class="jxr_keyword">catch</strong> (RetriesExhaustedWithDetailsException ree) {
+<a class="jxr_linenumber" name="346" href="#346">346</a>         LOG.info(ree.getExhaustiveDescription());
+<a class="jxr_linenumber" name="347" href="#347">347</a>         table.close();
+<a class="jxr_linenumber" name="348" href="#348">348</a>         <strong class="jxr_keyword">throw</strong> ree;
+<a class="jxr_linenumber" name="349" href="#349">349</a>       }
+<a class="jxr_linenumber" name="350" href="#350">350</a>       validateSizeAndEmpty(results, KEYS.length);
+<a class="jxr_linenumber" name="351" href="#351">351</a>     }
+<a class="jxr_linenumber" name="352" href="#352">352</a> 
+<a class="jxr_linenumber" name="353" href="#353">353</a>     validateLoadedData(table);
+<a class="jxr_linenumber" name="354" href="#354">354</a>     table.close();
+<a class="jxr_linenumber" name="355" href="#355">355</a>   }
+<a class="jxr_linenumber" name="356" href="#356">356</a> 
+<a class="jxr_linenumber" name="357" href="#357">357</a>   @Test(timeout=300000)
+<a class="jxr_linenumber" name="358" href="#358">358</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testBatchWithDelete() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="359" href="#359">359</a>     LOG.info(<span class="jxr_string">"test=testBatchWithDelete"</span>);
+<a class="jxr_linenumber" name="360" href="#360">360</a>     Table table = UTIL.getConnection().getTable(TEST_TABLE);
+<a class="jxr_linenumber" name="361" href="#361">361</a> 
+<a class="jxr_linenumber" name="362" href="#362">362</a>     <em class="jxr_comment">// Load some data</em>
+<a class="jxr_linenumber" name="363" href="#363">363</a>     List&lt;Put&gt; puts = constructPutRequests();
+<a class="jxr_linenumber" name="364" href="#364">364</a>     Object[] results = <strong class="jxr_keyword">new</strong> Object[puts.size()];
+<a class="jxr_linenumber" name="365" href="#365">365</a>     table.batch(puts, results);
+<a class="jxr_linenumber" name="366" href="#366">366</a>     validateSizeAndEmpty(results, KEYS.length);
+<a class="jxr_linenumber" name="367" href="#367">367</a> 
+<a class="jxr_linenumber" name="368" href="#368">368</a>     <em class="jxr_comment">// Deletes</em>
+<a class="jxr_linenumber" name="369" href="#369">369</a>     List&lt;Row&gt; deletes = <strong class="jxr_keyword">new</strong> ArrayList&lt;Row&gt;();
+<a class="jxr_linenumber" name="370" href="#370">370</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; KEYS.length; i++) {
+<a class="jxr_linenumber" name="371" href="#371">371</a>       Delete delete = <strong class="jxr_keyword">new</strong> Delete(KEYS[i]);
+<a class="jxr_linenumber" name="372" href="#372">372</a>       delete.addFamily(BYTES_FAMILY);
+<a class="jxr_linenumber" name="373" href="#373">373</a>       deletes.add(delete);
+<a class="jxr_linenumber" name="374" h

<TRUNCATED>

[38/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html
index 2da937e..88c85d6 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html
@@ -104,7 +104,7 @@
 </dl>
 <hr>
 <br>
-<pre> class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1630">WALSplitter.LogReplayOutputSink</a>
+<pre> class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1636">WALSplitter.LogReplayOutputSink</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a></pre>
 <div class="block">Class that manages to replay edits from WAL files directly to assigned fail over region servers</div>
 </li>
@@ -333,7 +333,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>BUFFER_THRESHOLD</h4>
-<pre>private static final&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1631">BUFFER_THRESHOLD</a></pre>
+<pre>private static final&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1637">BUFFER_THRESHOLD</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.wal.WALSplitter.LogReplayOutputSink.BUFFER_THRESHOLD">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -343,7 +343,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>KEY_DELIMITER</h4>
-<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1632">KEY_DELIMITER</a></pre>
+<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1638">KEY_DELIMITER</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.wal.WALSplitter.LogReplayOutputSink.KEY_DELIMITER">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -353,7 +353,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>waitRegionOnlineTimeOut</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1634">waitRegionOnlineTimeOut</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1640">waitRegionOnlineTimeOut</a></pre>
 </li>
 </ul>
 <a name="recoveredRegions">
@@ -362,7 +362,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>recoveredRegions</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1635">recoveredRegions</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1641">recoveredRegions</a></pre>
 </li>
 </ul>
 <a name="writers">
@@ -371,7 +371,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>writers</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionServerWriter</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1636">writers</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionServerWriter</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1642">writers</a></pre>
 </li>
 </ul>
 <a name="onlineRegions">
@@ -380,7 +380,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>onlineRegions</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1639">onlineRegions</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1645">onlineRegions</a></pre>
 </li>
 </ul>
 <a name="tableNameToHConnectionMap">
@@ -389,7 +389,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>tableNameToHConnectionMap</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1642">tableNameToHConnectionMap</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1648">tableNameToHConnectionMap</a></pre>
 </li>
 </ul>
 <a name="serverToBufferQueueMap">
@@ -398,7 +398,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>serverToBufferQueueMap</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/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;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>,<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1648">serverToBufferQueueMap</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/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;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>,<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1654">serverToBufferQueueMap</a></pre>
 <div class="block">Map key -> value layout
  &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;</div>
 </li>
@@ -409,7 +409,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>thrown</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1650">thrown</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1656">thrown</a></pre>
 </li>
 </ul>
 <a name="logRecoveredEditsOutputSink">
@@ -418,7 +418,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>logRecoveredEditsOutputSink</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.LogRecoveredEditsOutputSink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1656">logRecoveredEditsOutputSink</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.LogRecoveredEditsOutputSink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1662">logRecoveredEditsOutputSink</a></pre>
 </li>
 </ul>
 <a name="hasEditsInDisablingOrDisabledTables">
@@ -427,7 +427,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>hasEditsInDisablingOrDisabledTables</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1657">hasEditsInDisablingOrDisabledTables</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1663">hasEditsInDisablingOrDisabledTables</a></pre>
 </li>
 </ul>
 </li>
@@ -444,7 +444,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.LogReplayOutputSink</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1659">WALSplitter.LogReplayOutputSink</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a>&nbsp;controller,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1665">WALSplitter.LogReplayOutputSink</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a>&nbsp;controller,
                                <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.EntryBuffers</a>&nbsp;entryBuffers,
                                int&nbsp;numWriters)</pre>
 </li>
@@ -463,7 +463,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1671">append</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&nbsp;buffer)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1677">append</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&nbsp;buffer)
             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -479,7 +479,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>addToRecoveredRegions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1719">addToRecoveredRegions</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1725">addToRecoveredRegions</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</pre>
 </li>
 </ul>
 <a name="groupEditsByServer(java.util.List)">
@@ -488,7 +488,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>groupEditsByServer</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1729">groupEditsByServer</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1735">groupEditsByServer</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Helper function to group WALEntries to individual region servers</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -501,7 +501,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>locateRegionAndRefreshLastFlushedSequenceId</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1852">locateRegionAndRefreshLastFlushedSequenceId</a>(<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&nbsp;hconn,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1858">locateRegionAndRefreshLastFlushedSequenceId</a>(<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&nbsp;hconn,
                                                           <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                                                           byte[]&nbsp;row,
                                                           <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;originalEncodedRegionName)
@@ -518,7 +518,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>processWorkItems</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1909">processWorkItems</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1915">processWorkItems</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
                     <a href="http://docs.oracle.com/javase/7/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;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>,<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;actions)
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -531,7 +531,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>waitUntilRegionOnline</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1937">waitUntilRegionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;loc,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1943">waitUntilRegionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;loc,
                                     byte[]&nbsp;row,
                                     long&nbsp;timeout,
                                     <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a>&nbsp;isRecovering)
@@ -550,7 +550,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>flush</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1988">flush</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1994">flush</a>()
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#flush()">WALSplitter.OutputSink</a></code></strong></div>
 <div class="block">WriterThread call this function to help flush internal remaining edits in buffer before close</div>
@@ -568,7 +568,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>addWriterError</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2018">addWriterError</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2024">addWriterError</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t)</pre>
 </li>
 </ul>
 <a name="finishWritingAndClose()">
@@ -577,7 +577,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>finishWritingAndClose</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2023">finishWritingAndClose</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2029">finishWritingAndClose</a>()
                                                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -592,7 +592,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumOpenWriters</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2044">getNumOpenWriters</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2050">getNumOpenWriters</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#getNumOpenWriters()">getNumOpenWriters</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a></code></dd>
@@ -605,7 +605,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionServerWriters</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2048">closeRegionServerWriters</a>()
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2054">closeRegionServerWriters</a>()
                                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -617,7 +617,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>getOutputCounts</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2099">getOutputCounts</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2105">getOutputCounts</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#getOutputCounts()">getOutputCounts</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a></code></dd>
@@ -630,7 +630,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumberOfRecoveredRegions</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2110">getNumberOfRecoveredRegions</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2116">getNumberOfRecoveredRegions</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#getNumberOfRecoveredRegions()">getNumberOfRecoveredRegions</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a></code></dd>
@@ -643,7 +643,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>isTableDisabledOrDisabling</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2114">isTableDisabledOrDisabling</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2120">isTableDisabledOrDisabling</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="getRegionServerWriter(java.lang.String)">
@@ -652,7 +652,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerWriter</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionServerWriter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2139">getRegionServerWriter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;loc)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionServerWriter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2145">getRegionServerWriter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;loc)
                                                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get a writer and path for a log starting at the given entry. This function is threadsafe so
  long as multiple threads are always acting on different regions.</div>
@@ -667,7 +667,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>getConnectionByTableName</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2161">getConnectionByTableName</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2167">getConnectionByTableName</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -679,7 +679,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getTableFromLocationStr</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2174">getTableFromLocationStr</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;loc)</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2180">getTableFromLocationStr</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;loc)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html
index da602dd..3eaf2b6 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.2211">WALSplitter.MutationReplay</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.2217">WALSplitter.MutationReplay</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">A struct used by getMutationsFromWALEntry</div>
 </li>
@@ -192,7 +192,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>type</h4>
-<pre>public final&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2223">type</a></pre>
+<pre>public final&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2229">type</a></pre>
 </li>
 </ul>
 <a name="mutation">
@@ -201,7 +201,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>mutation</h4>
-<pre>public final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2224">mutation</a></pre>
+<pre>public final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2230">mutation</a></pre>
 </li>
 </ul>
 <a name="nonceGroup">
@@ -210,7 +210,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>nonceGroup</h4>
-<pre>public final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2225">nonceGroup</a></pre>
+<pre>public final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2231">nonceGroup</a></pre>
 </li>
 </ul>
 <a name="nonce">
@@ -219,7 +219,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>nonce</h4>
-<pre>public final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2226">nonce</a></pre>
+<pre>public final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2232">nonce</a></pre>
 </li>
 </ul>
 </li>
@@ -236,7 +236,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.MutationReplay</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2212">WALSplitter.MutationReplay</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType&nbsp;type,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2218">WALSplitter.MutationReplay</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType&nbsp;type,
                           <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
                           long&nbsp;nonceGroup,
                           long&nbsp;nonce)</pre>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html
index f30aea5..091cdbc 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html
@@ -104,7 +104,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.2190">WALSplitter.RegionServerWriter</a>
+<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.2196">WALSplitter.RegionServerWriter</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.SinkWriter</a></pre>
 <div class="block">Private data structure that wraps a receiving RS and collecting statistics about the data
  written to this newly assigned RS.</div>
@@ -210,7 +210,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWrit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>sink</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEditsReplaySink.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEditsReplaySink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html#line.2191">sink</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEditsReplaySink.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEditsReplaySink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html#line.2197">sink</a></pre>
 </li>
 </ul>
 </li>
@@ -227,7 +227,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWrit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.RegionServerWriter</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html#line.2193">WALSplitter.RegionServerWriter</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html#line.2199">WALSplitter.RegionServerWriter</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                               <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                               <a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&nbsp;conn)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -249,7 +249,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWrit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>close</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html#line.2198">close</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html#line.2204">close</a>()
      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html
index fe4869b..32fa446 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>public abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1592">WALSplitter.SinkWriter</a>
+<pre>public abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1598">WALSplitter.SinkWriter</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Class wraps the actual writer which writes data out and related statistics</div>
 </li>
@@ -208,7 +208,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>editsWritten</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1594">editsWritten</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1600">editsWritten</a></pre>
 </li>
 </ul>
 <a name="editsSkipped">
@@ -217,7 +217,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>editsSkipped</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1596">editsSkipped</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1602">editsSkipped</a></pre>
 </li>
 </ul>
 <a name="nanosSpent">
@@ -226,7 +226,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>nanosSpent</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1598">nanosSpent</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1604">nanosSpent</a></pre>
 </li>
 </ul>
 </li>
@@ -243,7 +243,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.SinkWriter</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1592">WALSplitter.SinkWriter</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1598">WALSplitter.SinkWriter</a>()</pre>
 </li>
 </ul>
 </li>
@@ -260,7 +260,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementEdits</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1600">incrementEdits</a>(int&nbsp;edits)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1606">incrementEdits</a>(int&nbsp;edits)</pre>
 </li>
 </ul>
 <a name="incrementSkippedEdits(int)">
@@ -269,7 +269,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementSkippedEdits</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1604">incrementSkippedEdits</a>(int&nbsp;skipped)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1610">incrementSkippedEdits</a>(int&nbsp;skipped)</pre>
 </li>
 </ul>
 <a name="incrementNanoTime(long)">
@@ -278,7 +278,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>incrementNanoTime</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1608">incrementNanoTime</a>(long&nbsp;nanos)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1614">incrementNanoTime</a>(long&nbsp;nanos)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html
index 71b31ed..67f8c24 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html
@@ -104,7 +104,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1617">WALSplitter.WriterAndPath</a>
+<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1623">WALSplitter.WriterAndPath</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.SinkWriter</a></pre>
 <div class="block">Private data structure that wraps a Writer and its Path, also collecting statistics about the
  data written to this output.</div>
@@ -202,7 +202,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWrit
 <ul class="blockList">
 <li class="blockList">
 <h4>p</h4>
-<pre>final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#line.1618">p</a></pre>
+<pre>final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#line.1624">p</a></pre>
 </li>
 </ul>
 <a name="w">
@@ -211,7 +211,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWrit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>w</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#line.1619">w</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#line.1625">w</a></pre>
 </li>
 </ul>
 </li>
@@ -228,7 +228,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWrit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.WriterAndPath</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#line.1621">WALSplitter.WriterAndPath</a>(org.apache.hadoop.fs.Path&nbsp;p,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#line.1627">WALSplitter.WriterAndPath</a>(org.apache.hadoop.fs.Path&nbsp;p,
                          <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;w)</pre>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.html
index e64ed35..fc1cacd 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.html
@@ -1097,7 +1097,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getMutationsFromWALEntry</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.MutationReplay</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.2239">getMutationsFromWALEntry</a>(org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry&nbsp;entry,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.MutationReplay</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.2245">getMutationsFromWALEntry</a>(org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry&nbsp;entry,
                                                         <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cells,
                                                         <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" title="class in org.apache.hadoop.hbase.wal">WALKey</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&gt;&nbsp;logEntry,
                                                         <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 04dfd20..7fceb38 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -148,8 +148,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">RegionGroupingProvider.Strategies</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">WALFactory.Providers</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">RegionGroupingProvider.Strategies</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.Version.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">WALKey.Version</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/overview-tree.html b/devapidocs/overview-tree.html
index 633dc98..0fc6849 100644
--- a/devapidocs/overview-tree.html
+++ b/devapidocs/overview-tree.html
@@ -227,7 +227,6 @@
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">BoundedPriorityBlockingQueue</span></a>&lt;E&gt; (implements java.util.concurrent.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;E&gt;)</li>
 <li type="circle">java.util.concurrent.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true" title="class or interface in java.util.concurrent"><span class="strong">ConcurrentLinkedQueue</span></a>&lt;E&gt; (implements java.util.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</a>&lt;E&gt;, java.io.<a href="http://docs.oracle.com/javase/7/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/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">BoundedConcurrentLinkedQueue</span></a>&lt;T&gt;</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/PoolMap.ReusablePool.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">PoolMap.ReusablePool</span></a>&lt;R&gt; (implements org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/PoolMap.Pool.html" title="interface in org.apache.hadoop.hbase.util">PoolMap.Pool</a>&lt;R&gt;)</li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/serialized-form.html
----------------------------------------------------------------------
diff --git a/devapidocs/serialized-form.html b/devapidocs/serialized-form.html
index 5f5f4bf..a4504ea 100644
--- a/devapidocs/serialized-form.html
+++ b/devapidocs/serialized-form.html
@@ -2141,32 +2141,6 @@
 <li class="blockList">
 <h2 title="Package">Package&nbsp;org.apache.hadoop.hbase.util</h2>
 <ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase.util.BoundedConcurrentLinkedQueue">
-<!--   -->
-</a>
-<h3>Class <a href="org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util.BoundedConcurrentLinkedQueue</a> extends <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentLinkedQueue</a>&lt;<a href="org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt; implements Serializable</h3>
-<dl class="nameValue">
-<dt>serialVersionUID:</dt>
-<dd>1L</dd>
-</dl>
-<ul class="blockList">
-<li class="blockList"><a name="serializedForm">
-<!--   -->
-</a>
-<h3>Serialized Fields</h3>
-<ul class="blockList">
-<li class="blockList">
-<h4>size</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> size</pre>
-</li>
-<li class="blockListLast">
-<h4>maxSize</h4>
-<pre>long maxSize</pre>
-</li>
-</ul>
-</li>
-</ul>
-</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.util.FileSystemVersionException">
 <!--   -->
 </a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.ChoreServicer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.ChoreServicer.html b/devapidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.ChoreServicer.html
index dd8dcbd..6dd7800 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.ChoreServicer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.ChoreServicer.html
@@ -236,7 +236,7 @@
 <span class="sourceLineNo">228</span>        &amp;&amp; getTimeBetweenRuns() &gt; getMaximumAllowedTimeBetweenRuns();<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 synchronized double getMaximumAllowedTimeBetweenRuns() {<a name="line.231"></a>
+<span class="sourceLineNo">231</span>  private double getMaximumAllowedTimeBetweenRuns() {<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    // Threshold used to determine if the Chore's current run started too late<a name="line.232"></a>
 <span class="sourceLineNo">233</span>    return 1.5 * period;<a name="line.233"></a>
 <span class="sourceLineNo">234</span>  }<a name="line.234"></a>
@@ -276,23 +276,23 @@
 <span class="sourceLineNo">268</span>    choreServicer = null;<a name="line.268"></a>
 <span class="sourceLineNo">269</span>  }<a name="line.269"></a>
 <span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span>  public synchronized String getName() {<a name="line.271"></a>
+<span class="sourceLineNo">271</span>  public String getName() {<a name="line.271"></a>
 <span class="sourceLineNo">272</span>    return name;<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>  public synchronized Stoppable getStopper() {<a name="line.275"></a>
+<span class="sourceLineNo">275</span>  public Stoppable getStopper() {<a name="line.275"></a>
 <span class="sourceLineNo">276</span>    return stopper;<a name="line.276"></a>
 <span class="sourceLineNo">277</span>  }<a name="line.277"></a>
 <span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public synchronized int getPeriod() {<a name="line.279"></a>
+<span class="sourceLineNo">279</span>  public int getPeriod() {<a name="line.279"></a>
 <span class="sourceLineNo">280</span>    return period;<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>  public synchronized long getInitialDelay() {<a name="line.283"></a>
+<span class="sourceLineNo">283</span>  public long getInitialDelay() {<a name="line.283"></a>
 <span class="sourceLineNo">284</span>    return initialDelay;<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>  public final synchronized TimeUnit getTimeUnit() {<a name="line.287"></a>
+<span class="sourceLineNo">287</span>  public TimeUnit getTimeUnit() {<a name="line.287"></a>
 <span class="sourceLineNo">288</span>    return timeUnit;<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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.html b/devapidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.html
index dd8dcbd..6dd7800 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.html
@@ -236,7 +236,7 @@
 <span class="sourceLineNo">228</span>        &amp;&amp; getTimeBetweenRuns() &gt; getMaximumAllowedTimeBetweenRuns();<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 synchronized double getMaximumAllowedTimeBetweenRuns() {<a name="line.231"></a>
+<span class="sourceLineNo">231</span>  private double getMaximumAllowedTimeBetweenRuns() {<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    // Threshold used to determine if the Chore's current run started too late<a name="line.232"></a>
 <span class="sourceLineNo">233</span>    return 1.5 * period;<a name="line.233"></a>
 <span class="sourceLineNo">234</span>  }<a name="line.234"></a>
@@ -276,23 +276,23 @@
 <span class="sourceLineNo">268</span>    choreServicer = null;<a name="line.268"></a>
 <span class="sourceLineNo">269</span>  }<a name="line.269"></a>
 <span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span>  public synchronized String getName() {<a name="line.271"></a>
+<span class="sourceLineNo">271</span>  public String getName() {<a name="line.271"></a>
 <span class="sourceLineNo">272</span>    return name;<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>  public synchronized Stoppable getStopper() {<a name="line.275"></a>
+<span class="sourceLineNo">275</span>  public Stoppable getStopper() {<a name="line.275"></a>
 <span class="sourceLineNo">276</span>    return stopper;<a name="line.276"></a>
 <span class="sourceLineNo">277</span>  }<a name="line.277"></a>
 <span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public synchronized int getPeriod() {<a name="line.279"></a>
+<span class="sourceLineNo">279</span>  public int getPeriod() {<a name="line.279"></a>
 <span class="sourceLineNo">280</span>    return period;<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>  public synchronized long getInitialDelay() {<a name="line.283"></a>
+<span class="sourceLineNo">283</span>  public long getInitialDelay() {<a name="line.283"></a>
 <span class="sourceLineNo">284</span>    return initialDelay;<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>  public final synchronized TimeUnit getTimeUnit() {<a name="line.287"></a>
+<span class="sourceLineNo">287</span>  public TimeUnit getTimeUnit() {<a name="line.287"></a>
 <span class="sourceLineNo">288</span>    return timeUnit;<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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/client/ClientScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/ClientScanner.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/ClientScanner.html
index e47d4fb..c971a4e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/ClientScanner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/ClientScanner.html
@@ -784,13 +784,13 @@
 <span class="sourceLineNo">776</span>  public boolean renewLease() {<a name="line.776"></a>
 <span class="sourceLineNo">777</span>    if (callable != null) {<a name="line.777"></a>
 <span class="sourceLineNo">778</span>      // do not return any rows, do not advance the scanner<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      callable.setCaching(0);<a name="line.779"></a>
+<span class="sourceLineNo">779</span>      callable.setRenew(true);<a name="line.779"></a>
 <span class="sourceLineNo">780</span>      try {<a name="line.780"></a>
 <span class="sourceLineNo">781</span>        this.caller.callWithoutRetries(callable, this.scannerTimeout);<a name="line.781"></a>
 <span class="sourceLineNo">782</span>      } catch (Exception e) {<a name="line.782"></a>
 <span class="sourceLineNo">783</span>        return false;<a name="line.783"></a>
 <span class="sourceLineNo">784</span>      } finally {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        callable.setCaching(this.caching);<a name="line.785"></a>
+<span class="sourceLineNo">785</span>        callable.setRenew(false);<a name="line.785"></a>
 <span class="sourceLineNo">786</span>      }<a name="line.786"></a>
 <span class="sourceLineNo">787</span>      return true;<a name="line.787"></a>
 <span class="sourceLineNo">788</span>    }<a name="line.788"></a>


[26/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
index e6f7370..66fe895 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
@@ -151,9 +151,9 @@
 <span class="sourceLineNo">143</span>    int sleepMultiplier = 1;<a name="line.143"></a>
 <span class="sourceLineNo">144</span><a name="line.144"></a>
 <span class="sourceLineNo">145</span>    // Connect to peer cluster first, unless we have to stop<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    while (this.isRunning() &amp;&amp; replicationSinkMgr.getSinks().size() == 0) {<a name="line.146"></a>
+<span class="sourceLineNo">146</span>    while (this.isRunning() &amp;&amp; replicationSinkMgr.getNumSinks() == 0) {<a name="line.146"></a>
 <span class="sourceLineNo">147</span>      replicationSinkMgr.chooseSinks();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      if (this.isRunning() &amp;&amp; replicationSinkMgr.getSinks().size() == 0) {<a name="line.148"></a>
+<span class="sourceLineNo">148</span>      if (this.isRunning() &amp;&amp; replicationSinkMgr.getNumSinks() == 0) {<a name="line.148"></a>
 <span class="sourceLineNo">149</span>        if (sleepForRetries("Waiting for peers", sleepMultiplier)) {<a name="line.149"></a>
 <span class="sourceLineNo">150</span>          sleepMultiplier++;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>        }<a name="line.151"></a>
@@ -188,177 +188,192 @@
 <span class="sourceLineNo">180</span>    List&lt;Entry&gt; entries = replicateContext.getEntries();<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    String walGroupId = replicateContext.getWalGroupId();<a name="line.181"></a>
 <span class="sourceLineNo">182</span>    int sleepMultiplier = 1;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>    if (!peersSelected &amp;&amp; this.isRunning()) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      connectToPeers();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      peersSelected = true;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    if (replicationSinkMgr.getSinks().size() == 0) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return false;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    // minimum of: configured threads, number of 100-waledit batches,<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    //  and number of current sinks<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    int n = Math.min(Math.min(this.maxThreads, entries.size()/100+1),<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      replicationSinkMgr.getSinks().size());<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    List&lt;List&lt;Entry&gt;&gt; entryLists = new ArrayList&lt;List&lt;Entry&gt;&gt;(n);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    if (n == 1) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      entryLists.add(entries);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    } else {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      for (int i=0; i&lt;n; i++) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        entryLists.add(new ArrayList&lt;Entry&gt;(entries.size()/n+1));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // now group by region<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      for (Entry e : entries) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        entryLists.get(Math.abs(Bytes.hashCode(e.getKey().getEncodedRegionName())%n)).add(e);<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>    while (this.isRunning()) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      if (!isPeerEnabled()) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        if (sleepForRetries("Replication is disabled", sleepMultiplier)) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>          sleepMultiplier++;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        }<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        continue;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      try {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        if (LOG.isTraceEnabled()) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          LOG.trace("Replicating " + entries.size() +<a name="line.217"></a>
-<span class="sourceLineNo">218</span>              " entries of total size " + replicateContext.getSize());<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>        int futures = 0;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        for (int i=0; i&lt;entryLists.size(); i++) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          if (!entryLists.get(i).isEmpty()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>            if (LOG.isTraceEnabled()) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>              LOG.trace("Submitting " + entryLists.get(i).size() +<a name="line.225"></a>
-<span class="sourceLineNo">226</span>                  " entries of total size " + replicateContext.getSize());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>            // RuntimeExceptions encountered here bubble up and are handled in ReplicationSource<a name="line.228"></a>
-<span class="sourceLineNo">229</span>            pool.submit(createReplicator(entryLists.get(i), i));<a name="line.229"></a>
-<span class="sourceLineNo">230</span>            futures++;<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>        IOException iox = null;<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>        for (int i=0; i&lt;futures; i++) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          try {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>            // wait for all futures, remove successful parts<a name="line.237"></a>
-<span class="sourceLineNo">238</span>            // (only the remaining parts will be retried)<a name="line.238"></a>
-<span class="sourceLineNo">239</span>            Future&lt;Integer&gt; f = pool.take();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>            entryLists.set(f.get().intValue(), Collections.&lt;Entry&gt;emptyList());<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          } catch (InterruptedException ie) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>            iox =  new IOException(ie);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          } catch (ExecutionException ee) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>            // cause must be an IOException<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            iox = (IOException)ee.getCause();<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>        if (iox != null) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          // if we had any exceptions, try again<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          throw iox;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        // update metrics<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        this.metrics.setAgeOfLastShippedOp(entries.get(entries.size() - 1).getKey().getWriteTime(),<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          walGroupId);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        return true;<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>      } catch (IOException ioe) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        // Didn't ship anything, but must still age the last time we did<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        this.metrics.refreshAgeOfLastShippedOp(walGroupId);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        if (ioe instanceof RemoteException) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          ioe = ((RemoteException) ioe).unwrapRemoteException();<a name="line.261"></a>
-<span class="sourceLineNo">262</span>          LOG.warn("Can't replicate because of an error on the remote cluster: ", ioe);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          if (ioe instanceof TableNotFoundException) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>            if (sleepForRetries("A table is missing in the peer cluster. "<a name="line.264"></a>
-<span class="sourceLineNo">265</span>                + "Replication cannot proceed without losing data.", sleepMultiplier)) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>              sleepMultiplier++;<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>        } else {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>          if (ioe instanceof SocketTimeoutException) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>            // This exception means we waited for more than 60s and nothing<a name="line.271"></a>
-<span class="sourceLineNo">272</span>            // happened, the cluster is alive and calling it right away<a name="line.272"></a>
-<span class="sourceLineNo">273</span>            // even for a test just makes things worse.<a name="line.273"></a>
-<span class="sourceLineNo">274</span>            sleepForRetries("Encountered a SocketTimeoutException. Since the " +<a name="line.274"></a>
-<span class="sourceLineNo">275</span>              "call to the remote cluster timed out, which is usually " +<a name="line.275"></a>
-<span class="sourceLineNo">276</span>              "caused by a machine failure or a massive slowdown",<a name="line.276"></a>
-<span class="sourceLineNo">277</span>              this.socketTimeoutMultiplier);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          } else if (ioe instanceof ConnectException) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>            LOG.warn("Peer is unavailable, rechecking all sinks: ", ioe);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>            replicationSinkMgr.chooseSinks();<a name="line.280"></a>
-<span class="sourceLineNo">281</span>          } else {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>            LOG.warn("Can't replicate because of a local or network error: ", ioe);<a name="line.282"></a>
+<span class="sourceLineNo">183</span>    int numReplicated = 0;<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>    if (!peersSelected &amp;&amp; this.isRunning()) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      connectToPeers();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      peersSelected = true;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>    int numSinks = replicationSinkMgr.getNumSinks();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    if (numSinks == 0) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      LOG.warn("No replication sinks found, returning without replicating. The source should retry"<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          + " with the same set of edits.");<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      return false;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>    // minimum of: configured threads, number of 100-waledit batches,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    //  and number of current sinks<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    int n = Math.min(Math.min(this.maxThreads, entries.size()/100+1), numSinks);<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    List&lt;List&lt;Entry&gt;&gt; entryLists = new ArrayList&lt;List&lt;Entry&gt;&gt;(n);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    if (n == 1) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      entryLists.add(entries);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    } else {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      for (int i=0; i&lt;n; i++) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        entryLists.add(new ArrayList&lt;Entry&gt;(entries.size()/n+1));<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      // now group by region<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      for (Entry e : entries) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        entryLists.get(Math.abs(Bytes.hashCode(e.getKey().getEncodedRegionName())%n)).add(e);<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>    while (this.isRunning()) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      if (!isPeerEnabled()) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        if (sleepForRetries("Replication is disabled", sleepMultiplier)) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          sleepMultiplier++;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        }<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>      try {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        if (LOG.isTraceEnabled()) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          LOG.trace("Replicating " + entries.size() +<a name="line.222"></a>
+<span class="sourceLineNo">223</span>              " entries of total size " + replicateContext.getSize());<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>        int futures = 0;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        for (int i=0; i&lt;entryLists.size(); i++) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          if (!entryLists.get(i).isEmpty()) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>            if (LOG.isTraceEnabled()) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>              LOG.trace("Submitting " + entryLists.get(i).size() +<a name="line.230"></a>
+<span class="sourceLineNo">231</span>                  " entries of total size " + replicateContext.getSize());<a name="line.231"></a>
+<span class="sourceLineNo">232</span>            }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>            // RuntimeExceptions encountered here bubble up and are handled in ReplicationSource<a name="line.233"></a>
+<span class="sourceLineNo">234</span>            pool.submit(createReplicator(entryLists.get(i), i));<a name="line.234"></a>
+<span class="sourceLineNo">235</span>            futures++;<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>        IOException iox = null;<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>        for (int i=0; i&lt;futures; i++) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>          try {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>            // wait for all futures, remove successful parts<a name="line.242"></a>
+<span class="sourceLineNo">243</span>            // (only the remaining parts will be retried)<a name="line.243"></a>
+<span class="sourceLineNo">244</span>            Future&lt;Integer&gt; f = pool.take();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>            int index = f.get().intValue();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>            int batchSize =  entryLists.get(index).size();<a name="line.246"></a>
+<span class="sourceLineNo">247</span>            entryLists.set(index, Collections.&lt;Entry&gt;emptyList());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>            // Now, we have marked the batch as done replicating, record its size<a name="line.248"></a>
+<span class="sourceLineNo">249</span>            numReplicated += batchSize;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          } catch (InterruptedException ie) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>            iox =  new IOException(ie);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>          } catch (ExecutionException ee) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>            // cause must be an IOException<a name="line.253"></a>
+<span class="sourceLineNo">254</span>            iox = (IOException)ee.getCause();<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>        if (iox != null) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          // if we had any exceptions, try again<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          throw iox;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        if (numReplicated != entries.size()) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          // Something went wrong here and we don't know what, let's just fail and retry.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          LOG.warn("The number of edits replicated is different from the number received,"<a name="line.263"></a>
+<span class="sourceLineNo">264</span>              + " failing for now.");<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          return false;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        // update metrics<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        this.metrics.setAgeOfLastShippedOp(entries.get(entries.size() - 1).getKey().getWriteTime(),<a name="line.268"></a>
+<span class="sourceLineNo">269</span>          walGroupId);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        return true;<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>      } catch (IOException ioe) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        // Didn't ship anything, but must still age the last time we did<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        this.metrics.refreshAgeOfLastShippedOp(walGroupId);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        if (ioe instanceof RemoteException) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          ioe = ((RemoteException) ioe).unwrapRemoteException();<a name="line.276"></a>
+<span class="sourceLineNo">277</span>          LOG.warn("Can't replicate because of an error on the remote cluster: ", ioe);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          if (ioe instanceof TableNotFoundException) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            if (sleepForRetries("A table is missing in the peer cluster. "<a name="line.279"></a>
+<span class="sourceLineNo">280</span>                + "Replication cannot proceed without losing data.", sleepMultiplier)) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>              sleepMultiplier++;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>            }<a name="line.282"></a>
 <span class="sourceLineNo">283</span>          }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        }<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        if (sleepForRetries("Since we are unable to replicate", sleepMultiplier)) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          sleepMultiplier++;<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>    return false; // in case we exited before replicating<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>  protected boolean isPeerEnabled() {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    return ctx.getReplicationPeer().getPeerState() == PeerState.ENABLED;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>  @Override<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  protected void doStop() {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    disconnect(); //don't call super.doStop()<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    if (this.conn != null) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      try {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        this.conn.close();<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        this.conn = null;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      } catch (IOException e) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        LOG.warn("Failed to close the connection");<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>    exec.shutdownNow();<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    notifyStopped();<a name="line.309"></a>
+<span class="sourceLineNo">284</span>        } else {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          if (ioe instanceof SocketTimeoutException) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>            // This exception means we waited for more than 60s and nothing<a name="line.286"></a>
+<span class="sourceLineNo">287</span>            // happened, the cluster is alive and calling it right away<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            // even for a test just makes things worse.<a name="line.288"></a>
+<span class="sourceLineNo">289</span>            sleepForRetries("Encountered a SocketTimeoutException. Since the " +<a name="line.289"></a>
+<span class="sourceLineNo">290</span>              "call to the remote cluster timed out, which is usually " +<a name="line.290"></a>
+<span class="sourceLineNo">291</span>              "caused by a machine failure or a massive slowdown",<a name="line.291"></a>
+<span class="sourceLineNo">292</span>              this.socketTimeoutMultiplier);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>          } else if (ioe instanceof ConnectException) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>            LOG.warn("Peer is unavailable, rechecking all sinks: ", ioe);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>            replicationSinkMgr.chooseSinks();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>          } else {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>            LOG.warn("Can't replicate because of a local or network error: ", ioe);<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>        if (sleepForRetries("Since we are unable to replicate", sleepMultiplier)) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>          sleepMultiplier++;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    return false; // in case we exited before replicating<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>  protected boolean isPeerEnabled() {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    return ctx.getReplicationPeer().getPeerState() == PeerState.ENABLED;<a name="line.309"></a>
 <span class="sourceLineNo">310</span>  }<a name="line.310"></a>
 <span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  // is this needed? Nobody else will call doStop() otherwise<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  @Override<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  public State stopAndWait() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    doStop();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    return super.stopAndWait();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  @VisibleForTesting<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  protected Replicator createReplicator(List&lt;Entry&gt; entries, int ordinal) {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    return new Replicator(entries, ordinal);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  }<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>  @VisibleForTesting<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  protected class Replicator implements Callable&lt;Integer&gt; {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private List&lt;Entry&gt; entries;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    private int ordinal;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    public Replicator(List&lt;Entry&gt; entries, int ordinal) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.entries = entries;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.ordinal = ordinal;<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 Integer call() throws IOException {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      SinkPeer sinkPeer = null;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      try {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        sinkPeer = replicationSinkMgr.getReplicationSink();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        BlockingInterface rrs = sinkPeer.getRegionServer();<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        ReplicationProtbufUtil.replicateWALEntry(rrs, entries.toArray(new Entry[entries.size()]),<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          replicationClusterId, baseNamespaceDir, hfileArchiveDir);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        replicationSinkMgr.reportSinkSuccess(sinkPeer);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        return ordinal;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>      } catch (IOException ioe) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        if (sinkPeer != null) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          replicationSinkMgr.reportBadSink(sinkPeer);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        throw ioe;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
-<span class="sourceLineNo">353</span>}<a name="line.353"></a>
+<span class="sourceLineNo">312</span>  @Override<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  protected void doStop() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    disconnect(); //don't call super.doStop()<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    if (this.conn != null) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      try {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        this.conn.close();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        this.conn = null;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      } catch (IOException e) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        LOG.warn("Failed to close the connection");<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    exec.shutdownNow();<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    notifyStopped();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>  // is this needed? Nobody else will call doStop() otherwise<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  @Override<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public State stopAndWait() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    doStop();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    return super.stopAndWait();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  }<a name="line.332"></a>
+<span class="sourceLineNo">333</span><a name="line.333"></a>
+<span class="sourceLineNo">334</span>  @VisibleForTesting<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  protected Replicator createReplicator(List&lt;Entry&gt; entries, int ordinal) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    return new Replicator(entries, ordinal);<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>  @VisibleForTesting<a name="line.339"></a>
+<span class="sourceLineNo">340</span>  protected class Replicator implements Callable&lt;Integer&gt; {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    private List&lt;Entry&gt; entries;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    private int ordinal;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    public Replicator(List&lt;Entry&gt; entries, int ordinal) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      this.entries = entries;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      this.ordinal = ordinal;<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>    @Override<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    public Integer call() throws IOException {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      SinkPeer sinkPeer = null;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      try {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        sinkPeer = replicationSinkMgr.getReplicationSink();<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        BlockingInterface rrs = sinkPeer.getRegionServer();<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        ReplicationProtbufUtil.replicateWALEntry(rrs, entries.toArray(new Entry[entries.size()]),<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          replicationClusterId, baseNamespaceDir, hfileArchiveDir);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        replicationSinkMgr.reportSinkSuccess(sinkPeer);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        return ordinal;<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>      } catch (IOException ioe) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        if (sinkPeer != null) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>          replicationSinkMgr.reportBadSink(sinkPeer);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        }<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        throw ioe;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      }<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>}<a name="line.368"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html
index 3e8f4ec..00bdffe 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html
@@ -31,170 +31,179 @@
 <span class="sourceLineNo">023</span>import java.util.Map;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.util.Random;<a name="line.24"></a>
 <span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.commons.logging.Log;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.commons.logging.LogFactory;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.conf.Configuration;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.ServerName;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.client.HConnection;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import com.google.common.collect.Lists;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import com.google.common.collect.Maps;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>/**<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * Maintains a collection of peers to replicate to, and randomly selects a<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * single peer to replicate to per set of data to replicate. Also handles<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * keeping track of peer availability.<a name="line.39"></a>
-<span class="sourceLineNo">040</span> */<a name="line.40"></a>
-<span class="sourceLineNo">041</span>public class ReplicationSinkManager {<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>  private static final Log LOG = LogFactory.getLog(ReplicationSinkManager.class);<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>  /**<a name="line.45"></a>
-<span class="sourceLineNo">046</span>   * Default maximum number of times a replication sink can be reported as bad before<a name="line.46"></a>
-<span class="sourceLineNo">047</span>   * it will no longer be provided as a sink for replication without the pool of<a name="line.47"></a>
-<span class="sourceLineNo">048</span>   * replication sinks being refreshed.<a name="line.48"></a>
-<span class="sourceLineNo">049</span>   */<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  static final int DEFAULT_BAD_SINK_THRESHOLD = 3;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  /**<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   * Default ratio of the total number of peer cluster region servers to consider<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * replicating to.<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  static final float DEFAULT_REPLICATION_SOURCE_RATIO = 0.1f;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">026</span>import com.google.common.annotations.VisibleForTesting;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.commons.logging.Log;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.commons.logging.LogFactory;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.conf.Configuration;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.ServerName;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.client.HConnection;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import com.google.common.collect.Lists;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import com.google.common.collect.Maps;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * Maintains a collection of peers to replicate to, and randomly selects a<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * single peer to replicate to per set of data to replicate. Also handles<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * keeping track of peer availability.<a name="line.40"></a>
+<span class="sourceLineNo">041</span> */<a name="line.41"></a>
+<span class="sourceLineNo">042</span>public class ReplicationSinkManager {<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>  private static final Log LOG = LogFactory.getLog(ReplicationSinkManager.class);<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>  /**<a name="line.46"></a>
+<span class="sourceLineNo">047</span>   * Default maximum number of times a replication sink can be reported as bad before<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   * it will no longer be provided as a sink for replication without the pool of<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   * replication sinks being refreshed.<a name="line.49"></a>
+<span class="sourceLineNo">050</span>   */<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  static final int DEFAULT_BAD_SINK_THRESHOLD = 3;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  /**<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   * Default ratio of the total number of peer cluster region servers to consider<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * replicating to.<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  static final float DEFAULT_REPLICATION_SOURCE_RATIO = 0.1f;<a name="line.57"></a>
 <span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private final HConnection conn;<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  private final String peerClusterId;<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private final HBaseReplicationEndpoint endpoint;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  // Count of "bad replication sink" reports per peer sink<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private final Map&lt;ServerName, Integer&gt; badReportCounts;<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>  // Ratio of total number of potential peer region servers to be used<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private final float ratio;<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  // Maximum number of times a sink can be reported as bad before the pool of<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  // replication sinks is refreshed<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private final int badSinkThreshold;<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private final Random random;<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  // A timestamp of the last time the list of replication peers changed<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private long lastUpdateToPeers;<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  // The current pool of sinks to which replication can be performed<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private List&lt;ServerName&gt; sinks = Lists.newArrayList();<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  /**<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * Instantiate for a single replication peer cluster.<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * @param conn connection to the peer cluster<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * @param peerClusterId identifier of the peer cluster<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * @param endpoint replication endpoint for inter cluster replication<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * @param conf HBase configuration, used for determining replication source ratio and bad peer<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   *          threshold<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  public ReplicationSinkManager(HConnection conn, String peerClusterId,<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      HBaseReplicationEndpoint endpoint, Configuration conf) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    this.conn = conn;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    this.peerClusterId = peerClusterId;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    this.endpoint = endpoint;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    this.badReportCounts = Maps.newHashMap();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    this.ratio = conf.getFloat("replication.source.ratio", DEFAULT_REPLICATION_SOURCE_RATIO);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    this.badSinkThreshold = conf.getInt("replication.bad.sink.threshold",<a name="line.98"></a>
-<span class="sourceLineNo">099</span>                                        DEFAULT_BAD_SINK_THRESHOLD);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    this.random = new Random();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * Get a randomly-chosen replication sink to replicate to.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   *<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * @return a replication sink to replicate to<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   */<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  public SinkPeer getReplicationSink() throws IOException {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    if (endpoint.getLastRegionServerUpdate() &gt; this.lastUpdateToPeers || sinks.isEmpty()) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      LOG.info("Current list of sinks is out of date or empty, updating");<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      chooseSinks();<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>    if (sinks.isEmpty()) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      throw new IOException("No replication sinks are available");<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    ServerName serverName = sinks.get(random.nextInt(sinks.size()));<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    return new SinkPeer(serverName, conn.getAdmin(serverName));<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>  /**<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * Report a {@code SinkPeer} as being bad (i.e. an attempt to replicate to it<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * failed). If a single SinkPeer is reported as bad more than<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * replication.bad.sink.threshold times, it will be removed<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * from the pool of potential replication targets.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   *<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @param sinkPeer<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   *          The SinkPeer that had a failed replication attempt on it<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   */<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  public void reportBadSink(SinkPeer sinkPeer) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    ServerName serverName = sinkPeer.getServerName();<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    int badReportCount = (badReportCounts.containsKey(serverName)<a name="line.132"></a>
-<span class="sourceLineNo">133</span>                    ? badReportCounts.get(serverName) : 0) + 1;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    badReportCounts.put(serverName, badReportCount);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    if (badReportCount &gt; badSinkThreshold) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      this.sinks.remove(serverName);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      if (sinks.isEmpty()) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>        chooseSinks();<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>  /**<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * Report that a {@code SinkPeer} successfully replicated a chunk of data.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   *<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @param sinkPeer<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   *          The SinkPeer that had a failed replication attempt on it<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public void reportSinkSuccess(SinkPeer sinkPeer) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    badReportCounts.remove(sinkPeer.getServerName());<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>  void chooseSinks() {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    List&lt;ServerName&gt; slaveAddresses = endpoint.getRegionServers();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    Collections.shuffle(slaveAddresses, random);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    int numSinks = (int) Math.ceil(slaveAddresses.size() * ratio);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    sinks = slaveAddresses.subList(0, numSinks);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    lastUpdateToPeers = System.currentTimeMillis();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    badReportCounts.clear();<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>  List&lt;ServerName&gt; getSinks() {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    return sinks;<a name="line.163"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private final HConnection conn;<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private final String peerClusterId;<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private final HBaseReplicationEndpoint endpoint;<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  // Count of "bad replication sink" reports per peer sink<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private final Map&lt;ServerName, Integer&gt; badReportCounts;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  // Ratio of total number of potential peer region servers to be used<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private final float ratio;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  // Maximum number of times a sink can be reported as bad before the pool of<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  // replication sinks is refreshed<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private final int badSinkThreshold;<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private final Random random;<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  // A timestamp of the last time the list of replication peers changed<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private long lastUpdateToPeers;<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  // The current pool of sinks to which replication can be performed<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private List&lt;ServerName&gt; sinks = Lists.newArrayList();<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * Instantiate for a single replication peer cluster.<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * @param conn connection to the peer cluster<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * @param peerClusterId identifier of the peer cluster<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   * @param endpoint replication endpoint for inter cluster replication<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * @param conf HBase configuration, used for determining replication source ratio and bad peer<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   *          threshold<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   */<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  public ReplicationSinkManager(HConnection conn, String peerClusterId,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      HBaseReplicationEndpoint endpoint, Configuration conf) {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    this.conn = conn;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    this.peerClusterId = peerClusterId;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    this.endpoint = endpoint;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    this.badReportCounts = Maps.newHashMap();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    this.ratio = conf.getFloat("replication.source.ratio", DEFAULT_REPLICATION_SOURCE_RATIO);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    this.badSinkThreshold = conf.getInt("replication.bad.sink.threshold",<a name="line.99"></a>
+<span class="sourceLineNo">100</span>                                        DEFAULT_BAD_SINK_THRESHOLD);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    this.random = new Random();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  /**<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * Get a randomly-chosen replication sink to replicate to.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   *<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * @return a replication sink to replicate to<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   */<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public synchronized SinkPeer getReplicationSink() throws IOException {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    if (endpoint.getLastRegionServerUpdate() &gt; this.lastUpdateToPeers || sinks.isEmpty()) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      LOG.info("Current list of sinks is out of date or empty, updating");<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      chooseSinks();<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>    if (sinks.isEmpty()) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      throw new IOException("No replication sinks are available");<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    ServerName serverName = sinks.get(random.nextInt(sinks.size()));<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    return new SinkPeer(serverName, conn.getAdmin(serverName));<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  /**<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * Report a {@code SinkPeer} as being bad (i.e. an attempt to replicate to it<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * failed). If a single SinkPeer is reported as bad more than<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * replication.bad.sink.threshold times, it will be removed<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * from the pool of potential replication targets.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   *<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param sinkPeer<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   *          The SinkPeer that had a failed replication attempt on it<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public synchronized void reportBadSink(SinkPeer sinkPeer) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    ServerName serverName = sinkPeer.getServerName();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    int badReportCount = (badReportCounts.containsKey(serverName)<a name="line.133"></a>
+<span class="sourceLineNo">134</span>                    ? badReportCounts.get(serverName) : 0) + 1;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    badReportCounts.put(serverName, badReportCount);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    if (badReportCount &gt; badSinkThreshold) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      this.sinks.remove(serverName);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      if (sinks.isEmpty()) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        chooseSinks();<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><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * Report that a {@code SinkPeer} successfully replicated a chunk of data.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   *<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * @param sinkPeer<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   *          The SinkPeer that had a failed replication attempt on it<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   */<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  public synchronized void reportSinkSuccess(SinkPeer sinkPeer) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    badReportCounts.remove(sinkPeer.getServerName());<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>   * Refresh the list of sinks.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  public synchronized void chooseSinks() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    List&lt;ServerName&gt; slaveAddresses = endpoint.getRegionServers();<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    Collections.shuffle(slaveAddresses, random);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    int numSinks = (int) Math.ceil(slaveAddresses.size() * ratio);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    sinks = slaveAddresses.subList(0, numSinks);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    lastUpdateToPeers = System.currentTimeMillis();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    badReportCounts.clear();<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>   * Wraps a replication region server sink to provide the ability to identify<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * it.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   */<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public static class SinkPeer {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    private ServerName serverName;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private AdminService.BlockingInterface regionServer;<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>    public SinkPeer(ServerName serverName, AdminService.BlockingInterface regionServer) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      this.serverName = serverName;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      this.regionServer = regionServer;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>    ServerName getServerName() {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      return serverName;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
+<span class="sourceLineNo">166</span>  public synchronized int getNumSinks() {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    return sinks.size();<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>  @VisibleForTesting<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  protected List&lt;ServerName&gt; getSinksForTesting() {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    return Collections.unmodifiableList(sinks);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  /**<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * Wraps a replication region server sink to provide the ability to identify<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * it.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public static class SinkPeer {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    private ServerName serverName;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    private AdminService.BlockingInterface regionServer;<a name="line.181"></a>
 <span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>    public AdminService.BlockingInterface getRegionServer() {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      return regionServer;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>}<a name="line.189"></a>
+<span class="sourceLineNo">183</span>    public SinkPeer(ServerName serverName, AdminService.BlockingInterface regionServer) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      this.serverName = serverName;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      this.regionServer = regionServer;<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>    ServerName getServerName() {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      return serverName;<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>    public AdminService.BlockingInterface getRegionServer() {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      return regionServer;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    }<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span>  }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>}<a name="line.198"></a>
 
 
 


[09/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html
index f3aed1b..0597160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html
@@ -1513,810 +1513,816 @@
 <span class="sourceLineNo">1505</span>      if (maxSeqIdInStores == null || maxSeqIdInStores.isEmpty()) {<a name="line.1505"></a>
 <span class="sourceLineNo">1506</span>        return;<a name="line.1506"></a>
 <span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        if (!CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          // or the master was crashed before and we can not get the information.<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>          if (maxSeqId != null &amp;&amp; maxSeqId.longValue() &gt;= logEntry.getKey().getLogSeqNum()) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>            skippedCells.add(cell);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>          }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      }<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (!skippedCells.isEmpty()) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        logEntry.getEdit().getCells().removeAll(skippedCells);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1508</span>      // Create the array list for the cells that aren't filtered.<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // We make the assumption that most cells will be kept.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      ArrayList&lt;Cell&gt; keptCells = new ArrayList&lt;Cell&gt;(logEntry.getEdit().getCells().size());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>          keptCells.add(cell);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        } else {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          // or the master was crashed before and we can not get the information.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>          if (maxSeqId == null || maxSeqId.longValue() &lt; logEntry.getKey().getLogSeqNum()) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>            keptCells.add(cell);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      }<a name="line.1523"></a>
 <span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    @Override<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (entries.isEmpty()) {<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        return;<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      WriterAndPath wap = null;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      long startTime = System.nanoTime();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      try {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        int editsCount = 0;<a name="line.1537"></a>
+<span class="sourceLineNo">1525</span>      // Anything in the keptCells array list is still live.<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // So rather than removing the cells from the array list<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      // which would be an O(n^2) operation, we just replace the list<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      logEntry.getEdit().setCells(keptCells);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    @Override<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      if (entries.isEmpty()) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>        return;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      }<a name="line.1537"></a>
 <span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        for (Entry logEntry : entries) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          if (wap == null) {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>            wap = getWriterAndPath(logEntry);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>            if (wap == null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>              if (LOG.isDebugEnabled()) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>              }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>              return;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          filterCellByStore(logEntry);<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            wap.w.append(logEntry);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            editsCount++;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          } else {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>            wap.incrementSkippedEdits(1);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>          }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        // Pass along summary statistics<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        wap.incrementEdits(editsCount);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      } catch (IOException e) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          e = e instanceof RemoteException ?<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>        throw e;<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    }<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span><a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    /**<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>     */<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    @Override<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      synchronized (writers) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>        }<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      return ret;<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span><a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    @Override<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    public int getNumberOfRecoveredRegions() {<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      return writers.size();<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>  }<a name="line.1587"></a>
+<span class="sourceLineNo">1539</span>      WriterAndPath wap = null;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      long startTime = System.nanoTime();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      try {<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        int editsCount = 0;<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span><a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>        for (Entry logEntry : entries) {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>          if (wap == null) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>            wap = getWriterAndPath(logEntry);<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>            if (wap == null) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>              if (LOG.isDebugEnabled()) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>              }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>              return;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>            }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          filterCellByStore(logEntry);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            wap.w.append(logEntry);<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            editsCount++;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          } else {<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>            wap.incrementSkippedEdits(1);<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>          }<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        // Pass along summary statistics<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        wap.incrementEdits(editsCount);<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      } catch (IOException e) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>          e = e instanceof RemoteException ?<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>        throw e;<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    }<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span><a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>    /**<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>     */<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    @Override<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      synchronized (writers) {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      return ret;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    }<a name="line.1587"></a>
 <span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  /**<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>   */<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  public abstract static class SinkWriter {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    /* Count of edits written to this path */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    long editsWritten = 0;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    /* Count of edits skipped to this path */<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    long editsSkipped = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    /* Number of nanos spent writing to this log */<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    long nanosSpent = 0;<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    void incrementEdits(int edits) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      editsWritten += edits;<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    void incrementSkippedEdits(int skipped) {<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      editsSkipped += skipped;<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span><a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    void incrementNanoTime(long nanos) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      nanosSpent += nanos;<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    }<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  }<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span><a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>  /**<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * data written to this output.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   */<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    final Path p;<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    final Writer w;<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      this.p = p;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      this.w = w;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>  }<a name="line.1625"></a>
+<span class="sourceLineNo">1589</span>    @Override<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    public int getNumberOfRecoveredRegions() {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      return writers.size();<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  }<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span><a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>  /**<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>   */<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>  public abstract static class SinkWriter {<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    /* Count of edits written to this path */<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    long editsWritten = 0;<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    /* Count of edits skipped to this path */<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    long editsSkipped = 0;<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    /* Number of nanos spent writing to this log */<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    long nanosSpent = 0;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span><a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    void incrementEdits(int edits) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      editsWritten += edits;<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>    void incrementSkippedEdits(int skipped) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      editsSkipped += skipped;<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span><a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    void incrementNanoTime(long nanos) {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      nanosSpent += nanos;<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span><a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>  /**<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>   * data written to this output.<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>   */<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    final Path p;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    final Writer w;<a name="line.1625"></a>
 <span class="sourceLineNo">1626</span><a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>  /**<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>   */<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    private static final String KEY_DELIMITER = "#";<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    private long waitRegionOnlineTimeOut;<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    // online encoded region name -&gt; region location map<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span><a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>    /**<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>     * Map key -&gt; value layout<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>     */<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span><a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        int numWriters) {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      super(controller, entryBuffers, numWriters);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      this.waitRegionOnlineTimeOut =<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>        entryBuffers, numWriters);<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span><a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>    @Override<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      if (entries.isEmpty()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        return;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span><a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      // check if current region in a disabling or disabled table<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        // need fall back to old way<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>        // store regions we have recovered so far<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        return;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      }<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span><a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      // group entries by region servers<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      groupEditsByServer(entries);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span><a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      // process workitems<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      String maxLocKey = null;<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      int maxSize = 0;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>            maxSize = curQueue.size();<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>            maxQueue = curQueue;<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>            maxLocKey = entry.getKey();<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>          }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        if (maxSize &lt; minBatchSize<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>          // buffer more to process<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>          return;<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        } else if (maxSize &gt; 0) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>        }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span><a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>      if (maxSize &gt; 0) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>        recoveredRegions.add(encodedRegionName);<a name="line.1721"></a>
+<span class="sourceLineNo">1627</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      this.p = p;<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      this.w = w;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>    }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>  }<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span><a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>  /**<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>   */<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    private static final String KEY_DELIMITER = "#";<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>    private long waitRegionOnlineTimeOut;<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    // online encoded region name -&gt; region location map<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span><a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>    /**<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>     * Map key -&gt; value layout<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>     */<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span><a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span><a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>        int numWriters) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      super(controller, entryBuffers, numWriters);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      this.waitRegionOnlineTimeOut =<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>        entryBuffers, numWriters);<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    @Override<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (entries.isEmpty()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        return;<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      }<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span><a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      // check if current region in a disabling or disabled table<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // need fall back to old way<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>        // store regions we have recovered so far<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        return;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span><a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      // group entries by region servers<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      groupEditsByServer(entries);<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span><a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      // process workitems<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      String maxLocKey = null;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>      int maxSize = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>            maxSize = curQueue.size();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>            maxQueue = curQueue;<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>            maxLocKey = entry.getKey();<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>          }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>        }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        if (maxSize &lt; minBatchSize<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>          // buffer more to process<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>          return;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        } else if (maxSize &gt; 0) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span><a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      if (maxSize &gt; 0) {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
 <span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
 <span class="sourceLineNo">1724</span><a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    /**<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>     * Helper function to group WALEntries to individual region servers<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>     * @throws IOException<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>     */<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      for (Entry entry : entries) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>        WALEdit edit = entry.getEdit();<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        TableName table = entry.getKey().getTablename();<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>        // clear scopes which isn't needed for recovery<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>        entry.getKey().setScopes(null);<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>        // skip edits of non-existent tables<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>          this.skippedEdits.incrementAndGet();<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>          continue;<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        }<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span><a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        boolean needSkip = false;<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        HRegionLocation loc = null;<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        String locKey = null;<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span><a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>        for (Cell cell : cells) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>          boolean isCompactionEntry = false;<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>              try {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>                  .toByteArray());<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>                row = regionName[1]; // startKey of the region<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>                isCompactionEntry = true;<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>              } catch (Exception ex) {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>                skippedCells.add(cell);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>                continue;<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>              }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>            } else {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>              skippedCells.add(cell);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>              continue;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>            }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>          try {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>            loc =<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>                  encodeRegionNameStr);<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            // skip replaying the compaction if the region is gone<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>                  + encodeRegionNameStr);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>              needSkip = true;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>            }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>          } catch (TableNotFoundException ex) {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>            // table has been deleted so skip edits of the table<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>                + encodeRegionNameStr);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>            if (nonExistentTables == null) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>            }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            nonExistentTables.add(table);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>            this.skippedEdits.incrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>            needSkip = true;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>            break;<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          }<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span><a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          cachedLastFlushedSequenceId =<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          if (cachedLastFlushedSequenceId != null<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            // skip the whole WAL entry<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            this.skippedEdits.incrementAndGet();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            needSkip = true;<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            break;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } else {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            if (maxStoreSequenceIds == null) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>              maxStoreSequenceIds =<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            }<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            if (maxStoreSequenceIds != null) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>                skippedCells.add(cell);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                continue;<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>              }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>            }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>          }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        }<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>        // skip the edit<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        if (loc == null || needSkip) continue;<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>        if (!skippedCells.isEmpty()) {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          cells.removeAll(skippedCells);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        synchronized (serverToBufferQueueMap) {<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>          if (queue == null) {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>            queue =<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>          }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>        }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        // store regions we have recovered so far<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      }<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    }<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span><a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    /**<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>     * destination region is online for replay.<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>     * @throws IOException<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>     */<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>      // fetch location from cache<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      if(loc != null) return loc;<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      if (loc == null) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>            + " of table:" + table);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      // check if current row moves to a different region due to region merge/split<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        // originalEncodedRegionName should have already flushed<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      }<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span><a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      Long lastFlushedSequenceId = -1l;<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      if (!isRecovering.get()) {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>        // been moved to somewhere before hosting RS fails<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>            + " because it's not in recovering.");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      } else {<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>        Long cachedLastFlushedSequenceId =<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span><a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        // update the value for the region<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>        RegionStoreSequenceIds ids =<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>              loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        if (ids != null) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>          }<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        }<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        if (cachedLastFlushedSequenceId == null<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>            || lastFlushedSequenceId &gt; cachedLastFlushedSequenceId) {<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>          lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), lastFlushedSequenceId);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        }<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      }<a name="line.1903"></a>
+<span class="sourceLineNo">1725</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>        recoveredRegions.add(encodedRegionName);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    }<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span><a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>    /**<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>     * Helper function to group WALEntries to individual region servers<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>     * @throws IOException<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>     */<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      for (Entry entry : entries) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        WALEdit edit = entry.getEdit();<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>        TableName table = entry.getKey().getTablename();<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        // clear scopes which isn't needed for recovery<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        entry.getKey().setScopes(null);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // skip edits of non-existent tables<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>          this.skippedEdits.incrementAndGet();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>          continue;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        boolean needSkip = false;<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        HRegionLocation loc = null;<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        String locKey = null;<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span><a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        for (Cell cell : cells) {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>          boolean isCompactionEntry = false;<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>              try {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>                  .toByteArray());<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>                row = regionName[1]; // startKey of the region<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>                isCompactionEntry = true;<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>              } catch (Exception ex) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>                skippedCells.add(cell);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>                continue;<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>              }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            } else {<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>              skippedCells.add(cell);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>              continue;<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>            }<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          }<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span><a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          try {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>            loc =<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>                  encodeRegionNameStr);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>            // skip replaying the compaction if the region is gone<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>                  + encodeRegionNameStr);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>              needSkip = true;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>            }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>          } catch (TableNotFoundException ex) {<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>            // table has been deleted so skip edits of the table<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>                + encodeRegionNameStr);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>            if (nonExistentTables == null) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>            }<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>            nonExistentTables.add(table);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>            this.skippedEdits.incrementAndGet();<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>            needSkip = true;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>            break;<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          }<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span><a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>          cachedLastFlushedSequenceId =<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>          if (cachedLastFlushedSequenceId != null<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            // skip the whole WAL entry<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>            this.skippedEdits.incrementAndGet();<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>            needSkip = true;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            break;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>          } else {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>            if (maxStoreSequenceIds == null) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>              maxStoreSequenceIds =<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>            }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            if (maxStoreSequenceIds != null) {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>                skippedCells.add(cell);<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                continue;<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              }<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>            }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>          }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        }<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>        // skip the edit<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        if (loc == null || needSkip) continue;<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span><a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (!skippedCells.isEmpty()) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          cells.removeAll(skippedCells);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>        synchronized (serverToBufferQueueMap) {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>          if (queue == null) {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            queue =<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>        }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>        // store regions we have recovered so far<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span><a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    /**<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>     * destination region is online for replay.<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>     * @throws IOException<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>     */<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      // fetch location from cache<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      if(loc != null) return loc;<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      if (loc == null) {<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>            + " of table:" + table);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      }<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      // check if current row moves to a different region due to region merge/split<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        // originalEncodedRegionName should have already flushed<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      Long lastFlushedSequenceId = -1l;<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      if (!isRecovering.get()) {<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>        // been moved to somewhere before hosting RS fails<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>            + " because it's not in recovering.");<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      } else {<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        Long cachedLastFlushedSequenceId =<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        // update the value for the region<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>        RegionStoreSequenceIds ids =<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>              loc.getRegionInfo().getEncodedName());<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>        if (ids != null) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>          }<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        }<a name="line.1903"></a>
 <span class="sourceLineNo">1904</span><a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      onlineRegions.put(loc.getRegionInfo().getEncodedName(), loc);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      return loc;<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span><a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>    private void processWorkItems(String key, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; actions)<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>        throws IOException {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>      RegionServerWriter rsw = null;<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span><a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long startTime = System.nanoTime();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      try {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        rsw = getRegionServerWriter(key);<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>        rsw.sink.replayEntries(actions);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>        // Pass along summary statistics<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        rsw.incrementEdits(actions.size());<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>        rsw.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      } catch (IOException e) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        throw e;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    /**<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>     * Wait until region is online on the destination region server<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>     * @param loc<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>     * @param row<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>     * @param timeout How long to wait<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>     * @param isRecovering Recovering state of the region interested on destination region server.<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>     * @return True when region is online on the destination region server<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>     * @throws InterruptedException<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>     */<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    private HRegionLocation waitUntilRegionOnline(HRegionLocation loc, byte[] row,<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>        final long timeout, AtomicBoolean isRecovering)<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>        throws IOException {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      final long endTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      final long pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      boolean reloadLocation = false;<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      TableName tableName = loc.getRegionInfo().getTable();<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      int tries = 0;<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      Throwable cause = null;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>      while (endTime &gt; EnvironmentEdgeManager.currentTime()) {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>        try {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          // Try and get regioninfo from the hosting server.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          HConnection hconn = getConnectionByTableName(tableName);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          if(reloadLocation) {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            loc = hconn.getRegionLocation(tableName, row, true);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          }<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          BlockingInterface remoteSvr = hconn.getAdmin(loc.getServerName());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          HRegionInfo region = loc.getRegionInfo();<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>          try {<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>            GetRegionInfoRequest request =<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>                RequestConverter.buildGetRegionInfoRequest(region.getRegionName());<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            GetRegionInfoResponse response = remoteSvr.getRegionInfo(null, request);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>            if (HRegionInfo.convert(response.getRegionInfo()) != null) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>              isRecovering.set((response.hasIsRecovering()) ? response.getIsRecovering() : true);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>              return loc;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            }<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          } catch (ServiceException se) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>          }<a name="line.1966"></a>
-<span c

<TRUNCATED>

[14/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html
index f3aed1b..0597160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html
@@ -1513,810 +1513,816 @@
 <span class="sourceLineNo">1505</span>      if (maxSeqIdInStores == null || maxSeqIdInStores.isEmpty()) {<a name="line.1505"></a>
 <span class="sourceLineNo">1506</span>        return;<a name="line.1506"></a>
 <span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        if (!CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          // or the master was crashed before and we can not get the information.<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>          if (maxSeqId != null &amp;&amp; maxSeqId.longValue() &gt;= logEntry.getKey().getLogSeqNum()) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>            skippedCells.add(cell);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>          }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      }<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (!skippedCells.isEmpty()) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        logEntry.getEdit().getCells().removeAll(skippedCells);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1508</span>      // Create the array list for the cells that aren't filtered.<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // We make the assumption that most cells will be kept.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      ArrayList&lt;Cell&gt; keptCells = new ArrayList&lt;Cell&gt;(logEntry.getEdit().getCells().size());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>          keptCells.add(cell);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        } else {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          // or the master was crashed before and we can not get the information.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>          if (maxSeqId == null || maxSeqId.longValue() &lt; logEntry.getKey().getLogSeqNum()) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>            keptCells.add(cell);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      }<a name="line.1523"></a>
 <span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    @Override<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (entries.isEmpty()) {<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        return;<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      WriterAndPath wap = null;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      long startTime = System.nanoTime();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      try {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        int editsCount = 0;<a name="line.1537"></a>
+<span class="sourceLineNo">1525</span>      // Anything in the keptCells array list is still live.<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // So rather than removing the cells from the array list<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      // which would be an O(n^2) operation, we just replace the list<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      logEntry.getEdit().setCells(keptCells);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    @Override<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      if (entries.isEmpty()) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>        return;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      }<a name="line.1537"></a>
 <span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        for (Entry logEntry : entries) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          if (wap == null) {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>            wap = getWriterAndPath(logEntry);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>            if (wap == null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>              if (LOG.isDebugEnabled()) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>              }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>              return;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          filterCellByStore(logEntry);<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            wap.w.append(logEntry);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            editsCount++;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          } else {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>            wap.incrementSkippedEdits(1);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>          }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        // Pass along summary statistics<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        wap.incrementEdits(editsCount);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      } catch (IOException e) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          e = e instanceof RemoteException ?<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>        throw e;<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    }<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span><a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    /**<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>     */<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    @Override<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      synchronized (writers) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>        }<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      return ret;<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span><a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    @Override<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    public int getNumberOfRecoveredRegions() {<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      return writers.size();<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>  }<a name="line.1587"></a>
+<span class="sourceLineNo">1539</span>      WriterAndPath wap = null;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      long startTime = System.nanoTime();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      try {<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        int editsCount = 0;<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span><a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>        for (Entry logEntry : entries) {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>          if (wap == null) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>            wap = getWriterAndPath(logEntry);<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>            if (wap == null) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>              if (LOG.isDebugEnabled()) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>              }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>              return;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>            }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          filterCellByStore(logEntry);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            wap.w.append(logEntry);<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            editsCount++;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          } else {<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>            wap.incrementSkippedEdits(1);<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>          }<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        // Pass along summary statistics<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        wap.incrementEdits(editsCount);<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      } catch (IOException e) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>          e = e instanceof RemoteException ?<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>        throw e;<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    }<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span><a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>    /**<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>     */<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    @Override<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      synchronized (writers) {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      return ret;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    }<a name="line.1587"></a>
 <span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  /**<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>   */<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  public abstract static class SinkWriter {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    /* Count of edits written to this path */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    long editsWritten = 0;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    /* Count of edits skipped to this path */<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    long editsSkipped = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    /* Number of nanos spent writing to this log */<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    long nanosSpent = 0;<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    void incrementEdits(int edits) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      editsWritten += edits;<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    void incrementSkippedEdits(int skipped) {<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      editsSkipped += skipped;<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span><a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    void incrementNanoTime(long nanos) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      nanosSpent += nanos;<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    }<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  }<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span><a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>  /**<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * data written to this output.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   */<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    final Path p;<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    final Writer w;<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      this.p = p;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      this.w = w;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>  }<a name="line.1625"></a>
+<span class="sourceLineNo">1589</span>    @Override<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    public int getNumberOfRecoveredRegions() {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      return writers.size();<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  }<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span><a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>  /**<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>   */<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>  public abstract static class SinkWriter {<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    /* Count of edits written to this path */<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    long editsWritten = 0;<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    /* Count of edits skipped to this path */<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    long editsSkipped = 0;<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    /* Number of nanos spent writing to this log */<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    long nanosSpent = 0;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span><a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    void incrementEdits(int edits) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      editsWritten += edits;<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>    void incrementSkippedEdits(int skipped) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      editsSkipped += skipped;<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span><a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    void incrementNanoTime(long nanos) {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      nanosSpent += nanos;<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span><a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>  /**<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>   * data written to this output.<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>   */<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    final Path p;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    final Writer w;<a name="line.1625"></a>
 <span class="sourceLineNo">1626</span><a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>  /**<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>   */<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    private static final String KEY_DELIMITER = "#";<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    private long waitRegionOnlineTimeOut;<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    // online encoded region name -&gt; region location map<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span><a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>    /**<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>     * Map key -&gt; value layout<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>     */<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span><a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        int numWriters) {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      super(controller, entryBuffers, numWriters);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      this.waitRegionOnlineTimeOut =<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>        entryBuffers, numWriters);<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span><a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>    @Override<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      if (entries.isEmpty()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        return;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span><a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      // check if current region in a disabling or disabled table<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        // need fall back to old way<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>        // store regions we have recovered so far<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        return;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      }<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span><a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      // group entries by region servers<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      groupEditsByServer(entries);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span><a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      // process workitems<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      String maxLocKey = null;<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      int maxSize = 0;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>            maxSize = curQueue.size();<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>            maxQueue = curQueue;<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>            maxLocKey = entry.getKey();<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>          }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        if (maxSize &lt; minBatchSize<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>          // buffer more to process<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>          return;<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        } else if (maxSize &gt; 0) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>        }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span><a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>      if (maxSize &gt; 0) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>        recoveredRegions.add(encodedRegionName);<a name="line.1721"></a>
+<span class="sourceLineNo">1627</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      this.p = p;<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      this.w = w;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>    }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>  }<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span><a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>  /**<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>   */<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    private static final String KEY_DELIMITER = "#";<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>    private long waitRegionOnlineTimeOut;<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    // online encoded region name -&gt; region location map<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span><a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>    /**<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>     * Map key -&gt; value layout<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>     */<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span><a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span><a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>        int numWriters) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      super(controller, entryBuffers, numWriters);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      this.waitRegionOnlineTimeOut =<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>        entryBuffers, numWriters);<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    @Override<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (entries.isEmpty()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        return;<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      }<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span><a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      // check if current region in a disabling or disabled table<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // need fall back to old way<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>        // store regions we have recovered so far<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        return;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span><a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      // group entries by region servers<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      groupEditsByServer(entries);<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span><a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      // process workitems<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      String maxLocKey = null;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>      int maxSize = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>            maxSize = curQueue.size();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>            maxQueue = curQueue;<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>            maxLocKey = entry.getKey();<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>          }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>        }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        if (maxSize &lt; minBatchSize<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>          // buffer more to process<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>          return;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        } else if (maxSize &gt; 0) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span><a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      if (maxSize &gt; 0) {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
 <span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
 <span class="sourceLineNo">1724</span><a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    /**<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>     * Helper function to group WALEntries to individual region servers<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>     * @throws IOException<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>     */<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      for (Entry entry : entries) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>        WALEdit edit = entry.getEdit();<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        TableName table = entry.getKey().getTablename();<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>        // clear scopes which isn't needed for recovery<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>        entry.getKey().setScopes(null);<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>        // skip edits of non-existent tables<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>          this.skippedEdits.incrementAndGet();<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>          continue;<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        }<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span><a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        boolean needSkip = false;<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        HRegionLocation loc = null;<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        String locKey = null;<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span><a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>        for (Cell cell : cells) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>          boolean isCompactionEntry = false;<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>              try {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>                  .toByteArray());<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>                row = regionName[1]; // startKey of the region<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>                isCompactionEntry = true;<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>              } catch (Exception ex) {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>                skippedCells.add(cell);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>                continue;<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>              }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>            } else {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>              skippedCells.add(cell);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>              continue;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>            }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>          try {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>            loc =<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>                  encodeRegionNameStr);<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            // skip replaying the compaction if the region is gone<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>                  + encodeRegionNameStr);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>              needSkip = true;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>            }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>          } catch (TableNotFoundException ex) {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>            // table has been deleted so skip edits of the table<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>                + encodeRegionNameStr);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>            if (nonExistentTables == null) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>            }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            nonExistentTables.add(table);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>            this.skippedEdits.incrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>            needSkip = true;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>            break;<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          }<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span><a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          cachedLastFlushedSequenceId =<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          if (cachedLastFlushedSequenceId != null<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            // skip the whole WAL entry<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            this.skippedEdits.incrementAndGet();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            needSkip = true;<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            break;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } else {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            if (maxStoreSequenceIds == null) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>              maxStoreSequenceIds =<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            }<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            if (maxStoreSequenceIds != null) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>                skippedCells.add(cell);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                continue;<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>              }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>            }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>          }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        }<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>        // skip the edit<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        if (loc == null || needSkip) continue;<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>        if (!skippedCells.isEmpty()) {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          cells.removeAll(skippedCells);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        synchronized (serverToBufferQueueMap) {<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>          if (queue == null) {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>            queue =<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>          }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>        }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        // store regions we have recovered so far<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      }<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    }<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span><a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    /**<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>     * destination region is online for replay.<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>     * @throws IOException<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>     */<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>      // fetch location from cache<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      if(loc != null) return loc;<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      if (loc == null) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>            + " of table:" + table);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      // check if current row moves to a different region due to region merge/split<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        // originalEncodedRegionName should have already flushed<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      }<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span><a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      Long lastFlushedSequenceId = -1l;<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      if (!isRecovering.get()) {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>        // been moved to somewhere before hosting RS fails<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>            + " because it's not in recovering.");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      } else {<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>        Long cachedLastFlushedSequenceId =<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span><a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        // update the value for the region<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>        RegionStoreSequenceIds ids =<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>              loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        if (ids != null) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>          }<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        }<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        if (cachedLastFlushedSequenceId == null<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>            || lastFlushedSequenceId &gt; cachedLastFlushedSequenceId) {<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>          lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), lastFlushedSequenceId);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        }<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      }<a name="line.1903"></a>
+<span class="sourceLineNo">1725</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>        recoveredRegions.add(encodedRegionName);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    }<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span><a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>    /**<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>     * Helper function to group WALEntries to individual region servers<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>     * @throws IOException<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>     */<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      for (Entry entry : entries) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        WALEdit edit = entry.getEdit();<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>        TableName table = entry.getKey().getTablename();<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        // clear scopes which isn't needed for recovery<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        entry.getKey().setScopes(null);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // skip edits of non-existent tables<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>          this.skippedEdits.incrementAndGet();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>          continue;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        boolean needSkip = false;<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        HRegionLocation loc = null;<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        String locKey = null;<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span><a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        for (Cell cell : cells) {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>          boolean isCompactionEntry = false;<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>              try {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>                  .toByteArray());<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>                row = regionName[1]; // startKey of the region<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>                isCompactionEntry = true;<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>              } catch (Exception ex) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>                skippedCells.add(cell);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>                continue;<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>              }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            } else {<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>              skippedCells.add(cell);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>              continue;<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>            }<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          }<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span><a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          try {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>            loc =<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>                  encodeRegionNameStr);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>            // skip replaying the compaction if the region is gone<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>                  + encodeRegionNameStr);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>              needSkip = true;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>            }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>          } catch (TableNotFoundException ex) {<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>            // table has been deleted so skip edits of the table<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>                + encodeRegionNameStr);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>            if (nonExistentTables == null) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>            }<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>            nonExistentTables.add(table);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>            this.skippedEdits.incrementAndGet();<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>            needSkip = true;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>            break;<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          }<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span><a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>          cachedLastFlushedSequenceId =<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>          if (cachedLastFlushedSequenceId != null<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            // skip the whole WAL entry<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>            this.skippedEdits.incrementAndGet();<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>            needSkip = true;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            break;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>          } else {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>            if (maxStoreSequenceIds == null) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>              maxStoreSequenceIds =<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>            }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            if (maxStoreSequenceIds != null) {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>                skippedCells.add(cell);<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                continue;<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              }<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>            }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>          }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        }<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>        // skip the edit<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        if (loc == null || needSkip) continue;<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span><a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (!skippedCells.isEmpty()) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          cells.removeAll(skippedCells);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>        synchronized (serverToBufferQueueMap) {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>          if (queue == null) {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            queue =<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>        }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>        // store regions we have recovered so far<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span><a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    /**<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>     * destination region is online for replay.<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>     * @throws IOException<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>     */<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      // fetch location from cache<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      if(loc != null) return loc;<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      if (loc == null) {<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>            + " of table:" + table);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      }<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      // check if current row moves to a different region due to region merge/split<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        // originalEncodedRegionName should have already flushed<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      Long lastFlushedSequenceId = -1l;<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      if (!isRecovering.get()) {<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>        // been moved to somewhere before hosting RS fails<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>            + " because it's not in recovering.");<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      } else {<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        Long cachedLastFlushedSequenceId =<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        // update the value for the region<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>        RegionStoreSequenceIds ids =<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>              loc.getRegionInfo().getEncodedName());<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>        if (ids != null) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>          }<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        }<a name="line.1903"></a>
 <span class="sourceLineNo">1904</span><a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      onlineRegions.put(loc.getRegionInfo().getEncodedName(), loc);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      return loc;<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span><a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>    private void processWorkItems(String key, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; actions)<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>        throws IOException {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>      RegionServerWriter rsw = null;<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span><a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long startTime = System.nanoTime();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      try {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        rsw = getRegionServerWriter(key);<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>        rsw.sink.replayEntries(actions);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>        // Pass along summary statistics<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        rsw.incrementEdits(actions.size());<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>        rsw.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      } catch (IOException e) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        throw e;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    /**<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>     * Wait until region is online on the destination region server<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>     * @param loc<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>     * @param row<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>     * @param timeout How long to wait<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>     * @param isRecovering Recovering state of the region interested on destination region server.<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>     * @return True when region is online on the destination region server<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>     * @throws InterruptedException<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>     */<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    private HRegionLocation waitUntilRegionOnline(HRegionLocation loc, byte[] row,<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>        final long timeout, AtomicBoolean isRecovering)<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>        throws IOException {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      final long endTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      final long pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      boolean reloadLocation = false;<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      TableName tableName = loc.getRegionInfo().getTable();<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      int tries = 0;<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      Throwable cause = null;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>      while (endTime &gt; EnvironmentEdgeManager.currentTime()) {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>        try {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          // Try and get regioninfo from the hosting server.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          HConnection hconn = getConnectionByTableName(tableName);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          if(reloadLocation) {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            loc = hconn.getRegionLocation(tableName, row, true);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          }<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          BlockingInterface remoteSvr = hconn.getAdmin(loc.getServerName());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          HRegionInfo region = loc.getRegionInfo();<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>          try {<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>            GetRegionInfoRequest request =<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>                RequestConverter.buildGetRegionInfoRequest(region.getRegionName());<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            GetRegionInfoResponse response = remoteSvr.getRegionInfo(null, request);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>            if (HRegionInfo.convert(response.getRegionInfo()) != null) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>              isRecovering.set((response.hasIsRecovering()) ? response.getIsRecovering() : true);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>              return loc;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            }<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          } catch (ServiceException se) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>          }<a 

<TRUNCATED>

[04/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/util/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/util/package-frame.html
index 5e85ecb..34e0820 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/package-frame.html
@@ -46,7 +46,6 @@
 <li><a href="TestBase64.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestBase64</a></li>
 <li><a href="TestBloomFilterChunk.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestBloomFilterChunk</a></li>
 <li><a href="TestBoundedArrayQueue.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestBoundedArrayQueue</a></li>
-<li><a href="TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestBoundedConcurrentLinkedQueue</a></li>
 <li><a href="TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestBoundedPriorityBlockingQueue</a></li>
 <li><a href="TestByteBufferUtils.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestByteBufferUtils</a></li>
 <li><a href="TestByteBuffUtils.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestByteBuffUtils</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/util/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/util/package-summary.html
index 000fa59..30a4b32 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/package-summary.html
@@ -272,322 +272,318 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedConcurrentLinkedQueue</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedPriorityBlockingQueue</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferUtils.html" title="class in org.apache.hadoop.hbase.util">TestByteBufferUtils</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBuffUtils.html" title="class in org.apache.hadoop.hbase.util">TestByteBuffUtils</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestByteRangeWithKVSerialization.html" title="class in org.apache.hadoop.hbase.util">TestByteRangeWithKVSerialization</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestBytes.html" title="class in org.apache.hadoop.hbase.util">TestBytes</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestCompressionTest.html" title="class in org.apache.hadoop.hbase.util">TestCompressionTest</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestConcatenatedLists.html" title="class in org.apache.hadoop.hbase.util">TestConcatenatedLists</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestConfigurationUtil.html" title="class in org.apache.hadoop.hbase.util">TestConfigurationUtil</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestConnectionCache.html" title="class in org.apache.hadoop.hbase.util">TestConnectionCache</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestCoprocessorClassLoader.html" title="class in org.apache.hadoop.hbase.util">TestCoprocessorClassLoader</a></td>
 <td class="colLast">
 <div class="block">Test TestCoprocessorClassLoader.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestCoprocessorScanPolicy.html" title="class in org.apache.hadoop.hbase.util">TestCoprocessorScanPolicy</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestCoprocessorScanPolicy.ScanObserver.html" title="class in org.apache.hadoop.hbase.util">TestCoprocessorScanPolicy.ScanObserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestCounter.html" title="class in org.apache.hadoop.hbase.util">TestCounter</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestDefaultEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">TestDefaultEnvironmentEdge</a></td>
 <td class="colLast">
 <div class="block">Tests to make sure that the default environment edge conforms to appropriate
  behaviour.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestDrainBarrier.html" title="class in org.apache.hadoop.hbase.util">TestDrainBarrier</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestDynamicClassLoader.html" title="class in org.apache.hadoop.hbase.util">TestDynamicClassLoader</a></td>
 <td class="colLast">
 <div class="block">Test TestDynamicClassLoader</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestEncryptionTest.html" title="class in org.apache.hadoop.hbase.util">TestEncryptionTest</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestEncryptionTest.FailingCipherProvider.html" title="class in org.apache.hadoop.hbase.util">TestEncryptionTest.FailingCipherProvider</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestEncryptionTest.FailingKeyProvider.html" title="class in org.apache.hadoop.hbase.util">TestEncryptionTest.FailingKeyProvider</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestEnvironmentEdgeManager.html" title="class in org.apache.hadoop.hbase.util">TestEnvironmentEdgeManager</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestFastLongHistogram.html" title="class in org.apache.hadoop.hbase.util">TestFastLongHistogram</a></td>
 <td class="colLast">
 <div class="block">Testcases for FastLongHistogram.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestFSHDFSUtils.html" title="class in org.apache.hadoop.hbase.util">TestFSHDFSUtils</a></td>
 <td class="colLast">
 <div class="block">Test our recoverLease loop against mocked up filesystem.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestFSTableDescriptors.html" title="class in org.apache.hadoop.hbase.util">TestFSTableDescriptors</a></td>
 <td class="colLast">
 <div class="block">Tests for <code>FSTableDescriptors</code>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestFSTableDescriptors.FSTableDescriptorsTest.html" title="class in org.apache.hadoop.hbase.util">TestFSTableDescriptors.FSTableDescriptorsTest</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestFSUtils.html" title="class in org.apache.hadoop.hbase.util">TestFSUtils</a></td>
 <td class="colLast">
 <div class="block">Test <code>FSUtils</code>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestFSVisitor.html" title="class in org.apache.hadoop.hbase.util">TestFSVisitor</a></td>
 <td class="colLast">
 <div class="block">Test <code>FSUtils</code>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckComparator</a></td>
 <td class="colLast">
 <div class="block">Test the comparator used by Hbck.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckEncryption</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckMOB.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckMOB</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckOneRS</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckReplicas.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckReplicas</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckTwoRS.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckTwoRS</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHFileArchiveUtil.html" title="class in org.apache.hadoop.hbase.util">TestHFileArchiveUtil</a></td>
 <td class="colLast">
 <div class="block">Test that the utility works as expected</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestIdLock.html" title="class in org.apache.hadoop.hbase.util">TestIdLock</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestIdReadWriteLock.html" title="class in org.apache.hadoop.hbase.util">TestIdReadWriteLock</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestIncrementingEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">TestIncrementingEnvironmentEdge</a></td>
 <td class="colLast">
 <div class="block">Tests that the incrementing environment edge increments time instead of using
  the default.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestKeyLocker.html" title="class in org.apache.hadoop.hbase.util">TestKeyLocker</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestLoadTestKVGenerator.html" title="class in org.apache.hadoop.hbase.util">TestLoadTestKVGenerator</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestMergeTable.html" title="class in org.apache.hadoop.hbase.util">TestMergeTable</a></td>
 <td class="colLast">
 <div class="block">Tests merging a normal table's regions</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestMergeTool.html" title="class in org.apache.hadoop.hbase.util">TestMergeTool</a></td>
 <td class="colLast">
 <div class="block">Test stand alone merge tool that can merge arbitrary regions</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestMiniClusterLoadEncoded.html" title="class in org.apache.hadoop.hbase.util">TestMiniClusterLoadEncoded</a></td>
 <td class="colLast">
 <div class="block">Runs a load test on a mini HBase cluster with data block encoding turned on.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestMiniClusterLoadParallel.html" title="class in org.apache.hadoop.hbase.util">TestMiniClusterLoadParallel</a></td>
 <td class="colLast">
 <div class="block">A write/read/verify load test on a mini HBase cluster.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestMiniClusterLoadSequential.html" title="class in org.apache.hadoop.hbase.util">TestMiniClusterLoadSequential</a></td>
 <td class="colLast">
 <div class="block">A write/read/verify load test on a mini HBase cluster.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestOrder.html" title="class in org.apache.hadoop.hbase.util">TestOrder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html" title="class in org.apache.hadoop.hbase.util">TestOrderedBytes</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestPoolMap.html" title="class in org.apache.hadoop.hbase.util">TestPoolMap</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestPoolMap.TestPoolType.html" title="class in org.apache.hadoop.hbase.util">TestPoolMap.TestPoolType</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestPoolMap.TestReusablePoolType.html" title="class in org.apache.hadoop.hbase.util">TestPoolMap.TestReusablePoolType</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestPoolMap.TestRoundRobinPoolType.html" title="class in org.apache.hadoop.hbase.util">TestPoolMap.TestRoundRobinPoolType</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestPoolMap.TestThreadLocalPoolType.html" title="class in org.apache.hadoop.hbase.util">TestPoolMap.TestThreadLocalPoolType</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRegionMover.html" title="class in org.apache.hadoop.hbase.util">TestRegionMover</a></td>
 <td class="colLast">
 <div class="block">Tests for Region Mover Load/Unload functionality with and without ack mode and also to test
  exclude functionality useful for rack decommissioning</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRegionSizeCalculator.html" title="class in org.apache.hadoop.hbase.util">TestRegionSizeCalculator</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util">TestRegionSplitCalculator</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRegionSplitCalculator.SimpleRange.html" title="class in org.apache.hadoop.hbase.util">TestRegionSplitCalculator.SimpleRange</a></td>
 <td class="colLast">
 <div class="block">This is range uses a user specified start and end keys.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRegionSplitter.html" title="class in org.apache.hadoop.hbase.util">TestRegionSplitter</a></td>
 <td class="colLast">
 <div class="block">Tests for <code>RegionSplitter</code>, which can create a pre-split table or do a
  rolling split of an existing table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRootPath.html" title="class in org.apache.hadoop.hbase.util">TestRootPath</a></td>
 <td class="colLast">
 <div class="block">Test requirement that root directory must be a URI</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestShowProperties.html" title="class in org.apache.hadoop.hbase.util">TestShowProperties</a></td>
 <td class="colLast">
 <div class="block">This test is there to dump the properties.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestSimpleMutableByteRange.html" title="class in org.apache.hadoop.hbase.util">TestSimpleMutableByteRange</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestSimplePositionedMutableByteRange.html" title="class in org.apache.hadoop.hbase.util">TestSimplePositionedMutableByteRange</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestSortedCopyOnWriteSet.html" title="class in org.apache.hadoop.hbase.util">TestSortedCopyOnWriteSet</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestSortedList.html" title="class in org.apache.hadoop.hbase.util">TestSortedList</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestSortedList.StringComparator.html" title="class in org.apache.hadoop.hbase.util">TestSortedList.StringComparator</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestStealJobQueue.html" title="class in org.apache.hadoop.hbase.util">TestStealJobQueue</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestTableName.html" title="class in org.apache.hadoop.hbase.util">TestTableName</a></td>
 <td class="colLast">
 <div class="block">Returns a <code>byte[]</code> containing the name of the currently running test method.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestThreads.html" title="class in org.apache.hadoop.hbase.util">TestThreads</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestWeakObjectPool.html" title="class in org.apache.hadoop.hbase.util">TestWeakObjectPool</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TimeOffsetEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">TimeOffsetEnvironmentEdge</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/util/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/util/package-tree.html
index bdd9394..c173e1c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -196,7 +196,6 @@
 </li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/StoppableImplementation.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">StoppableImplementation</span></a> (implements org.apache.hadoop.hbase.Stoppable)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">TestBoundedArrayQueue</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">TestBoundedConcurrentLinkedQueue</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">TestBoundedPriorityBlockingQueue</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.TestObject.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">TestBoundedPriorityBlockingQueue.TestObject</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.TestObjectComparator.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">TestBoundedPriorityBlockingQueue.TestObjectComparator</span></a> (implements java.util.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;T&gt;)</li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestRecoverableZooKeeper.ZookeeperStub.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestRecoverableZooKeeper.ZookeeperStub.html b/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestRecoverableZooKeeper.ZookeeperStub.html
index d9bfeec..186339a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestRecoverableZooKeeper.ZookeeperStub.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/zookeeper/TestRecoverableZooKeeper.ZookeeperStub.html
@@ -204,7 +204,7 @@ extends org.apache.zookeeper.ZooKeeper</pre>
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.zookeeper.ZooKeeper</h3>
-<code>addAuthInfo, close, create, create, delete, delete, exists, exists, exists, exists, getACL, getACL, getChildren, getChildren, getChildren, getChildren, getChildren, getChildren, getChildren, getChildren, getData, getData, getData, getData, getSaslClient, getSessionId, getSessionPasswd, getSessionTimeout, getState, multi, multi, multiInternal, multiInternal, register, setACL, setACL, setData, sync, testableLocalSocketAddress, testableRemoteSocketAddress, testableWaitForShutdown, toString, transaction</code></li>
+<code>addAuthInfo, close, create, create, delete, delete, exists, exists, exists, exists, getACL, getACL, getChildren, getChildren, getChildren, getChildren, getChildren, getChildren, getChildren, getChildren, getData, getData, getData, getData, getSaslClient, getSessionId, getSessionPasswd, getSessionTimeout, getState, multi, multiInternal, register, setACL, setACL, setData, sync, testableLocalSocketAddress, testableRemoteSocketAddress, testableWaitForShutdown, toString, transaction</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index 6b6bc41..0b69b03 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -1817,7 +1817,6 @@
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestBlocksRead.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">TestBlocksRead</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">TestBoundedArrayQueue</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/TestBoundedByteBufferPool.html" title="class in org.apache.hadoop.hbase.io"><span class="strong">TestBoundedByteBufferPool</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">TestBoundedConcurrentLinkedQueue</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">TestBoundedPriorityBlockingQueue</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.TestObject.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">TestBoundedPriorityBlockingQueue.TestObject</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.TestObjectComparator.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">TestBoundedPriorityBlockingQueue.TestObjectComparator</span></a> (implements java.util.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;T&gt;)</li>
@@ -2171,6 +2170,7 @@
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/TestKeyValueCompression.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="strong">TestKeyValueCompression</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.codec.keyvalue.<a href="org/apache/hadoop/hbase/codec/keyvalue/TestKeyValueTool.html" title="class in org.apache.hadoop.hbase.codec.keyvalue"><span class="strong">TestKeyValueTool</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestLazyDataBlockDecompression.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestLazyDataBlockDecompression</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">TestLeaseRenewal</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFiles.html" title="class in org.apache.hadoop.hbase.mapreduce"><span class="strong">TestLoadIncrementalHFiles</span></a>
 <ul>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesUseSecurityEndPoint.html" title="class in org.apache.hadoop.hbase.mapreduce"><span class="strong">TestLoadIncrementalHFilesUseSecurityEndPoint</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/serialized-form.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/serialized-form.html b/testdevapidocs/serialized-form.html
index 004c974..332de85 100644
--- a/testdevapidocs/serialized-form.html
+++ b/testdevapidocs/serialized-form.html
@@ -1982,32 +1982,6 @@
 <li class="blockList">
 <h2 title="Package">Package&nbsp;org.apache.hadoop.hbase.util</h2>
 <ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase.util.BoundedConcurrentLinkedQueue">
-<!--   -->
-</a>
-<h3>Class org.apache.hadoop.hbase.util.BoundedConcurrentLinkedQueue extends <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentLinkedQueue</a>&lt;T&gt; implements Serializable</h3>
-<dl class="nameValue">
-<dt>serialVersionUID:</dt>
-<dd>1L</dd>
-</dl>
-<ul class="blockList">
-<li class="blockList"><a name="serializedForm">
-<!--   -->
-</a>
-<h3>Serialized Fields</h3>
-<ul class="blockList">
-<li class="blockList">
-<h4>size</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> size</pre>
-</li>
-<li class="blockListLast">
-<h4>maxSize</h4>
-<pre>long maxSize</pre>
-</li>
-</ul>
-</li>
-</ul>
-</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.util.FileSystemVersionException">
 <!--   -->
 </a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestFromClientSide3.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestFromClientSide3.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestFromClientSide3.html
index d406919..232ae6b 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestFromClientSide3.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestFromClientSide3.html
@@ -484,32 +484,7 @@
 <span class="sourceLineNo">476</span>    assertTrue(Arrays.equals(res.getValue(FAMILY, COL_QUAL), VAL_BYTES));<a name="line.476"></a>
 <span class="sourceLineNo">477</span>    table.close();<a name="line.477"></a>
 <span class="sourceLineNo">478</span>  }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>  @Test<a name="line.480"></a>
-<span class="sourceLineNo">481</span>  public void testLeaseRenewal() throws Exception {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    Table table = TEST_UTIL.createTable(<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      TableName.valueOf("testLeaseRenewal"), FAMILY);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    Put p = new Put(ROW_BYTES);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    p.addColumn(FAMILY, COL_QUAL, VAL_BYTES);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    table.put(p);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    p = new Put(ANOTHERROW);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    p.addColumn(FAMILY, COL_QUAL, VAL_BYTES);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    table.put(p);<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    Scan s = new Scan();<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    s.setCaching(1);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    ResultScanner rs = table.getScanner(s);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    // make sure that calling renewLease does not impact the scan results<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    assertTrue(rs.renewLease());<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    assertTrue(Arrays.equals(rs.next().getRow(), ANOTHERROW));<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    assertTrue(rs.renewLease());<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    assertTrue(Arrays.equals(rs.next().getRow(), ROW_BYTES));<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    assertTrue(rs.renewLease());<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    assertNull(rs.next());<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    assertFalse(rs.renewLease());<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    rs.close();<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    table.close();<a name="line.502"></a>
-<span class="sourceLineNo">503</span>  }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>}<a name="line.504"></a>
+<span class="sourceLineNo">479</span>}<a name="line.479"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html
new file mode 100644
index 0000000..8e317fb
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html
@@ -0,0 +1,197 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> *<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
+<span class="sourceLineNo">009</span> * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
+<span class="sourceLineNo">012</span> *<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
+<span class="sourceLineNo">017</span> * limitations under the License.<a name="line.17"></a>
+<span class="sourceLineNo">018</span> */<a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.client;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertFalse;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.assertNull;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.junit.Assert.assertTrue;<a name="line.23"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.Arrays;<a name="line.25"></a>
+<span class="sourceLineNo">026</span><a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.commons.logging.Log;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.commons.logging.LogFactory;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HConstants;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.TableName;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.junit.After;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.junit.AfterClass;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.Before;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.BeforeClass;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.Test;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.experimental.categories.Category;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>@Category(LargeTests.class)<a name="line.42"></a>
+<span class="sourceLineNo">043</span>public class TestLeaseRenewal {<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  final Log LOG = LogFactory.getLog(getClass());<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private static final byte[] ANOTHERROW = Bytes.toBytes("anotherrow");<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private final static byte[] COL_QUAL = Bytes.toBytes("f1");<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private final static byte[] VAL_BYTES = Bytes.toBytes("v1");<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private final static byte[] ROW_BYTES = Bytes.toBytes("r1");<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private final static int leaseTimeout =<a name="line.51"></a>
+<span class="sourceLineNo">052</span>      HConstants.DEFAULT_HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD / 4;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  /**<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * @throws java.lang.Exception<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  @BeforeClass<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  public static void setUpBeforeClass() throws Exception {<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD,<a name="line.59"></a>
+<span class="sourceLineNo">060</span>      leaseTimeout);<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    TEST_UTIL.startMiniCluster();<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  }<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  /**<a name="line.64"></a>
+<span class="sourceLineNo">065</span>   * @throws java.lang.Exception<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   */<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  @AfterClass<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  public static void tearDownAfterClass() throws Exception {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  /**<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * @throws java.lang.Exception<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   */<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  @Before<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  public void setUp() throws Exception {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    // Nothing to do.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * @throws java.lang.Exception<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   */<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  @After<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public void tearDown() throws Exception {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    for (HTableDescriptor htd : TEST_UTIL.getHBaseAdmin().listTables()) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      LOG.info("Tear down, remove table=" + htd.getTableName());<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      TEST_UTIL.deleteTable(htd.getTableName());<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    }<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  @Test<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  public void testLeaseRenewal() throws Exception {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    HTable table = TEST_UTIL.createTable(<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      TableName.valueOf("testLeaseRenewal"), FAMILY);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    Put p = new Put(ROW_BYTES);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    p.addColumn(FAMILY, COL_QUAL, VAL_BYTES);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    table.put(p);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    p = new Put(ANOTHERROW);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    p.addColumn(FAMILY, COL_QUAL, VAL_BYTES);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    table.put(p);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    Scan s = new Scan();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    s.setCaching(1);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    ResultScanner rs = table.getScanner(s);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    // make sure that calling renewLease does not impact the scan results<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    assertTrue(rs.renewLease());<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    assertTrue(Arrays.equals(rs.next().getRow(), ANOTHERROW));<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    // renew the lease a few times, long enough to be sure<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    // the lease would have expired otherwise<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    Thread.sleep(leaseTimeout/2);<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    assertTrue(rs.renewLease());<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    Thread.sleep(leaseTimeout/2);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    assertTrue(rs.renewLease());<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    Thread.sleep(leaseTimeout/2);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    assertTrue(rs.renewLease());<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    // make sure we haven't advanced the scanner<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    assertTrue(Arrays.equals(rs.next().getRow(), ROW_BYTES));<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    assertTrue(rs.renewLease());<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    // make sure scanner is exhausted now<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    assertNull(rs.next());<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    // renewLease should return false now<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    assertFalse(rs.renewLease());<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    rs.close();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    table.close();<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[20/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html
index f3aed1b..0597160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html
@@ -1513,810 +1513,816 @@
 <span class="sourceLineNo">1505</span>      if (maxSeqIdInStores == null || maxSeqIdInStores.isEmpty()) {<a name="line.1505"></a>
 <span class="sourceLineNo">1506</span>        return;<a name="line.1506"></a>
 <span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        if (!CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          // or the master was crashed before and we can not get the information.<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>          if (maxSeqId != null &amp;&amp; maxSeqId.longValue() &gt;= logEntry.getKey().getLogSeqNum()) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>            skippedCells.add(cell);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>          }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      }<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (!skippedCells.isEmpty()) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        logEntry.getEdit().getCells().removeAll(skippedCells);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1508</span>      // Create the array list for the cells that aren't filtered.<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // We make the assumption that most cells will be kept.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      ArrayList&lt;Cell&gt; keptCells = new ArrayList&lt;Cell&gt;(logEntry.getEdit().getCells().size());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>          keptCells.add(cell);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        } else {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          // or the master was crashed before and we can not get the information.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>          if (maxSeqId == null || maxSeqId.longValue() &lt; logEntry.getKey().getLogSeqNum()) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>            keptCells.add(cell);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      }<a name="line.1523"></a>
 <span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    @Override<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (entries.isEmpty()) {<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        return;<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      WriterAndPath wap = null;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      long startTime = System.nanoTime();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      try {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        int editsCount = 0;<a name="line.1537"></a>
+<span class="sourceLineNo">1525</span>      // Anything in the keptCells array list is still live.<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // So rather than removing the cells from the array list<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      // which would be an O(n^2) operation, we just replace the list<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      logEntry.getEdit().setCells(keptCells);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    @Override<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      if (entries.isEmpty()) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>        return;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      }<a name="line.1537"></a>
 <span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        for (Entry logEntry : entries) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          if (wap == null) {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>            wap = getWriterAndPath(logEntry);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>            if (wap == null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>              if (LOG.isDebugEnabled()) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>              }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>              return;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          filterCellByStore(logEntry);<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            wap.w.append(logEntry);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            editsCount++;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          } else {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>            wap.incrementSkippedEdits(1);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>          }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        // Pass along summary statistics<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        wap.incrementEdits(editsCount);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      } catch (IOException e) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          e = e instanceof RemoteException ?<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>        throw e;<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    }<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span><a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    /**<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>     */<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    @Override<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      synchronized (writers) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>        }<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      return ret;<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span><a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    @Override<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    public int getNumberOfRecoveredRegions() {<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      return writers.size();<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>  }<a name="line.1587"></a>
+<span class="sourceLineNo">1539</span>      WriterAndPath wap = null;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      long startTime = System.nanoTime();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      try {<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        int editsCount = 0;<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span><a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>        for (Entry logEntry : entries) {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>          if (wap == null) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>            wap = getWriterAndPath(logEntry);<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>            if (wap == null) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>              if (LOG.isDebugEnabled()) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>              }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>              return;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>            }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          filterCellByStore(logEntry);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            wap.w.append(logEntry);<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            editsCount++;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          } else {<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>            wap.incrementSkippedEdits(1);<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>          }<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        // Pass along summary statistics<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        wap.incrementEdits(editsCount);<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      } catch (IOException e) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>          e = e instanceof RemoteException ?<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>        throw e;<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    }<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span><a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>    /**<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>     */<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    @Override<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      synchronized (writers) {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      return ret;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    }<a name="line.1587"></a>
 <span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  /**<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>   */<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  public abstract static class SinkWriter {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    /* Count of edits written to this path */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    long editsWritten = 0;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    /* Count of edits skipped to this path */<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    long editsSkipped = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    /* Number of nanos spent writing to this log */<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    long nanosSpent = 0;<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    void incrementEdits(int edits) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      editsWritten += edits;<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    void incrementSkippedEdits(int skipped) {<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      editsSkipped += skipped;<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span><a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    void incrementNanoTime(long nanos) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      nanosSpent += nanos;<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    }<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  }<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span><a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>  /**<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * data written to this output.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   */<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    final Path p;<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    final Writer w;<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      this.p = p;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      this.w = w;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>  }<a name="line.1625"></a>
+<span class="sourceLineNo">1589</span>    @Override<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    public int getNumberOfRecoveredRegions() {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      return writers.size();<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  }<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span><a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>  /**<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>   */<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>  public abstract static class SinkWriter {<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    /* Count of edits written to this path */<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    long editsWritten = 0;<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    /* Count of edits skipped to this path */<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    long editsSkipped = 0;<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    /* Number of nanos spent writing to this log */<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    long nanosSpent = 0;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span><a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    void incrementEdits(int edits) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      editsWritten += edits;<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>    void incrementSkippedEdits(int skipped) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      editsSkipped += skipped;<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span><a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    void incrementNanoTime(long nanos) {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      nanosSpent += nanos;<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span><a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>  /**<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>   * data written to this output.<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>   */<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    final Path p;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    final Writer w;<a name="line.1625"></a>
 <span class="sourceLineNo">1626</span><a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>  /**<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>   */<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    private static final String KEY_DELIMITER = "#";<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    private long waitRegionOnlineTimeOut;<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    // online encoded region name -&gt; region location map<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span><a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>    /**<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>     * Map key -&gt; value layout<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>     */<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span><a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        int numWriters) {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      super(controller, entryBuffers, numWriters);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      this.waitRegionOnlineTimeOut =<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>        entryBuffers, numWriters);<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span><a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>    @Override<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      if (entries.isEmpty()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        return;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span><a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      // check if current region in a disabling or disabled table<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        // need fall back to old way<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>        // store regions we have recovered so far<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        return;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      }<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span><a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      // group entries by region servers<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      groupEditsByServer(entries);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span><a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      // process workitems<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      String maxLocKey = null;<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      int maxSize = 0;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>            maxSize = curQueue.size();<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>            maxQueue = curQueue;<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>            maxLocKey = entry.getKey();<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>          }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        if (maxSize &lt; minBatchSize<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>          // buffer more to process<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>          return;<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        } else if (maxSize &gt; 0) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>        }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span><a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>      if (maxSize &gt; 0) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>        recoveredRegions.add(encodedRegionName);<a name="line.1721"></a>
+<span class="sourceLineNo">1627</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      this.p = p;<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      this.w = w;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>    }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>  }<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span><a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>  /**<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>   */<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    private static final String KEY_DELIMITER = "#";<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>    private long waitRegionOnlineTimeOut;<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    // online encoded region name -&gt; region location map<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span><a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>    /**<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>     * Map key -&gt; value layout<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>     */<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span><a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span><a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>        int numWriters) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      super(controller, entryBuffers, numWriters);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      this.waitRegionOnlineTimeOut =<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>        entryBuffers, numWriters);<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    @Override<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (entries.isEmpty()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        return;<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      }<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span><a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      // check if current region in a disabling or disabled table<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // need fall back to old way<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>        // store regions we have recovered so far<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        return;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span><a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      // group entries by region servers<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      groupEditsByServer(entries);<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span><a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      // process workitems<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      String maxLocKey = null;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>      int maxSize = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>            maxSize = curQueue.size();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>            maxQueue = curQueue;<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>            maxLocKey = entry.getKey();<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>          }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>        }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        if (maxSize &lt; minBatchSize<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>          // buffer more to process<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>          return;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        } else if (maxSize &gt; 0) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span><a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      if (maxSize &gt; 0) {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
 <span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
 <span class="sourceLineNo">1724</span><a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    /**<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>     * Helper function to group WALEntries to individual region servers<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>     * @throws IOException<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>     */<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      for (Entry entry : entries) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>        WALEdit edit = entry.getEdit();<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        TableName table = entry.getKey().getTablename();<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>        // clear scopes which isn't needed for recovery<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>        entry.getKey().setScopes(null);<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>        // skip edits of non-existent tables<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>          this.skippedEdits.incrementAndGet();<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>          continue;<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        }<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span><a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        boolean needSkip = false;<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        HRegionLocation loc = null;<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        String locKey = null;<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span><a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>        for (Cell cell : cells) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>          boolean isCompactionEntry = false;<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>              try {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>                  .toByteArray());<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>                row = regionName[1]; // startKey of the region<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>                isCompactionEntry = true;<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>              } catch (Exception ex) {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>                skippedCells.add(cell);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>                continue;<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>              }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>            } else {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>              skippedCells.add(cell);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>              continue;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>            }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>          try {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>            loc =<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>                  encodeRegionNameStr);<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            // skip replaying the compaction if the region is gone<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>                  + encodeRegionNameStr);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>              needSkip = true;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>            }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>          } catch (TableNotFoundException ex) {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>            // table has been deleted so skip edits of the table<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>                + encodeRegionNameStr);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>            if (nonExistentTables == null) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>            }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            nonExistentTables.add(table);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>            this.skippedEdits.incrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>            needSkip = true;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>            break;<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          }<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span><a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          cachedLastFlushedSequenceId =<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          if (cachedLastFlushedSequenceId != null<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            // skip the whole WAL entry<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            this.skippedEdits.incrementAndGet();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            needSkip = true;<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            break;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } else {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            if (maxStoreSequenceIds == null) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>              maxStoreSequenceIds =<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            }<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            if (maxStoreSequenceIds != null) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>                skippedCells.add(cell);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                continue;<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>              }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>            }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>          }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        }<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>        // skip the edit<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        if (loc == null || needSkip) continue;<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>        if (!skippedCells.isEmpty()) {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          cells.removeAll(skippedCells);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        synchronized (serverToBufferQueueMap) {<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>          if (queue == null) {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>            queue =<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>          }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>        }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        // store regions we have recovered so far<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      }<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    }<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span><a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    /**<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>     * destination region is online for replay.<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>     * @throws IOException<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>     */<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>      // fetch location from cache<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      if(loc != null) return loc;<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      if (loc == null) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>            + " of table:" + table);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      // check if current row moves to a different region due to region merge/split<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        // originalEncodedRegionName should have already flushed<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      }<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span><a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      Long lastFlushedSequenceId = -1l;<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      if (!isRecovering.get()) {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>        // been moved to somewhere before hosting RS fails<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>            + " because it's not in recovering.");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      } else {<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>        Long cachedLastFlushedSequenceId =<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span><a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        // update the value for the region<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>        RegionStoreSequenceIds ids =<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>              loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        if (ids != null) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>          }<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        }<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        if (cachedLastFlushedSequenceId == null<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>            || lastFlushedSequenceId &gt; cachedLastFlushedSequenceId) {<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>          lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), lastFlushedSequenceId);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        }<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      }<a name="line.1903"></a>
+<span class="sourceLineNo">1725</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>        recoveredRegions.add(encodedRegionName);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    }<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span><a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>    /**<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>     * Helper function to group WALEntries to individual region servers<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>     * @throws IOException<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>     */<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      for (Entry entry : entries) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        WALEdit edit = entry.getEdit();<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>        TableName table = entry.getKey().getTablename();<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        // clear scopes which isn't needed for recovery<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        entry.getKey().setScopes(null);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // skip edits of non-existent tables<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>          this.skippedEdits.incrementAndGet();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>          continue;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        boolean needSkip = false;<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        HRegionLocation loc = null;<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        String locKey = null;<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span><a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        for (Cell cell : cells) {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>          boolean isCompactionEntry = false;<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>              try {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>                  .toByteArray());<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>                row = regionName[1]; // startKey of the region<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>                isCompactionEntry = true;<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>              } catch (Exception ex) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>                skippedCells.add(cell);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>                continue;<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>              }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            } else {<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>              skippedCells.add(cell);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>              continue;<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>            }<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          }<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span><a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          try {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>            loc =<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>                  encodeRegionNameStr);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>            // skip replaying the compaction if the region is gone<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>                  + encodeRegionNameStr);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>              needSkip = true;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>            }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>          } catch (TableNotFoundException ex) {<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>            // table has been deleted so skip edits of the table<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>                + encodeRegionNameStr);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>            if (nonExistentTables == null) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>            }<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>            nonExistentTables.add(table);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>            this.skippedEdits.incrementAndGet();<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>            needSkip = true;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>            break;<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          }<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span><a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>          cachedLastFlushedSequenceId =<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>          if (cachedLastFlushedSequenceId != null<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            // skip the whole WAL entry<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>            this.skippedEdits.incrementAndGet();<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>            needSkip = true;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            break;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>          } else {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>            if (maxStoreSequenceIds == null) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>              maxStoreSequenceIds =<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>            }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            if (maxStoreSequenceIds != null) {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>                skippedCells.add(cell);<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                continue;<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              }<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>            }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>          }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        }<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>        // skip the edit<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        if (loc == null || needSkip) continue;<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span><a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (!skippedCells.isEmpty()) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          cells.removeAll(skippedCells);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>        synchronized (serverToBufferQueueMap) {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>          if (queue == null) {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            queue =<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>        }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>        // store regions we have recovered so far<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span><a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    /**<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>     * destination region is online for replay.<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>     * @throws IOException<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>     */<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      // fetch location from cache<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      if(loc != null) return loc;<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      if (loc == null) {<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>            + " of table:" + table);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      }<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      // check if current row moves to a different region due to region merge/split<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        // originalEncodedRegionName should have already flushed<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      Long lastFlushedSequenceId = -1l;<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      if (!isRecovering.get()) {<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>        // been moved to somewhere before hosting RS fails<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>            + " because it's not in recovering.");<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      } else {<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        Long cachedLastFlushedSequenceId =<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        // update the value for the region<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>        RegionStoreSequenceIds ids =<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>              loc.getRegionInfo().getEncodedName());<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>        if (ids != null) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>          }<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        }<a name="line.1903"></a>
 <span class="sourceLineNo">1904</span><a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      onlineRegions.put(loc.getRegionInfo().getEncodedName(), loc);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      return loc;<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span><a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>    private void processWorkItems(String key, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; actions)<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>        throws IOException {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>      RegionServerWriter rsw = null;<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span><a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long startTime = System.nanoTime();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      try {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        rsw = getRegionServerWriter(key);<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>        rsw.sink.replayEntries(actions);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>        // Pass along summary statistics<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        rsw.incrementEdits(actions.size());<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>        rsw.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      } catch (IOException e) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        throw e;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    /**<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>     * Wait until region is online on the destination region server<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>     * @param loc<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>     * @param row<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>     * @param timeout How long to wait<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>     * @param isRecovering Recovering state of the region interested on destination region server.<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>     * @return True when region is online on the destination region server<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>     * @throws InterruptedException<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>     */<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    private HRegionLocation waitUntilRegionOnline(HRegionLocation loc, byte[] row,<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>        final long timeout, AtomicBoolean isRecovering)<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>        throws IOException {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      final long endTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      final long pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      boolean reloadLocation = false;<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      TableName tableName = loc.getRegionInfo().getTable();<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      int tries = 0;<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      Throwable cause = null;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>      while (endTime &gt; EnvironmentEdgeManager.currentTime()) {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>        try {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          // Try and get regioninfo from the hosting server.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          HConnection hconn = getConnectionByTableName(tableName);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          if(reloadLocation) {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            loc = hconn.getRegionLocation(tableName, row, true);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          }<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          BlockingInterface remoteSvr = hconn.getAdmin(loc.getServerName());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          HRegionInfo region = loc.getRegionInfo();<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>          try {<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>            GetRegionInfoRequest request =<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>                RequestConverter.buildGetRegionInfoRequest(region.getRegionName());<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            GetRegionInfoResponse response = remoteSvr.getRegionInfo(null, request);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>            if (HRegionInfo.convert(response.getRegionInfo()) != null) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>              isRecovering.set((response.hasIsRecovering()) ? response.getIsRecovering() : true);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>              return loc;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            }<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          } catch (ServiceException se) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.1965"></a>
-<span class="sour

<TRUNCATED>

[03/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html
index 9e34f81..ef18e7e 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html
@@ -152,569 +152,570 @@
 <span class="sourceLineNo">144</span>   * @throws NoSuchFieldException<a name="line.144"></a>
 <span class="sourceLineNo">145</span>   * @throws SecurityException<a name="line.145"></a>
 <span class="sourceLineNo">146</span>   */<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @Ignore ("Nice bug flakey... expected 5 but was 4..") @Test(timeout=300000)<a name="line.147"></a>
+<span class="sourceLineNo">147</span>  @Test(timeout=300000)<a name="line.147"></a>
 <span class="sourceLineNo">148</span>  public void testActiveThreadsCount() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    try (Connection connection = ConnectionFactory.createConnection(UTIL.getConfiguration())) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      ThreadPoolExecutor executor = HTable.getDefaultExecutor(UTIL.getConfiguration());<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      try {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        try (Table t = connection.getTable(TEST_TABLE, executor)) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>          List&lt;Put&gt; puts = constructPutRequests(); // creates a Put for every region<a name="line.153"></a>
-<span class="sourceLineNo">154</span>          t.batch(puts, null);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          HashSet&lt;ServerName&gt; regionservers = new HashSet&lt;ServerName&gt;();<a name="line.155"></a>
-<span class="sourceLineNo">156</span>          try (RegionLocator locator = connection.getRegionLocator(TEST_TABLE)) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>            for (Row r : puts) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>              HRegionLocation location = locator.getRegionLocation(r.getRow());<a name="line.158"></a>
-<span class="sourceLineNo">159</span>              regionservers.add(location.getServerName());<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>          assertEquals(regionservers.size(), executor.getLargestPoolSize());<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      } finally {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        executor.shutdownNow();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  @Test(timeout=300000)<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  public void testBatchWithGet() throws Exception {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    LOG.info("test=testBatchWithGet");<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    Table table = UTIL.getConnection().getTable(TEST_TABLE);<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>    // load test data<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    List&lt;Put&gt; puts = constructPutRequests();<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    table.batch(puts, null);<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // create a list of gets and run it<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    List&lt;Row&gt; gets = new ArrayList&lt;Row&gt;();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    for (byte[] k : KEYS) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      Get get = new Get(k);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      get.addColumn(BYTES_FAMILY, QUALIFIER);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      gets.add(get);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    Result[] multiRes = new Result[gets.size()];<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    table.batch(gets, multiRes);<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    // Same gets using individual call API<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    List&lt;Result&gt; singleRes = new ArrayList&lt;Result&gt;();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    for (Row get : gets) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      singleRes.add(table.get((Get) get));<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    // Compare results<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    Assert.assertEquals(singleRes.size(), multiRes.length);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    for (int i = 0; i &lt; singleRes.size(); i++) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      Assert.assertTrue(singleRes.get(i).containsColumn(BYTES_FAMILY, QUALIFIER));<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      Cell[] singleKvs = singleRes.get(i).rawCells();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      Cell[] multiKvs = multiRes[i].rawCells();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      for (int j = 0; j &lt; singleKvs.length; j++) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        Assert.assertEquals(singleKvs[j], multiKvs[j]);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        Assert.assertEquals(0, Bytes.compareTo(CellUtil.cloneValue(singleKvs[j]),<a name="line.202"></a>
-<span class="sourceLineNo">203</span>            CellUtil.cloneValue(multiKvs[j])));<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>    table.close();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  @Test<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  public void testBadFam() throws Exception {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    LOG.info("test=testBadFam");<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    Table table = UTIL.getConnection().getTable(TEST_TABLE);<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    List&lt;Row&gt; actions = new ArrayList&lt;Row&gt;();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    Put p = new Put(Bytes.toBytes("row1"));<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    p.addColumn(Bytes.toBytes("bad_family"), Bytes.toBytes("qual"), Bytes.toBytes("value"));<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    actions.add(p);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    p = new Put(Bytes.toBytes("row2"));<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    p.addColumn(BYTES_FAMILY, Bytes.toBytes("qual"), Bytes.toBytes("value"));<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    actions.add(p);<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span>    // row1 and row2 should be in the same region.<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    Object [] r = new Object[actions.size()];<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    try {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      table.batch(actions, r);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      fail();<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    } catch (RetriesExhaustedWithDetailsException ex) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      LOG.debug(ex);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      // good!<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      assertFalse(ex.mayHaveClusterIssues());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    assertEquals(2, r.length);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    assertTrue(r[0] instanceof Throwable);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    assertTrue(r[1] instanceof Result);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    table.close();<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>  @Test (timeout=300000)<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  public void testFlushCommitsNoAbort() throws Exception {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    LOG.info("test=testFlushCommitsNoAbort");<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    doTestFlushCommits(false);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  }<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span>  /**<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * Only run one Multi test with a forced RegionServer abort. Otherwise, the<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * unit tests will take an unnecessarily long time to run.<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   *<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * @throws Exception<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  @Test (timeout=360000)<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  public void testFlushCommitsWithAbort() throws Exception {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    LOG.info("test=testFlushCommitsWithAbort");<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    doTestFlushCommits(true);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * Set table auto flush to false and test flushing commits<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * @param doAbort true if abort one regionserver in the testing<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * @throws Exception<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   */<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  private void doTestFlushCommits(boolean doAbort) throws Exception {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    // Load the data<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    LOG.info("get new table");<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    Table table = UTIL.getConnection().getTable(TEST_TABLE);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    table.setWriteBufferSize(10 * 1024 * 1024);<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>    LOG.info("constructPutRequests");<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    List&lt;Put&gt; puts = constructPutRequests();<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    table.put(puts);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    LOG.info("puts");<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    final int liveRScount = UTIL.getMiniHBaseCluster().getLiveRegionServerThreads()<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        .size();<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    assert liveRScount &gt; 0;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    JVMClusterUtil.RegionServerThread liveRS = UTIL.getMiniHBaseCluster()<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        .getLiveRegionServerThreads().get(0);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    if (doAbort) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      liveRS.getRegionServer().abort("Aborting for tests",<a name="line.278"></a>
-<span class="sourceLineNo">279</span>          new Exception("doTestFlushCommits"));<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      // If we wait for no regions being online after we abort the server, we<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      // could ensure the master has re-assigned the regions on killed server<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      // after writing successfully. It means the server we aborted is dead<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      // and detected by matser<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      while (liveRS.getRegionServer().getNumberOfOnlineRegions() != 0) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        Thread.sleep(100);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      // try putting more keys after the abort. same key/qual... just validating<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      // no exceptions thrown<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      puts = constructPutRequests();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      table.put(puts);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>    LOG.info("validating loaded data");<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    validateLoadedData(table);<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>    // Validate server and region count<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    List&lt;JVMClusterUtil.RegionServerThread&gt; liveRSs = UTIL.getMiniHBaseCluster().getLiveRegionServerThreads();<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    int count = 0;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    for (JVMClusterUtil.RegionServerThread t: liveRSs) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      count++;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      LOG.info("Count=" + count + ", Alive=" + t.getRegionServer());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    LOG.info("Count=" + count);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    Assert.assertEquals("Server count=" + count + ", abort=" + doAbort,<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        (doAbort ? (liveRScount - 1) : liveRScount), count);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    if (doAbort) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      UTIL.getMiniHBaseCluster().waitOnRegionServer(0);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      UTIL.waitFor(15 * 1000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        @Override<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        public boolean evaluate() throws Exception {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>          // Master is also a regionserver, so the count is liveRScount<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          return UTIL.getMiniHBaseCluster().getMaster()<a name="line.312"></a>
-<span class="sourceLineNo">313</span>              .getClusterStatus().getServersSize() == liveRScount;<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>      UTIL.waitFor(15 * 1000, UTIL.predicateNoRegionsInTransition());<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    table.close();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    LOG.info("done");<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>  @Test (timeout=300000)<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  public void testBatchWithPut() throws Exception {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    LOG.info("test=testBatchWithPut");<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    Table table = CONNECTION.getTable(TEST_TABLE);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    // put multiple rows using a batch<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    List&lt;Put&gt; puts = constructPutRequests();<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>    Object[] results = new Object[puts.size()];<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    table.batch(puts, results);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    validateSizeAndEmpty(results, KEYS.length);<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>    if (true) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      int liveRScount = UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().size();<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      assert liveRScount &gt; 0;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      JVMClusterUtil.RegionServerThread liveRS =<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().get(0);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      liveRS.getRegionServer().abort("Aborting for tests", new Exception("testBatchWithPut"));<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      puts = constructPutRequests();<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      try {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        results = new Object[puts.size()];<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        table.batch(puts, results);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      } catch (RetriesExhaustedWithDetailsException ree) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        LOG.info(ree.getExhaustiveDescription());<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        table.close();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        throw ree;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      validateSizeAndEmpty(results, KEYS.length);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    validateLoadedData(table);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    table.close();<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>  @Test(timeout=300000)<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  public void testBatchWithDelete() throws Exception {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    LOG.info("test=testBatchWithDelete");<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    Table table = UTIL.getConnection().getTable(TEST_TABLE);<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    // Load some data<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    List&lt;Put&gt; puts = constructPutRequests();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    Object[] results = new Object[puts.size()];<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    table.batch(puts, results);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    validateSizeAndEmpty(results, KEYS.length);<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>    // Deletes<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    List&lt;Row&gt; deletes = new ArrayList&lt;Row&gt;();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    for (int i = 0; i &lt; KEYS.length; i++) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      Delete delete = new Delete(KEYS[i]);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      delete.addFamily(BYTES_FAMILY);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      deletes.add(delete);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    results= new Object[deletes.size()];<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    table.batch(deletes, results);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    validateSizeAndEmpty(results, KEYS.length);<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>    // Get to make sure ...<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    for (byte[] k : KEYS) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      Get get = new Get(k);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      get.addColumn(BYTES_FAMILY, QUALIFIER);<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      Assert.assertFalse(table.exists(get));<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    table.close();<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>  @Test(timeout=300000)<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  public void testHTableDeleteWithList() throws Exception {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    LOG.info("test=testHTableDeleteWithList");<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    Table table = UTIL.getConnection().getTable(TEST_TABLE);<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>    // Load some data<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    List&lt;Put&gt; puts = constructPutRequests();<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    Object[] results = new Object[puts.size()];<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    table.batch(puts, results);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    validateSizeAndEmpty(results, KEYS.length);<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>    // Deletes<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    ArrayList&lt;Delete&gt; deletes = new ArrayList&lt;Delete&gt;();<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    for (int i = 0; i &lt; KEYS.length; i++) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      Delete delete = new Delete(KEYS[i]);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      delete.addFamily(BYTES_FAMILY);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      deletes.add(delete);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    }<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    table.delete(deletes);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    Assert.assertTrue(deletes.isEmpty());<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    // Get to make sure ...<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    for (byte[] k : KEYS) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      Get get = new Get(k);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      get.addColumn(BYTES_FAMILY, QUALIFIER);<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      Assert.assertFalse(table.exists(get));<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    table.close();<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>  @Test(timeout=300000)<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  public void testBatchWithManyColsInOneRowGetAndPut() throws Exception {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    LOG.info("test=testBatchWithManyColsInOneRowGetAndPut");<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    Table table = UTIL.getConnection().getTable(TEST_TABLE);<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>    List&lt;Row&gt; puts = new ArrayList&lt;Row&gt;();<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    for (int i = 0; i &lt; 100; i++) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      Put put = new Put(ONE_ROW);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      byte[] qual = Bytes.toBytes("column" + i);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      put.addColumn(BYTES_FAMILY, qual, VALUE);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      puts.add(put);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Object[] results = new Object[puts.size()];<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    table.batch(puts, results);<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>    // validate<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    validateSizeAndEmpty(results, 100);<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>    // get the data back and validate that it is correct<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    List&lt;Row&gt; gets = new ArrayList&lt;Row&gt;();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    for (int i = 0; i &lt; 100; i++) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      Get get = new Get(ONE_ROW);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      byte[] qual = Bytes.toBytes("column" + i);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      get.addColumn(BYTES_FAMILY, qual);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      gets.add(get);<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>    Object[] multiRes = new Object[gets.size()];<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    table.batch(gets, multiRes);<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span>    int idx = 0;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    for (Object r : multiRes) {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      byte[] qual = Bytes.toBytes("column" + idx);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      validateResult(r, qual, VALUE);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      idx++;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    }<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    table.close();<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(timeout=300000)<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public void testBatchWithIncrementAndAppend() throws Exception {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    LOG.info("test=testBatchWithIncrementAndAppend");<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    final byte[] QUAL1 = Bytes.toBytes("qual1");<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    final byte[] QUAL2 = Bytes.toBytes("qual2");<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    final byte[] QUAL3 = Bytes.toBytes("qual3");<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    final byte[] QUAL4 = Bytes.toBytes("qual4");<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    Table table = UTIL.getConnection().getTable(TEST_TABLE);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    Delete d = new Delete(ONE_ROW);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    table.delete(d);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    Put put = new Put(ONE_ROW);<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    put.addColumn(BYTES_FAMILY, QUAL1, Bytes.toBytes("abc"));<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    put.addColumn(BYTES_FAMILY, QUAL2, Bytes.toBytes(1L));<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    table.put(put);<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>    Increment inc = new Increment(ONE_ROW);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    inc.addColumn(BYTES_FAMILY, QUAL2, 1);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    inc.addColumn(BYTES_FAMILY, QUAL3, 1);<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span>    Append a = new Append(ONE_ROW);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    a.add(BYTES_FAMILY, QUAL1, Bytes.toBytes("def"));<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    a.add(BYTES_FAMILY, QUAL4, Bytes.toBytes("xyz"));<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    List&lt;Row&gt; actions = new ArrayList&lt;Row&gt;();<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    actions.add(inc);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    actions.add(a);<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>    Object[] multiRes = new Object[actions.size()];<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    table.batch(actions, multiRes);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    validateResult(multiRes[1], QUAL1, Bytes.toBytes("abcdef"));<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    validateResult(multiRes[1], QUAL4, Bytes.toBytes("xyz"));<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    validateResult(multiRes[0], QUAL2, Bytes.toBytes(2L));<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    validateResult(multiRes[0], QUAL3, Bytes.toBytes(1L));<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    table.close();<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  @Test(timeout=300000)<a name="line.491"></a>
-<span class="sourceLineNo">492</span>  public void testNonceCollision() throws Exception {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    LOG.info("test=testNonceCollision");<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    final Connection connection = ConnectionFactory.createConnection(UTIL.getConfiguration());<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    Table table = connection.getTable(TEST_TABLE);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    Put put = new Put(ONE_ROW);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    put.addColumn(BYTES_FAMILY, QUALIFIER, Bytes.toBytes(0L));<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>    // Replace nonce manager with the one that returns each nonce twice.<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    NonceGenerator cnm = new PerClientRandomNonceGenerator() {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      long lastNonce = -1;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      @Override<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      public synchronized long newNonce() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        long nonce = 0;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        if (lastNonce == -1) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          lastNonce = nonce = super.newNonce();<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        } else {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          nonce = lastNonce;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          lastNonce = -1L;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>        return nonce;<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      }<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    };<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>    NonceGenerator oldCnm =<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      ConnectionUtils.injectNonceGeneratorForTesting((ClusterConnection)connection, cnm);<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>    // First test sequential requests.<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    try {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      Increment inc = new Increment(ONE_ROW);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      inc.addColumn(BYTES_FAMILY, QUALIFIER, 1L);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      table.increment(inc);<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      inc = new Increment(ONE_ROW);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      inc.addColumn(BYTES_FAMILY, QUALIFIER, 1L);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      try {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>        table.increment(inc);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        fail("Should have thrown an exception");<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      } catch (OperationConflictException ex) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      Get get = new Get(ONE_ROW);<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      get.addColumn(BYTES_FAMILY, QUALIFIER);<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      Result result = table.get(get);<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      validateResult(result, QUALIFIER, Bytes.toBytes(1L));<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>      // Now run a bunch of requests in parallel, exactly half should succeed.<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      int numRequests = 40;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      final CountDownLatch startedLatch = new CountDownLatch(numRequests);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      final CountDownLatch startLatch = new CountDownLatch(1);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      final CountDownLatch doneLatch = new CountDownLatch(numRequests);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      for (int i = 0; i &lt; numRequests; ++i) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        Runnable r = new Runnable() {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>          @Override<a name="line.542"></a>
-<span class="sourceLineNo">543</span>          public void run() {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>            Table table = null;<a name="line.544"></a>
-<span class="sourceLineNo">545</span>            try {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>              table = connection.getTable(TEST_TABLE);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>            } catch (IOException e) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>              fail("Not expected");<a name="line.548"></a>
-<span class="sourceLineNo">549</span>            }<a name="line.549"></a>
-<span class="sourceLineNo">550</span>            Increment inc = new Increment(ONE_ROW);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>            inc.addColumn(BYTES_FAMILY, QUALIFIER, 1L);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>            startedLatch.countDown();<a name="line.552"></a>
-<span class="sourceLineNo">553</span>            try {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>              startLatch.await();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>            } catch (InterruptedException e) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>              fail("Not expected");<a name="line.556"></a>
-<span class="sourceLineNo">557</span>            }<a name="line.557"></a>
-<span class="sourceLineNo">558</span>            try {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>              table.increment(inc);<a name="line.559"></a>
-<span class="sourceLineNo">560</span>            } catch (OperationConflictException ex) { // Some threads are expected to fail.<a name="line.560"></a>
-<span class="sourceLineNo">561</span>            } catch (IOException ioEx) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>              fail("Not expected");<a name="line.562"></a>
-<span class="sourceLineNo">563</span>            }<a name="line.563"></a>
-<span class="sourceLineNo">564</span>            doneLatch.countDown();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>          }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>        };<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        Threads.setDaemonThreadRunning(new Thread(r));<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      }<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      startedLatch.await(); // Wait until all threads are ready...<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      startLatch.countDown(); // ...and unleash the herd!<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      doneLatch.await();<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      // Now verify<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      get = new Get(ONE_ROW);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      get.addColumn(BYTES_FAMILY, QUALIFIER);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      result = table.get(get);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      validateResult(result, QUALIFIER, Bytes.toBytes((numRequests / 2) + 1L));<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      table.close();<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    } finally {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      ConnectionImplementation.injectNonceGeneratorForTesting((ClusterConnection) connection, oldCnm);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span>  @Test(timeout=300000)<a name="line.583"></a>
-<span class="sourceLineNo">584</span>  public void testBatchWithMixedActions() throws Exception {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    LOG.info("test=testBatchWithMixedActions");<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    Table table = UTIL.getConnection().getTable(TEST_TABLE);<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>    // Load some data to start<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    List&lt;Put&gt; puts = constructPutRequests();<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    Object[] results = new Object[puts.size()];<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    table.batch(puts, results);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    validateSizeAndEmpty(results, KEYS.length);<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>    // Batch: get, get, put(new col), delete, get, get of put, get of deleted,<a name="line.594"></a>
-<span class="sourceLineNo">595</span>    // put<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    List&lt;Row&gt; actions = new ArrayList&lt;Row&gt;();<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span>    byte[] qual2 = Bytes.toBytes("qual2");<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    byte[] val2 = Bytes.toBytes("putvalue2");<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>    // 0 get<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    Get get = new Get(KEYS[10]);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    get.addColumn(BYTES_FAMILY, QUALIFIER);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    actions.add(get);<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>    // 1 get<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    get = new Get(KEYS[11]);<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    get.addColumn(BYTES_FAMILY, QUALIFIER);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    actions.add(get);<a name="line.609"></a>
-<span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span>    // 2 put of new column<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    Put put = new Put(KEYS[10]);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    put.addColumn(BYTES_FAMILY, qual2, val2);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    actions.add(put);<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>    // 3 delete<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    Delete delete = new Delete(KEYS[20]);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    delete.addFamily(BYTES_FAMILY);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    actions.add(delete);<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>    // 4 get<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    get = new Get(KEYS[30]);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    get.addColumn(BYTES_FAMILY, QUALIFIER);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    actions.add(get);<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span>    // There used to be a 'get' of a previous put here, but removed<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    // since this API really cannot guarantee order in terms of mixed<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    // get/puts.<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>    // 5 put of new column<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    put = new Put(KEYS[40]);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    put.addColumn(BYTES_FAMILY, qual2, val2);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    actions.add(put);<a name="line.633"></a>
-<span class="sourceLineNo">634</span><a name="line.634"></a>
-<span class="sourceLineNo">635</span>    results = new Object[actions.size()];<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    table.batch(actions, results);<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>    // Validation<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>    validateResult(results[0]);<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    validateResult(results[1]);<a name="line.641"></a>
-<span class="sourceLineNo">642</span>    validateEmpty(results[2]);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    validateEmpty(results[3]);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    validateResult(results[4]);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    validateEmpty(results[5]);<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>    // validate last put, externally from the batch<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    get = new Get(KEYS[40]);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    get.addColumn(BYTES_FAMILY, qual2);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    Result r = table.get(get);<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    validateResult(r, qual2, val2);<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>    table.close();<a name="line.653"></a>
-<span class="sourceLineNo">654</span>  }<a name="line.654"></a>
-<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span>  // // Helper methods ////<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>  private void validateResult(Object r) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    validateResult(r, QUALIFIER, VALUE);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  }<a name="line.660"></a>
-<span class="sourceLineNo">661</span><a name="line.661"></a>
-<span class="sourceLineNo">662</span>  private void validateResult(Object r1, byte[] qual, byte[] val) {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    Result r = (Result)r1;<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    Assert.assertTrue(r.containsColumn(BYTES_FAMILY, qual));<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    byte[] value = r.getValue(BYTES_FAMILY, qual);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    if (0 != Bytes.compareTo(val, value)) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      fail("Expected [" + Bytes.toStringBinary(val)<a name="line.667"></a>
-<span class="sourceLineNo">668</span>          + "] but got [" + Bytes.toStringBinary(value) + "]");<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 List&lt;Put&gt; constructPutRequests() {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    for (byte[] k : KEYS) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      Put put = new Put(k);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      put.addColumn(BYTES_FAMILY, QUALIFIER, VALUE);<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      puts.add(put);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    }<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    return puts;<a name="line.679"></a>
-<span class="sourceLineNo">680</span>  }<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>  private void validateLoadedData(Table table) throws IOException {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    // get the data back and validate that it is correct<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    LOG.info("Validating data on " + table);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    for (byte[] k : KEYS) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      Get get = new Get(k);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      get.addColumn(BYTES_FAMILY, QUALIFIER);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      Result r = table.get(get);<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      Assert.assertTrue(r.containsColumn(BYTES_FAMILY, QUALIFIER));<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      Assert.assertEquals(0, Bytes.compareTo(VALUE, r<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          .getValue(BYTES_FAMILY, QUALIFIER)));<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
-<span class="sourceLineNo">693</span>  }<a name="line.693"></a>
-<span class="sourceLineNo">694</span><a name="line.694"></a>
-<span class="sourceLineNo">695</span>  private void validateEmpty(Object r1) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    Result result = (Result)r1;<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    Assert.assertTrue(result != null);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    Assert.assertTrue(result.getRow() == null);<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    Assert.assertEquals(0, result.rawCells().length);<a name="line.699"></a>
-<span class="sourceLineNo">700</span>  }<a name="line.700"></a>
-<span class="sourceLineNo">701</span><a name="line.701"></a>
-<span class="sourceLineNo">702</span>  private void validateSizeAndEmpty(Object[] results, int expectedSize) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    // Validate got back the same number of Result objects, all empty<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    Assert.assertEquals(expectedSize, results.length);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    for (Object result : results) {<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      validateEmpty(result);<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    }<a name="line.707"></a>
-<span class="sourceLineNo">708</span>  }<a name="line.708"></a>
-<span class="sourceLineNo">709</span>}<a name="line.709"></a>
+<span class="sourceLineNo">149</span>    UTIL.getConfiguration().setLong("hbase.htable.threads.coresize", slaves + 1);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    try (Connection connection = ConnectionFactory.createConnection(UTIL.getConfiguration())) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      ThreadPoolExecutor executor = HTable.getDefaultExecutor(UTIL.getConfiguration());<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      try {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        try (Table t = connection.getTable(TEST_TABLE, executor)) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>          List&lt;Put&gt; puts = constructPutRequests(); // creates a Put for every region<a name="line.154"></a>
+<span class="sourceLineNo">155</span>          t.batch(puts, null);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>          HashSet&lt;ServerName&gt; regionservers = new HashSet&lt;ServerName&gt;();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>          try (RegionLocator locator = connection.getRegionLocator(TEST_TABLE)) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>            for (Row r : puts) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>              HRegionLocation location = locator.getRegionLocation(r.getRow());<a name="line.159"></a>
+<span class="sourceLineNo">160</span>              regionservers.add(location.getServerName());<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>          assertEquals(regionservers.size(), executor.getLargestPoolSize());<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        }<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      } finally {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        executor.shutdownNow();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      }<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>  @Test(timeout=300000)<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  public void testBatchWithGet() throws Exception {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    LOG.info("test=testBatchWithGet");<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    Table table = UTIL.getConnection().getTable(TEST_TABLE);<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>    // load test data<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    List&lt;Put&gt; puts = constructPutRequests();<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    table.batch(puts, null);<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>    // create a list of gets and run it<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    List&lt;Row&gt; gets = new ArrayList&lt;Row&gt;();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    for (byte[] k : KEYS) {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      Get get = new Get(k);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      get.addColumn(BYTES_FAMILY, QUALIFIER);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      gets.add(get);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    Result[] multiRes = new Result[gets.size()];<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    table.batch(gets, multiRes);<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>    // Same gets using individual call API<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    List&lt;Result&gt; singleRes = new ArrayList&lt;Result&gt;();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    for (Row get : gets) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      singleRes.add(table.get((Get) get));<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    }<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    // Compare results<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    Assert.assertEquals(singleRes.size(), multiRes.length);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    for (int i = 0; i &lt; singleRes.size(); i++) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      Assert.assertTrue(singleRes.get(i).containsColumn(BYTES_FAMILY, QUALIFIER));<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      Cell[] singleKvs = singleRes.get(i).rawCells();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      Cell[] multiKvs = multiRes[i].rawCells();<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      for (int j = 0; j &lt; singleKvs.length; j++) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        Assert.assertEquals(singleKvs[j], multiKvs[j]);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        Assert.assertEquals(0, Bytes.compareTo(CellUtil.cloneValue(singleKvs[j]),<a name="line.203"></a>
+<span class="sourceLineNo">204</span>            CellUtil.cloneValue(multiKvs[j])));<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>    table.close();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  }<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>  @Test<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  public void testBadFam() throws Exception {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    LOG.info("test=testBadFam");<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    Table table = UTIL.getConnection().getTable(TEST_TABLE);<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    List&lt;Row&gt; actions = new ArrayList&lt;Row&gt;();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    Put p = new Put(Bytes.toBytes("row1"));<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    p.addColumn(Bytes.toBytes("bad_family"), Bytes.toBytes("qual"), Bytes.toBytes("value"));<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    actions.add(p);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    p = new Put(Bytes.toBytes("row2"));<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    p.addColumn(BYTES_FAMILY, Bytes.toBytes("qual"), Bytes.toBytes("value"));<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    actions.add(p);<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>    // row1 and row2 should be in the same region.<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>    Object [] r = new Object[actions.size()];<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    try {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      table.batch(actions, r);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      fail();<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    } catch (RetriesExhaustedWithDetailsException ex) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      LOG.debug(ex);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      // good!<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      assertFalse(ex.mayHaveClusterIssues());<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    assertEquals(2, r.length);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    assertTrue(r[0] instanceof Throwable);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    assertTrue(r[1] instanceof Result);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    table.close();<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>  @Test (timeout=300000)<a name="line.240"></a>
+<span class="sourceLineNo">241</span>  public void testFlushCommitsNoAbort() throws Exception {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    LOG.info("test=testFlushCommitsNoAbort");<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    doTestFlushCommits(false);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  /**<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * Only run one Multi test with a forced RegionServer abort. Otherwise, the<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * unit tests will take an unnecessarily long time to run.<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   *<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * @throws Exception<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  @Test (timeout=360000)<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  public void testFlushCommitsWithAbort() throws Exception {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    LOG.info("test=testFlushCommitsWithAbort");<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    doTestFlushCommits(true);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * Set table auto flush to false and test flushing commits<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * @param doAbort true if abort one regionserver in the testing<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * @throws Exception<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  private void doTestFlushCommits(boolean doAbort) throws Exception {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    // Load the data<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    LOG.info("get new table");<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    Table table = UTIL.getConnection().getTable(TEST_TABLE);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    table.setWriteBufferSize(10 * 1024 * 1024);<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>    LOG.info("constructPutRequests");<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    List&lt;Put&gt; puts = constructPutRequests();<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    table.put(puts);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    LOG.info("puts");<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    final int liveRScount = UTIL.getMiniHBaseCluster().getLiveRegionServerThreads()<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        .size();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    assert liveRScount &gt; 0;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    JVMClusterUtil.RegionServerThread liveRS = UTIL.getMiniHBaseCluster()<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        .getLiveRegionServerThreads().get(0);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    if (doAbort) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      liveRS.getRegionServer().abort("Aborting for tests",<a name="line.279"></a>
+<span class="sourceLineNo">280</span>          new Exception("doTestFlushCommits"));<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      // If we wait for no regions being online after we abort the server, we<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      // could ensure the master has re-assigned the regions on killed server<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      // after writing successfully. It means the server we aborted is dead<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      // and detected by matser<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      while (liveRS.getRegionServer().getNumberOfOnlineRegions() != 0) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        Thread.sleep(100);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      // try putting more keys after the abort. same key/qual... just validating<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      // no exceptions thrown<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      puts = constructPutRequests();<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      table.put(puts);<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>    LOG.info("validating loaded data");<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    validateLoadedData(table);<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>    // Validate server and region count<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    List&lt;JVMClusterUtil.RegionServerThread&gt; liveRSs = UTIL.getMiniHBaseCluster().getLiveRegionServerThreads();<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    int count = 0;<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    for (JVMClusterUtil.RegionServerThread t: liveRSs) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      count++;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      LOG.info("Count=" + count + ", Alive=" + t.getRegionServer());<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    LOG.info("Count=" + count);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    Assert.assertEquals("Server count=" + count + ", abort=" + doAbort,<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        (doAbort ? (liveRScount - 1) : liveRScount), count);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    if (doAbort) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      UTIL.getMiniHBaseCluster().waitOnRegionServer(0);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      UTIL.waitFor(15 * 1000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        @Override<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        public boolean evaluate() throws Exception {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          // Master is also a regionserver, so the count is liveRScount<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          return UTIL.getMiniHBaseCluster().getMaster()<a name="line.313"></a>
+<span class="sourceLineNo">314</span>              .getClusterStatus().getServersSize() == liveRScount;<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>      UTIL.waitFor(15 * 1000, UTIL.predicateNoRegionsInTransition());<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>    table.close();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    LOG.info("done");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>  }<a name="line.322"></a>
+<span class="sourceLineNo">323</span><a name="line.323"></a>
+<span class="sourceLineNo">324</span>  @Test (timeout=300000)<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public void testBatchWithPut() throws Exception {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    LOG.info("test=testBatchWithPut");<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    Table table = CONNECTION.getTable(TEST_TABLE);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    // put multiple rows using a batch<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    List&lt;Put&gt; puts = constructPutRequests();<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>    Object[] results = new Object[puts.size()];<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    table.batch(puts, results);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    validateSizeAndEmpty(results, KEYS.length);<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>    if (true) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      int liveRScount = UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().size();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      assert liveRScount &gt; 0;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      JVMClusterUtil.RegionServerThread liveRS =<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().get(0);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      liveRS.getRegionServer().abort("Aborting for tests", new Exception("testBatchWithPut"));<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      puts = constructPutRequests();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      try {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        results = new Object[puts.size()];<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        table.batch(puts, results);<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      } catch (RetriesExhaustedWithDetailsException ree) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        LOG.info(ree.getExhaustiveDescription());<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        table.close();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        throw ree;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      }<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      validateSizeAndEmpty(results, KEYS.length);<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>    validateLoadedData(table);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    table.close();<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>  @Test(timeout=300000)<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  public void testBatchWithDelete() throws Exception {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    LOG.info("test=testBatchWithDelete");<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    Table table = UTIL.getConnection().getTable(TEST_TABLE);<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>    // Load some data<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    List&lt;Put&gt; puts = constructPutRequests();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    Object[] results = new Object[puts.size()];<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    table.batch(puts, results);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    validateSizeAndEmpty(results, KEYS.length);<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>    // Deletes<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    List&lt;Row&gt; deletes = new ArrayList&lt;Row&gt;();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    for (int i = 0; i &lt; KEYS.length; i++) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      Delete delete = new Delete(KEYS[i]);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      delete.addFamily(BYTES_FAMILY);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      deletes.add(delete);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    results= new Object[deletes.size()];<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    table.batch(deletes, results);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    validateSizeAndEmpty(results, KEYS.length);<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>    // Get to make sure ...<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    for (byte[] k : KEYS) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      Get get = new Get(k);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      get.addColumn(BYTES_FAMILY, QUALIFIER);<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      Assert.assertFalse(table.exists(get));<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    table.close();<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>  @Test(timeout=300000)<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  public void testHTableDeleteWithList() throws Exception {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    LOG.info("test=testHTableDeleteWithList");<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    Table table = UTIL.getConnection().getTable(TEST_TABLE);<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>    // Load some data<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    List&lt;Put&gt; puts = constructPutRequests();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    Object[] results = new Object[puts.size()];<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    table.batch(puts, results);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    validateSizeAndEmpty(results, KEYS.length);<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>    // Deletes<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    ArrayList&lt;Delete&gt; deletes = new ArrayList&lt;Delete&gt;();<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    for (int i = 0; i &lt; KEYS.length; i++) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      Delete delete = new Delete(KEYS[i]);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      delete.addFamily(BYTES_FAMILY);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      deletes.add(delete);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    table.delete(deletes);<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    Assert.assertTrue(deletes.isEmpty());<a name="line.407"></a>
+<span class="sourceLineNo">408</span><a name="line.408"></a>
+<span class="sourceLineNo">409</span>    // Get to make sure ...<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    for (byte[] k : KEYS) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      Get get = new Get(k);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      get.addColumn(BYTES_FAMILY, QUALIFIER);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      Assert.assertFalse(table.exists(get));<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    table.close();<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  }<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>  @Test(timeout=300000)<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  public void testBatchWithManyColsInOneRowGetAndPut() throws Exception {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    LOG.info("test=testBatchWithManyColsInOneRowGetAndPut");<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    Table table = UTIL.getConnection().getTable(TEST_TABLE);<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>    List&lt;Row&gt; puts = new ArrayList&lt;Row&gt;();<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    for (int i = 0; i &lt; 100; i++) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      Put put = new Put(ONE_ROW);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      byte[] qual = Bytes.toBytes("column" + i);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      put.addColumn(BYTES_FAMILY, qual, VALUE);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      puts.add(put);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    Object[] results = new Object[puts.size()];<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    table.batch(puts, results);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    // validate<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    validateSizeAndEmpty(results, 100);<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // get the data back and validate that it is correct<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    List&lt;Row&gt; gets = new ArrayList&lt;Row&gt;();<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    for (int i = 0; i &lt; 100; i++) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      Get get = new Get(ONE_ROW);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      byte[] qual = Bytes.toBytes("column" + i);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      get.addColumn(BYTES_FAMILY, qual);<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      gets.add(get);<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>    Object[] multiRes = new Object[gets.size()];<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    table.batch(gets, multiRes);<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>    int idx = 0;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    for (Object r : multiRes) {<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      byte[] qual = Bytes.toBytes("column" + idx);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      validateResult(r, qual, VALUE);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      idx++;<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    }<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    table.close();<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  }<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span>  @Test(timeout=300000)<a name="line.457"></a>
+<span class="sourceLineNo">458</span>  public void testBatchWithIncrementAndAppend() throws Exception {<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    LOG.info("test=testBatchWithIncrementAndAppend");<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    final byte[] QUAL1 = Bytes.toBytes("qual1");<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    final byte[] QUAL2 = Bytes.toBytes("qual2");<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    final byte[] QUAL3 = Bytes.toBytes("qual3");<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    final byte[] QUAL4 = Bytes.toBytes("qual4");<a name="line.463"></a>
+<span class="sourceLineNo">464</span>    Table table = UTIL.getConnection().getTable(TEST_TABLE);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>    Delete d = new Delete(ONE_ROW);<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    table.delete(d);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>    Put put = new Put(ONE_ROW);<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    put.addColumn(BYTES_FAMILY, QUAL1, Bytes.toBytes("abc"));<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    put.addColumn(BYTES_FAMILY, QUAL2, Bytes.toBytes(1L));<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    table.put(put);<a name="line.470"></a>
+<span class="sourceLineNo">471</span><a name="line.471"></a>
+<span class="sourceLineNo">472</span>    Increment inc = new Increment(ONE_ROW);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    inc.addColumn(BYTES_FAMILY, QUAL2, 1);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    inc.addColumn(BYTES_FAMILY, QUAL3, 1);<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>    Append a = new Append(ONE_ROW);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    a.add(BYTES_FAMILY, QUAL1, Bytes.toBytes("def"));<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    a.add(BYTES_FAMILY, QUAL4, Bytes.toBytes("xyz"));<a name="line.478"></a>
+<span class="sourceLineNo">479</span>    List&lt;Row&gt; actions = new ArrayList&lt;Row&gt;();<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    actions.add(inc);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    actions.add(a);<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>    Object[] multiRes = new Object[actions.size()];<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    table.batch(actions, multiRes);<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    validateResult(multiRes[1], QUAL1, Bytes.toBytes("abcdef"));<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    validateResult(multiRes[1], QUAL4, Bytes.toBytes("xyz"));<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    validateResult(multiRes[0], QUAL2, Bytes.toBytes(2L));<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    validateResult(multiRes[0], QUAL3, Bytes.toBytes(1L));<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    table.close();<a name="line.489"></a>
+<span class="sourceLineNo">490</span>  }<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>  @Test(timeout=300000)<a name="line.492"></a>
+<span class="sourceLineNo">493</span>  public void testNonceCollision() throws Exception {<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    LOG.info("test=testNonceCollision");<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    final Connection connection = ConnectionFactory.createConnection(UTIL.getConfiguration());<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    Table table = connection.getTable(TEST_TABLE);<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    Put put = new Put(ONE_ROW);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    put.addColumn(BYTES_FAMILY, QUALIFIER, Bytes.toBytes(0L));<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>    // Replace nonce manager with the one that returns each nonce twice.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    NonceGenerator cnm = new PerClientRandomNonceGenerator() {<a name="line.501"></a>
+<span class="sourceLineNo">502</span>      long lastNonce = -1;<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      @Override<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      public synchronized long newNonce() {<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        long nonce = 0;<a name="line.505"></a>
+<span class="sourceLineNo">506</span>        if (lastNonce == -1) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>          lastNonce = nonce = super.newNonce();<a name="line.507"></a>
+<span class="sourceLineNo">508</span>        } else {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>          nonce = lastNonce;<a name="line.509"></a>
+<span class="sourceLineNo">510</span>          lastNonce = -1L;<a name="line.510"></a>
+<span class="sourceLineNo">511</span>        }<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        return nonce;<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      }<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    };<a name="line.514"></a>
+<span class="sourceLineNo">515</span><a name="line.515"></a>
+<span class="sourceLineNo">516

<TRUNCATED>

[35/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html
index 01efa15..c1dbf37 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html
@@ -106,326 +106,330 @@
 <span class="sourceLineNo">098</span>    currentScannerCallable.setClose();<a name="line.98"></a>
 <span class="sourceLineNo">099</span>  }<a name="line.99"></a>
 <span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  public void setCaching(int caching) {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    currentScannerCallable.setCaching(caching);<a name="line.102"></a>
+<span class="sourceLineNo">101</span>  public void setRenew(boolean val) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    currentScannerCallable.setRenew(val);<a name="line.102"></a>
 <span class="sourceLineNo">103</span>  }<a name="line.103"></a>
 <span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public int getCaching() {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    return currentScannerCallable.getCaching();<a name="line.106"></a>
+<span class="sourceLineNo">105</span>  public void setCaching(int caching) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    currentScannerCallable.setCaching(caching);<a name="line.106"></a>
 <span class="sourceLineNo">107</span>  }<a name="line.107"></a>
 <span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  public HRegionInfo getHRegionInfo() {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    return currentScannerCallable.getHRegionInfo();<a name="line.110"></a>
+<span class="sourceLineNo">109</span>  public int getCaching() {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    return currentScannerCallable.getCaching();<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>  public boolean getServerHasMoreResults() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    return currentScannerCallable.getServerHasMoreResults();<a name="line.114"></a>
+<span class="sourceLineNo">113</span>  public HRegionInfo getHRegionInfo() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    return currentScannerCallable.getHRegionInfo();<a name="line.114"></a>
 <span class="sourceLineNo">115</span>  }<a name="line.115"></a>
 <span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  public void setServerHasMoreResults(boolean serverHasMoreResults) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    currentScannerCallable.setServerHasMoreResults(serverHasMoreResults);<a name="line.118"></a>
+<span class="sourceLineNo">117</span>  public boolean getServerHasMoreResults() {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return currentScannerCallable.getServerHasMoreResults();<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>  public boolean hasMoreResultsContext() {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    return currentScannerCallable.hasMoreResultsContext();<a name="line.122"></a>
+<span class="sourceLineNo">121</span>  public void setServerHasMoreResults(boolean serverHasMoreResults) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    currentScannerCallable.setServerHasMoreResults(serverHasMoreResults);<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>  public void setHasMoreResultsContext(boolean serverHasMoreResultsContext) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    currentScannerCallable.setHasMoreResultsContext(serverHasMoreResultsContext);<a name="line.126"></a>
+<span class="sourceLineNo">125</span>  public boolean hasMoreResultsContext() {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    return currentScannerCallable.hasMoreResultsContext();<a name="line.126"></a>
 <span class="sourceLineNo">127</span>  }<a name="line.127"></a>
 <span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  @Override<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  public Result [] call(int timeout) throws IOException {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    // If the active replica callable was closed somewhere, invoke the RPC to<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    // really close it. In the case of regular scanners, this applies. We make couple<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    // of RPCs to a RegionServer, and when that region is exhausted, we set<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    // the closed flag. Then an RPC is required to actually close the scanner.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    if (currentScannerCallable != null &amp;&amp; currentScannerCallable.closed) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      // For closing we target that exact scanner (and not do replica fallback like in<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      // the case of normal reads)<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      if (LOG.isTraceEnabled()) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        LOG.trace("Closing scanner id=" + currentScannerCallable.scannerId);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      Result[] r = currentScannerCallable.call(timeout);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      currentScannerCallable = null;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      return r;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    }<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // We need to do the following:<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    //1. When a scan goes out to a certain replica (default or not), we need to<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    //   continue to hit that until there is a failure. So store the last successfully invoked<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    //   replica<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    //2. We should close the "losing" scanners (scanners other than the ones we hear back<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    //   from first)<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    //<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    RegionLocations rl = RpcRetryingCallerWithReadReplicas.getRegionLocations(true,<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        RegionReplicaUtil.DEFAULT_REPLICA_ID, cConnection, tableName,<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        currentScannerCallable.getRow());<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>    // allocate a boundedcompletion pool of some multiple of number of replicas.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    // We want to accomodate some RPCs for redundant replica scans (but are still in progress)<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    ResultBoundedCompletionService&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; cs =<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        new ResultBoundedCompletionService&lt;Pair&lt;Result[], ScannerCallable&gt;&gt;(<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            RpcRetryingCallerFactory.instantiate(ScannerCallableWithReplicas.this.conf), pool,<a name="line.160"></a>
-<span class="sourceLineNo">161</span>            rl.size() * 5);<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>    AtomicBoolean done = new AtomicBoolean(false);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    replicaSwitched.set(false);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    // submit call for the primary replica.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    addCallsForCurrentReplica(cs, rl);<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    try {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      // wait for the timeout to see whether the primary responds back<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      Future&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; f = cs.poll(timeBeforeReplicas,<a name="line.170"></a>
-<span class="sourceLineNo">171</span>          TimeUnit.MICROSECONDS); // Yes, microseconds<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      if (f != null) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        Pair&lt;Result[], ScannerCallable&gt; r = f.get(timeout, TimeUnit.MILLISECONDS);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        if (r != null &amp;&amp; r.getSecond() != null) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>          updateCurrentlyServingReplica(r.getSecond(), r.getFirst(), done, pool);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>        }<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        return r == null ? null : r.getFirst(); //great we got a response<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      }<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    } catch (ExecutionException e) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      RpcRetryingCallerWithReadReplicas.throwEnrichedException(e, retries);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    } catch (CancellationException e) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      throw new InterruptedIOException(e.getMessage());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    } catch (InterruptedException e) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      throw new InterruptedIOException(e.getMessage());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    } catch (TimeoutException e) {<a name="line.185"></a>
+<span class="sourceLineNo">129</span>  public void setHasMoreResultsContext(boolean serverHasMoreResultsContext) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    currentScannerCallable.setHasMoreResultsContext(serverHasMoreResultsContext);<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>  @Override<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  public Result [] call(int timeout) throws IOException {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // If the active replica callable was closed somewhere, invoke the RPC to<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    // really close it. In the case of regular scanners, this applies. We make couple<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    // of RPCs to a RegionServer, and when that region is exhausted, we set<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    // the closed flag. Then an RPC is required to actually close the scanner.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    if (currentScannerCallable != null &amp;&amp; currentScannerCallable.closed) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      // For closing we target that exact scanner (and not do replica fallback like in<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      // the case of normal reads)<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      if (LOG.isTraceEnabled()) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        LOG.trace("Closing scanner id=" + currentScannerCallable.scannerId);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      }<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      Result[] r = currentScannerCallable.call(timeout);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      currentScannerCallable = null;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      return r;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    // We need to do the following:<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    //1. When a scan goes out to a certain replica (default or not), we need to<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    //   continue to hit that until there is a failure. So store the last successfully invoked<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    //   replica<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    //2. We should close the "losing" scanners (scanners other than the ones we hear back<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    //   from first)<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    //<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    RegionLocations rl = RpcRetryingCallerWithReadReplicas.getRegionLocations(true,<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        RegionReplicaUtil.DEFAULT_REPLICA_ID, cConnection, tableName,<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        currentScannerCallable.getRow());<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    // allocate a boundedcompletion pool of some multiple of number of replicas.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    // We want to accomodate some RPCs for redundant replica scans (but are still in progress)<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    ResultBoundedCompletionService&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; cs =<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        new ResultBoundedCompletionService&lt;Pair&lt;Result[], ScannerCallable&gt;&gt;(<a name="line.163"></a>
+<span class="sourceLineNo">164</span>            RpcRetryingCallerFactory.instantiate(ScannerCallableWithReplicas.this.conf), pool,<a name="line.164"></a>
+<span class="sourceLineNo">165</span>            rl.size() * 5);<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>    AtomicBoolean done = new AtomicBoolean(false);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    replicaSwitched.set(false);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    // submit call for the primary replica.<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    addCallsForCurrentReplica(cs, rl);<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>    try {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      // wait for the timeout to see whether the primary responds back<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      Future&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; f = cs.poll(timeBeforeReplicas,<a name="line.174"></a>
+<span class="sourceLineNo">175</span>          TimeUnit.MICROSECONDS); // Yes, microseconds<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      if (f != null) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        Pair&lt;Result[], ScannerCallable&gt; r = f.get(timeout, TimeUnit.MILLISECONDS);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        if (r != null &amp;&amp; r.getSecond() != null) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          updateCurrentlyServingReplica(r.getSecond(), r.getFirst(), done, pool);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        return r == null ? null : r.getFirst(); //great we got a response<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    } catch (ExecutionException e) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      RpcRetryingCallerWithReadReplicas.throwEnrichedException(e, retries);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    } catch (CancellationException e) {<a name="line.185"></a>
 <span class="sourceLineNo">186</span>      throw new InterruptedIOException(e.getMessage());<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    // submit call for the all of the secondaries at once<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    // TODO: this may be an overkill for large region replication<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    addCallsForOtherReplicas(cs, rl, 0, rl.size() - 1);<a name="line.191"></a>
+<span class="sourceLineNo">187</span>    } catch (InterruptedException e) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      throw new InterruptedIOException(e.getMessage());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    } catch (TimeoutException e) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      throw new InterruptedIOException(e.getMessage());<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>    try {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      Future&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; f = cs.poll(timeout, TimeUnit.MILLISECONDS);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      if (f != null) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        Pair&lt;Result[], ScannerCallable&gt; r = f.get(timeout, TimeUnit.MILLISECONDS);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        if (r != null &amp;&amp; r.getSecond() != null) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>          updateCurrentlyServingReplica(r.getSecond(), r.getFirst(), done, pool);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>        return r == null ? null : r.getFirst(); // great we got an answer<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    } catch (ExecutionException e) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      RpcRetryingCallerWithReadReplicas.throwEnrichedException(e, retries);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    } catch (CancellationException e) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      throw new InterruptedIOException(e.getMessage());<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    } catch (InterruptedException e) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      throw new InterruptedIOException(e.getMessage());<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    } catch (TimeoutException e) {<a name="line.208"></a>
+<span class="sourceLineNo">193</span>    // submit call for the all of the secondaries at once<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    // TODO: this may be an overkill for large region replication<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    addCallsForOtherReplicas(cs, rl, 0, rl.size() - 1);<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>    try {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      Future&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; f = cs.poll(timeout, TimeUnit.MILLISECONDS);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      if (f != null) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        Pair&lt;Result[], ScannerCallable&gt; r = f.get(timeout, TimeUnit.MILLISECONDS);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        if (r != null &amp;&amp; r.getSecond() != null) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          updateCurrentlyServingReplica(r.getSecond(), r.getFirst(), done, pool);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        return r == null ? null : r.getFirst(); // great we got an answer<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    } catch (ExecutionException e) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      RpcRetryingCallerWithReadReplicas.throwEnrichedException(e, retries);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    } catch (CancellationException e) {<a name="line.208"></a>
 <span class="sourceLineNo">209</span>      throw new InterruptedIOException(e.getMessage());<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    } finally {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      // We get there because we were interrupted or because one or more of the<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      // calls succeeded or failed. In all case, we stop all our tasks.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      cs.cancelAll();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    return null; // unreachable<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  private void updateCurrentlyServingReplica(ScannerCallable scanner, Result[] result,<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      AtomicBoolean done, ExecutorService pool) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    if (done.compareAndSet(false, true)) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      if (currentScannerCallable != scanner) replicaSwitched.set(true);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      currentScannerCallable = scanner;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      // store where to start the replica scanner from if we need to.<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      if (result != null &amp;&amp; result.length != 0) this.lastResult = result[result.length - 1];<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      if (LOG.isTraceEnabled()) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        LOG.trace("Setting current scanner as id=" + currentScannerCallable.scannerId +<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            " associated with replica=" + currentScannerCallable.getHRegionInfo().getReplicaId());<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      // close all outstanding replica scanners but the one we heard back from<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      outstandingCallables.remove(scanner);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      for (ScannerCallable s : outstandingCallables) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        if (LOG.isTraceEnabled()) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          LOG.trace("Closing scanner id=" + s.scannerId +<a name="line.233"></a>
-<span class="sourceLineNo">234</span>            ", replica=" + s.getHRegionInfo().getRegionId() +<a name="line.234"></a>
-<span class="sourceLineNo">235</span>            " because slow and replica=" +<a name="line.235"></a>
-<span class="sourceLineNo">236</span>            this.currentScannerCallable.getHRegionInfo().getReplicaId() + " succeeded");<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        // Submit the "close" to the pool since this might take time, and we don't<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        // want to wait for the "close" to happen yet. The "wait" will happen when<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        // the table is closed (when the awaitTermination of the underlying pool is called)<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        s.setClose();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        final RetryingRPC r = new RetryingRPC(s);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        pool.submit(new Callable&lt;Void&gt;(){<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          @Override<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          public Void call() throws Exception {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>            r.call(scannerTimeout);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>            return null;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        });<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      // now clear outstandingCallables since we scheduled a close for all the contained scanners<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      outstandingCallables.clear();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>  /**<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * When a scanner switches in the middle of scanning (the 'next' call fails<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * for example), the upper layer {@link ClientScanner} needs to know<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * @return<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  public boolean switchedToADifferentReplica() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    return replicaSwitched.get();<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>  /**<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * @return true when the most recent RPC response indicated that the response was a heartbeat<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   *         message. Heartbeat messages are sent back from the server when the processing of the<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   *         scan request exceeds a certain time threshold. Heartbeats allow the server to avoid<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   *         timeouts during long running scan operations.<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  public boolean isHeartbeatMessage() {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return currentScannerCallable != null &amp;&amp; currentScannerCallable.isHeartbeatMessage();<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  private void addCallsForCurrentReplica(<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      ResultBoundedCompletionService&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; cs, RegionLocations rl) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    RetryingRPC retryingOnReplica = new RetryingRPC(currentScannerCallable);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    outstandingCallables.add(currentScannerCallable);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    cs.submit(retryingOnReplica, scannerTimeout, currentScannerCallable.id);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span>  private void addCallsForOtherReplicas(<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      ResultBoundedCompletionService&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; cs, RegionLocations rl,<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      int min, int max) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    if (scan.getConsistency() == Consistency.STRONG) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      return; // not scheduling on other replicas for strong consistency<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    for (int id = min; id &lt;= max; id++) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      if (currentScannerCallable.id == id) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        continue; //this was already scheduled earlier<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      }<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      ScannerCallable s = currentScannerCallable.getScannerCallableForReplica(id);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      setStartRowForReplicaCallable(s);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      outstandingCallables.add(s);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      RetryingRPC retryingOnReplica = new RetryingRPC(s);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      cs.submit(retryingOnReplica, scannerTimeout, id);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  }<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span>  /**<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * Set the start row for the replica callable based on the state of the last result received.<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * @param callable The callable to set the start row on<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  private void setStartRowForReplicaCallable(ScannerCallable callable) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    if (this.lastResult == null || callable == null) return;<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>    if (this.lastResult.isPartial()) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      // The last result was a partial result which means we have not received all of the cells<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      // for this row. Thus, use the last result's row as the start row. If a replica switch<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      // occurs, the scanner will ensure that any accumulated partial results are cleared,<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      // and the scan can resume from this row.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      callable.getScan().setStartRow(this.lastResult.getRow());<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    } else {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      // The last result was not a partial result which means it contained all of the cells for<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      // that row (we no longer need any information from it). Set the start row to the next<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      // closest row that could be seen.<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      if (callable.getScan().isReversed()) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        callable.getScan().setStartRow(createClosestRowBefore(this.lastResult.getRow()));<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        callable.getScan().setStartRow(Bytes.add(this.lastResult.getRow(), new byte[1]));<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  @VisibleForTesting<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  boolean isAnyRPCcancelled() {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return someRPCcancelled;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  class RetryingRPC implements RetryingCallable&lt;Pair&lt;Result[], ScannerCallable&gt;&gt;, Cancellable {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    final ScannerCallable callable;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    RpcRetryingCaller&lt;Result[]&gt; caller;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    private volatile boolean cancelled = false;<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>    RetryingRPC(ScannerCallable callable) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.callable = callable;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      // For the Consistency.STRONG (default case), we reuse the caller<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      // to keep compatibility with what is done in the past<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      // For the Consistency.TIMELINE case, we can't reuse the caller<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      // since we could be making parallel RPCs (caller.callWithRetries is synchronized<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      // and we can't invoke it multiple times at the same time)<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.caller = ScannerCallableWithReplicas.this.caller;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      if (scan.getConsistency() == Consistency.TIMELINE) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        this.caller = RpcRetryingCallerFactory.instantiate(ScannerCallableWithReplicas.this.conf)<a name="line.344"></a>
-<span class="sourceLineNo">345</span>            .&lt;Result[]&gt;newCaller();<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public Pair&lt;Result[], ScannerCallable&gt; call(int callTimeout) throws IOException {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      // since the retries is done within the ResultBoundedCompletionService,<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // we don't invoke callWithRetries here<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      if (cancelled) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        return null;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      Result[] res = this.caller.callWithoutRetries(this.callable, callTimeout);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      return new Pair&lt;Result[], ScannerCallable&gt;(res, this.callable);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    @Override<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    public void prepare(boolean reload) throws IOException {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      if (cancelled) return;<a name="line.362"></a>
+<span class="sourceLineNo">210</span>    } catch (InterruptedException e) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      throw new InterruptedIOException(e.getMessage());<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    } catch (TimeoutException e) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      throw new InterruptedIOException(e.getMessage());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    } finally {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      // We get there because we were interrupted or because one or more of the<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      // calls succeeded or failed. In all case, we stop all our tasks.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      cs.cancelAll();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    return null; // unreachable<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  private void updateCurrentlyServingReplica(ScannerCallable scanner, Result[] result,<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      AtomicBoolean done, ExecutorService pool) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    if (done.compareAndSet(false, true)) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      if (currentScannerCallable != scanner) replicaSwitched.set(true);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      currentScannerCallable = scanner;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      // store where to start the replica scanner from if we need to.<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      if (result != null &amp;&amp; result.length != 0) this.lastResult = result[result.length - 1];<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      if (LOG.isTraceEnabled()) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        LOG.trace("Setting current scanner as id=" + currentScannerCallable.scannerId +<a name="line.230"></a>
+<span class="sourceLineNo">231</span>            " associated with replica=" + currentScannerCallable.getHRegionInfo().getReplicaId());<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      // close all outstanding replica scanners but the one we heard back from<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      outstandingCallables.remove(scanner);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      for (ScannerCallable s : outstandingCallables) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        if (LOG.isTraceEnabled()) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          LOG.trace("Closing scanner id=" + s.scannerId +<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            ", replica=" + s.getHRegionInfo().getRegionId() +<a name="line.238"></a>
+<span class="sourceLineNo">239</span>            " because slow and replica=" +<a name="line.239"></a>
+<span class="sourceLineNo">240</span>            this.currentScannerCallable.getHRegionInfo().getReplicaId() + " succeeded");<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        }<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        // Submit the "close" to the pool since this might take time, and we don't<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        // want to wait for the "close" to happen yet. The "wait" will happen when<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        // the table is closed (when the awaitTermination of the underlying pool is called)<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        s.setClose();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        final RetryingRPC r = new RetryingRPC(s);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        pool.submit(new Callable&lt;Void&gt;(){<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          @Override<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          public Void call() throws Exception {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>            r.call(scannerTimeout);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>            return null;<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>      }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      // now clear outstandingCallables since we scheduled a close for all the contained scanners<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      outstandingCallables.clear();<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  }<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>  /**<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * When a scanner switches in the middle of scanning (the 'next' call fails<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   * for example), the upper layer {@link ClientScanner} needs to know<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * @return<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   */<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  public boolean switchedToADifferentReplica() {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    return replicaSwitched.get();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * @return true when the most recent RPC response indicated that the response was a heartbeat<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   *         message. Heartbeat messages are sent back from the server when the processing of the<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   *         scan request exceeds a certain time threshold. Heartbeats allow the server to avoid<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   *         timeouts during long running scan operations.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   */<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  public boolean isHeartbeatMessage() {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    return currentScannerCallable != null &amp;&amp; currentScannerCallable.isHeartbeatMessage();<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>  private void addCallsForCurrentReplica(<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      ResultBoundedCompletionService&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; cs, RegionLocations rl) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    RetryingRPC retryingOnReplica = new RetryingRPC(currentScannerCallable);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    outstandingCallables.add(currentScannerCallable);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    cs.submit(retryingOnReplica, scannerTimeout, currentScannerCallable.id);<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>  private void addCallsForOtherReplicas(<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      ResultBoundedCompletionService&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; cs, RegionLocations rl,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      int min, int max) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    if (scan.getConsistency() == Consistency.STRONG) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      return; // not scheduling on other replicas for strong consistency<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    for (int id = min; id &lt;= max; id++) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      if (currentScannerCallable.id == id) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>        continue; //this was already scheduled earlier<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      }<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      ScannerCallable s = currentScannerCallable.getScannerCallableForReplica(id);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      setStartRowForReplicaCallable(s);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      outstandingCallables.add(s);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      RetryingRPC retryingOnReplica = new RetryingRPC(s);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      cs.submit(retryingOnReplica, scannerTimeout, id);<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>  /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   * Set the start row for the replica callable based on the state of the last result received.<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * @param callable The callable to set the start row on<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   */<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  private void setStartRowForReplicaCallable(ScannerCallable callable) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    if (this.lastResult == null || callable == null) return;<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>    if (this.lastResult.isPartial()) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      // The last result was a partial result which means we have not received all of the cells<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      // for this row. Thus, use the last result's row as the start row. If a replica switch<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      // occurs, the scanner will ensure that any accumulated partial results are cleared,<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      // and the scan can resume from this row.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      callable.getScan().setStartRow(this.lastResult.getRow());<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    } else {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      // The last result was not a partial result which means it contained all of the cells for<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      // that row (we no longer need any information from it). Set the start row to the next<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      // closest row that could be seen.<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      if (callable.getScan().isReversed()) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        callable.getScan().setStartRow(createClosestRowBefore(this.lastResult.getRow()));<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      } else {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        callable.getScan().setStartRow(Bytes.add(this.lastResult.getRow(), new byte[1]));<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  @VisibleForTesting<a name="line.329"></a>
+<span class="sourceLineNo">330</span>  boolean isAnyRPCcancelled() {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    return someRPCcancelled;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  }<a name="line.332"></a>
+<span class="sourceLineNo">333</span><a name="line.333"></a>
+<span class="sourceLineNo">334</span>  class RetryingRPC implements RetryingCallable&lt;Pair&lt;Result[], ScannerCallable&gt;&gt;, Cancellable {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    final ScannerCallable callable;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    RpcRetryingCaller&lt;Result[]&gt; caller;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    private volatile boolean cancelled = false;<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    RetryingRPC(ScannerCallable callable) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.callable = callable;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      // For the Consistency.STRONG (default case), we reuse the caller<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      // to keep compatibility with what is done in the past<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      // For the Consistency.TIMELINE case, we can't reuse the caller<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      // since we could be making parallel RPCs (caller.callWithRetries is synchronized<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      // and we can't invoke it multiple times at the same time)<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      this.caller = ScannerCallableWithReplicas.this.caller;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      if (scan.getConsistency() == Consistency.TIMELINE) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        this.caller = RpcRetryingCallerFactory.instantiate(ScannerCallableWithReplicas.this.conf)<a name="line.348"></a>
+<span class="sourceLineNo">349</span>            .&lt;Result[]&gt;newCaller();<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>    @Override<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    public Pair&lt;Result[], ScannerCallable&gt; call(int callTimeout) throws IOException {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // since the retries is done within the ResultBoundedCompletionService,<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      // we don't invoke callWithRetries here<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (cancelled) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        return null;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      Result[] res = this.caller.callWithoutRetries(this.callable, callTimeout);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      return new Pair&lt;Result[], ScannerCallable&gt;(res, this.callable);<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>      if (Thread.interrupted()) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        throw new InterruptedIOException();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      }<a name="line.366"></a>
+<span class="sourceLineNo">364</span>    @Override<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    public void prepare(boolean reload) throws IOException {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      if (cancelled) return;<a name="line.366"></a>
 <span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>      callable.prepare(reload);<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 void throwable(Throwable t, boolean retrying) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      callable.throwable(t, retrying);<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 getExceptionMessageAdditionalDetail() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      return callable.getExceptionMessageAdditionalDetail();<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 long sleep(long pause, int tries) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      return callable.sleep(pause, tries);<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 cancel() {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      cancelled = true;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      caller.cancel();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      if (callable.getController() != null) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        callable.getController().startCancel();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      someRPCcancelled = true;<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>    @Override<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    public boolean isCancelled() {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      return cancelled;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>  @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public void prepare(boolean reload) throws IOException {<a name="line.403"></a>
+<span class="sourceLineNo">368</span>      if (Thread.interrupted()) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        throw new InterruptedIOException();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>      callable.prepare(reload);<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 void throwable(Throwable t, boolean retrying) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      callable.throwable(t, retrying);<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 getExceptionMessageAdditionalDetail() {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      return callable.getExceptionMessageAdditionalDetail();<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 long sleep(long pause, int tries) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      return callable.sleep(pause, tries);<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 void cancel() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      cancelled = true;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      caller.cancel();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      if (callable.getController() != null) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        callable.getController().startCancel();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      }<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      someRPCcancelled = true;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>    @Override<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    public boolean isCancelled() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return cancelled;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
 <span class="sourceLineNo">404</span>  }<a name="line.404"></a>
 <span class="sourceLineNo">405</span><a name="line.405"></a>
 <span class="sourceLineNo">406</span>  @Override<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  public void throwable(Throwable t, boolean retrying) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    currentScannerCallable.throwable(t, retrying);<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 String getExceptionMessageAdditionalDetail() {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    return currentScannerCallable.getExceptionMessageAdditionalDetail();<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 long sleep(long pause, int tries) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    return currentScannerCallable.sleep(pause, tries);<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">407</span>  public void prepare(boolean reload) throws IOException {<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 throwable(Throwable t, boolean retrying) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    currentScannerCallable.throwable(t, retrying);<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>  @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  public String getExceptionMessageAdditionalDetail() {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    return currentScannerCallable.getExceptionMessageAdditionalDetail();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>  @Override<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  public long sleep(long pause, int tries) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    return currentScannerCallable.sleep(pause, tries);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  }<a name="line.423"></a>
+<span class="sourceLineNo">424</span>}<a name="line.424"></a>
 
 
 


[02/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html
index a543158..a2329b6 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html
@@ -57,80 +57,90 @@
 <span class="sourceLineNo">049</span>import org.apache.commons.logging.LogFactory;<a name="line.49"></a>
 <span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.HConstants;<a name="line.50"></a>
 <span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>/**<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * Tests for the region server status page and its template.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>@Category({RegionServerTests.class, SmallTests.class})<a name="line.56"></a>
-<span class="sourceLineNo">057</span>public class TestRSStatusServlet {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private static final Log LOG = LogFactory.getLog(TestRSStatusServlet.class);<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private HRegionServer rs;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  private RSRpcServices rpcServices;<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  static final int FAKE_IPC_PORT = 1585;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  static final int FAKE_WEB_PORT = 1586;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private final ServerName fakeServerName =<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      ServerName.valueOf("localhost", FAKE_IPC_PORT, 11111);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private final GetServerInfoResponse fakeResponse =<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    ResponseConverter.buildGetServerInfoResponse(fakeServerName, FAKE_WEB_PORT);<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private final ServerName fakeMasterAddress =<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      ServerName.valueOf("localhost", 60010, 1212121212);<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  @Before<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  public void setupBasicMocks() throws IOException, ServiceException {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    rs = Mockito.mock(HRegionServer.class);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    rpcServices = Mockito.mock(RSRpcServices.class);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    Mockito.doReturn(HBaseConfiguration.create())<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      .when(rs).getConfiguration();<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    Mockito.doReturn(rpcServices).when(rs).getRSRpcServices();<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    Mockito.doReturn(fakeResponse).when(rpcServices).getServerInfo(<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      (RpcController)Mockito.any(), (GetServerInfoRequest)Mockito.any());<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    // Fake ZKW<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    ZooKeeperWatcher zkw = Mockito.mock(ZooKeeperWatcher.class);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    Mockito.doReturn("fakequorum").when(zkw).getQuorum();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    Mockito.doReturn(zkw).when(rs).getZooKeeper();<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>    // Fake CacheConfig<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    LOG.warn("The " + HConstants.HFILE_BLOCK_CACHE_SIZE_KEY + " is set to 0");<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    CacheConfig cacheConf = Mockito.mock(CacheConfig.class);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    Mockito.doReturn(null).when(cacheConf).getBlockCache();<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    Mockito.doReturn(cacheConf).when(rs).getCacheConfig();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    <a name="line.92"></a>
-<span class="sourceLineNo">093</span>    // Fake MasterAddressTracker<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    MasterAddressTracker mat = Mockito.mock(MasterAddressTracker.class);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    Mockito.doReturn(fakeMasterAddress).when(mat).getMasterAddress();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    Mockito.doReturn(mat).when(rs).getMasterAddressTracker();<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>    MetricsRegionServer rms = Mockito.mock(MetricsRegionServer.class);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    Mockito.doReturn(new MetricsRegionServerWrapperStub()).when(rms).getRegionServerWrapper();<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    Mockito.doReturn(rms).when(rs).getRegionServerMetrics();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  <a name="line.102"></a>
-<span class="sourceLineNo">103</span>  @Test<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  public void testBasic() throws IOException, ServiceException {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    new RSStatusTmpl().render(new StringWriter(), rs);<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 testWithRegions() throws IOException, ServiceException {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    HTableDescriptor htd = new HTableDescriptor(TableName.valueOf("mytable"));<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    List&lt;HRegionInfo&gt; regions = Lists.newArrayList(<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        new HRegionInfo(htd.getTableName(), Bytes.toBytes("a"), Bytes.toBytes("d")),<a name="line.112"></a>
-<span class="sourceLineNo">113</span>        new HRegionInfo(htd.getTableName(), Bytes.toBytes("d"), Bytes.toBytes("z"))<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        );<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    Mockito.doReturn(ResponseConverter.buildGetOnlineRegionResponse(<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      regions)).when(rpcServices).getOnlineRegion((RpcController)Mockito.any(),<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        (GetOnlineRegionRequest)Mockito.any());<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    <a name="line.118"></a>
-<span class="sourceLineNo">119</span>    new RSStatusTmpl().render(new StringWriter(), rs);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  <a name="line.121"></a>
-<span class="sourceLineNo">122</span>  <a name="line.122"></a>
-<span class="sourceLineNo">123</span><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">052</span>import org.apache.hadoop.hbase.ipc.MetricsHBaseServer;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapperStub;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>/**<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * Tests for the region server status page and its template.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>@Category({RegionServerTests.class, SmallTests.class})<a name="line.59"></a>
+<span class="sourceLineNo">060</span>public class TestRSStatusServlet {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private static final Log LOG = LogFactory.getLog(TestRSStatusServlet.class);<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private HRegionServer rs;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private RSRpcServices rpcServices;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private RpcServerInterface rpcServer;<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  static final int FAKE_IPC_PORT = 1585;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  static final int FAKE_WEB_PORT = 1586;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private final ServerName fakeServerName =<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      ServerName.valueOf("localhost", FAKE_IPC_PORT, 11111);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private final GetServerInfoResponse fakeResponse =<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    ResponseConverter.buildGetServerInfoResponse(fakeServerName, FAKE_WEB_PORT);<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private final ServerName fakeMasterAddress =<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      ServerName.valueOf("localhost", 60010, 1212121212);<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  @Before<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public void setupBasicMocks() throws IOException, ServiceException {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    rs = Mockito.mock(HRegionServer.class);<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    rpcServices = Mockito.mock(RSRpcServices.class);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    rpcServer = Mockito.mock(RpcServerInterface.class);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    Mockito.doReturn(HBaseConfiguration.create())<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      .when(rs).getConfiguration();<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    Mockito.doReturn(rpcServices).when(rs).getRSRpcServices();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    Mockito.doReturn(rpcServer).when(rs).getRpcServer();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    Mockito.doReturn(fakeResponse).when(rpcServices).getServerInfo(<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      (RpcController)Mockito.any(), (GetServerInfoRequest)Mockito.any());<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    // Fake ZKW<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    ZooKeeperWatcher zkw = Mockito.mock(ZooKeeperWatcher.class);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    Mockito.doReturn("fakequorum").when(zkw).getQuorum();<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    Mockito.doReturn(zkw).when(rs).getZooKeeper();<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>    // Fake CacheConfig<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    LOG.warn("The " + HConstants.HFILE_BLOCK_CACHE_SIZE_KEY + " is set to 0");<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    CacheConfig cacheConf = Mockito.mock(CacheConfig.class);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    Mockito.doReturn(null).when(cacheConf).getBlockCache();<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    Mockito.doReturn(cacheConf).when(rs).getCacheConfig();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    <a name="line.98"></a>
+<span class="sourceLineNo">099</span>    // Fake MasterAddressTracker<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    MasterAddressTracker mat = Mockito.mock(MasterAddressTracker.class);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    Mockito.doReturn(fakeMasterAddress).when(mat).getMasterAddress();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    Mockito.doReturn(mat).when(rs).getMasterAddressTracker();<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>    MetricsRegionServer rms = Mockito.mock(MetricsRegionServer.class);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    Mockito.doReturn(new MetricsRegionServerWrapperStub()).when(rms).getRegionServerWrapper();<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    Mockito.doReturn(rms).when(rs).getRegionServerMetrics();<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>    MetricsHBaseServer ms = Mockito.mock(MetricsHBaseServer.class);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    Mockito.doReturn(new MetricsHBaseServerWrapperStub()).when(ms).getHBaseServerWrapper();<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    Mockito.doReturn(ms).when(rpcServer).getMetrics();<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>  @Test<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public void testBasic() throws IOException, ServiceException {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    new RSStatusTmpl().render(new StringWriter(), rs);<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>  @Test<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  public void testWithRegions() throws IOException, ServiceException {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    HTableDescriptor htd = new HTableDescriptor(TableName.valueOf("mytable"));<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    List&lt;HRegionInfo&gt; regions = Lists.newArrayList(<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        new HRegionInfo(htd.getTableName(), Bytes.toBytes("a"), Bytes.toBytes("d")),<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        new HRegionInfo(htd.getTableName(), Bytes.toBytes("d"), Bytes.toBytes("z"))<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        );<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    Mockito.doReturn(ResponseConverter.buildGetOnlineRegionResponse(<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      regions)).when(rpcServices).getOnlineRegion((RpcController)Mockito.any(),<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        (GetOnlineRegionRequest)Mockito.any());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    <a name="line.128"></a>
+<span class="sourceLineNo">129</span>    new RSStatusTmpl().render(new StringWriter(), rs);<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><a name="line.133"></a>
+<span class="sourceLineNo">134</span>}<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSinkManager.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSinkManager.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSinkManager.html
index 3758183..7973ce0 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSinkManager.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSinkManager.html
@@ -75,7 +75,7 @@
 <span class="sourceLineNo">067</span><a name="line.67"></a>
 <span class="sourceLineNo">068</span>    sinkManager.chooseSinks();<a name="line.68"></a>
 <span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>    assertEquals(2, sinkManager.getSinks().size());<a name="line.70"></a>
+<span class="sourceLineNo">070</span>    assertEquals(2, sinkManager.getNumSinks());<a name="line.70"></a>
 <span class="sourceLineNo">071</span><a name="line.71"></a>
 <span class="sourceLineNo">072</span>  }<a name="line.72"></a>
 <span class="sourceLineNo">073</span><a name="line.73"></a>
@@ -89,7 +89,7 @@
 <span class="sourceLineNo">081</span><a name="line.81"></a>
 <span class="sourceLineNo">082</span>    sinkManager.chooseSinks();<a name="line.82"></a>
 <span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>    assertEquals(1, sinkManager.getSinks().size());<a name="line.84"></a>
+<span class="sourceLineNo">084</span>    assertEquals(1, sinkManager.getNumSinks());<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>  @Test<a name="line.87"></a>
@@ -101,14 +101,14 @@
 <span class="sourceLineNo">093</span><a name="line.93"></a>
 <span class="sourceLineNo">094</span>    sinkManager.chooseSinks();<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    // Sanity check<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    assertEquals(1, sinkManager.getSinks().size());<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    assertEquals(1, sinkManager.getNumSinks());<a name="line.96"></a>
 <span class="sourceLineNo">097</span><a name="line.97"></a>
 <span class="sourceLineNo">098</span>    SinkPeer sinkPeer = new SinkPeer(serverNameA, mock(AdminService.BlockingInterface.class));<a name="line.98"></a>
 <span class="sourceLineNo">099</span><a name="line.99"></a>
 <span class="sourceLineNo">100</span>    sinkManager.reportBadSink(sinkPeer);<a name="line.100"></a>
 <span class="sourceLineNo">101</span><a name="line.101"></a>
 <span class="sourceLineNo">102</span>    // Just reporting a bad sink once shouldn't have an effect<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    assertEquals(1, sinkManager.getSinks().size());<a name="line.103"></a>
+<span class="sourceLineNo">103</span>    assertEquals(1, sinkManager.getNumSinks());<a name="line.103"></a>
 <span class="sourceLineNo">104</span><a name="line.104"></a>
 <span class="sourceLineNo">105</span>  }<a name="line.105"></a>
 <span class="sourceLineNo">106</span><a name="line.106"></a>
@@ -128,9 +128,9 @@
 <span class="sourceLineNo">120</span><a name="line.120"></a>
 <span class="sourceLineNo">121</span>    sinkManager.chooseSinks();<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    // Sanity check<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    assertEquals(3, sinkManager.getSinks().size());<a name="line.123"></a>
+<span class="sourceLineNo">123</span>    assertEquals(3, sinkManager.getNumSinks());<a name="line.123"></a>
 <span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>    ServerName serverName = sinkManager.getSinks().get(0);<a name="line.125"></a>
+<span class="sourceLineNo">125</span>    ServerName serverName = sinkManager.getSinksForTesting().get(0);<a name="line.125"></a>
 <span class="sourceLineNo">126</span><a name="line.126"></a>
 <span class="sourceLineNo">127</span>    SinkPeer sinkPeer = new SinkPeer(serverName, mock(AdminService.BlockingInterface.class));<a name="line.127"></a>
 <span class="sourceLineNo">128</span><a name="line.128"></a>
@@ -141,12 +141,12 @@
 <span class="sourceLineNo">133</span><a name="line.133"></a>
 <span class="sourceLineNo">134</span>    // Reporting a bad sink more than the threshold count should remove it<a name="line.134"></a>
 <span class="sourceLineNo">135</span>    // from the list of potential sinks<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    assertEquals(2, sinkManager.getSinks().size());<a name="line.136"></a>
+<span class="sourceLineNo">136</span>    assertEquals(2, sinkManager.getNumSinks());<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>    // now try a sink that has some successes<a name="line.139"></a>
 <span class="sourceLineNo">140</span>    //<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    serverName = sinkManager.getSinks().get(0);<a name="line.141"></a>
+<span class="sourceLineNo">141</span>    serverName = sinkManager.getSinksForTesting().get(0);<a name="line.141"></a>
 <span class="sourceLineNo">142</span><a name="line.142"></a>
 <span class="sourceLineNo">143</span>    sinkPeer = new SinkPeer(serverName, mock(AdminService.BlockingInterface.class));<a name="line.143"></a>
 <span class="sourceLineNo">144</span>    for (int i = 0; i &lt;= ReplicationSinkManager.DEFAULT_BAD_SINK_THRESHOLD-1; i++) {<a name="line.144"></a>
@@ -156,17 +156,17 @@
 <span class="sourceLineNo">148</span>    sinkManager.reportBadSink(sinkPeer);<a name="line.148"></a>
 <span class="sourceLineNo">149</span><a name="line.149"></a>
 <span class="sourceLineNo">150</span>    // did not remove the sink, since we had one successful try<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    assertEquals(2, sinkManager.getSinks().size());<a name="line.151"></a>
+<span class="sourceLineNo">151</span>    assertEquals(2, sinkManager.getNumSinks());<a name="line.151"></a>
 <span class="sourceLineNo">152</span><a name="line.152"></a>
 <span class="sourceLineNo">153</span>    for (int i = 0; i &lt;= ReplicationSinkManager.DEFAULT_BAD_SINK_THRESHOLD-2; i++) {<a name="line.153"></a>
 <span class="sourceLineNo">154</span>      sinkManager.reportBadSink(sinkPeer);<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></a>
 <span class="sourceLineNo">156</span>    // still not remove, since the success reset the counter<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    assertEquals(2, sinkManager.getSinks().size());<a name="line.157"></a>
+<span class="sourceLineNo">157</span>    assertEquals(2, sinkManager.getNumSinks());<a name="line.157"></a>
 <span class="sourceLineNo">158</span><a name="line.158"></a>
 <span class="sourceLineNo">159</span>    sinkManager.reportBadSink(sinkPeer);<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    // but we exhausted the tries<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    assertEquals(1, sinkManager.getSinks().size());<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    assertEquals(1, sinkManager.getNumSinks());<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>  @Test<a name="line.164"></a>
@@ -182,7 +182,7 @@
 <span class="sourceLineNo">174</span>    sinkManager.chooseSinks();<a name="line.174"></a>
 <span class="sourceLineNo">175</span>    // Sanity check<a name="line.175"></a>
 <span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>    List&lt;ServerName&gt; sinkList = sinkManager.getSinks();<a name="line.177"></a>
+<span class="sourceLineNo">177</span>    List&lt;ServerName&gt; sinkList = sinkManager.getSinksForTesting();<a name="line.177"></a>
 <span class="sourceLineNo">178</span>    assertEquals(2, sinkList.size());<a name="line.178"></a>
 <span class="sourceLineNo">179</span><a name="line.179"></a>
 <span class="sourceLineNo">180</span>    ServerName serverNameA = sinkList.get(0);<a name="line.180"></a>
@@ -198,7 +198,7 @@
 <span class="sourceLineNo">190</span><a name="line.190"></a>
 <span class="sourceLineNo">191</span>    // We've gone down to 0 good sinks, so the replication sinks<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    // should have been refreshed now<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    assertEquals(2, sinkManager.getSinks().size());<a name="line.193"></a>
+<span class="sourceLineNo">193</span>    assertEquals(2, sinkManager.getNumSinks());<a name="line.193"></a>
 <span class="sourceLineNo">194</span>  }<a name="line.194"></a>
 <span class="sourceLineNo">195</span><a name="line.195"></a>
 <span class="sourceLineNo">196</span>}<a name="line.196"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html
deleted file mode 100644
index ca376fc..0000000
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html
+++ /dev/null
@@ -1,233 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
-<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with this<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * work for additional information regarding copyright ownership. The ASF<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * licenses this file to you under the Apache License, Version 2.0 (the<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * "License"); you may not use this file except in compliance with the License.<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * You may obtain a copy of the License at<a name="line.7"></a>
-<span class="sourceLineNo">008</span> *<a name="line.8"></a>
-<span class="sourceLineNo">009</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *<a name="line.10"></a>
-<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
-<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * License for the specific language governing permissions and limitations<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * under the License.<a name="line.15"></a>
-<span class="sourceLineNo">016</span> */<a name="line.16"></a>
-<span class="sourceLineNo">017</span><a name="line.17"></a>
-<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.util;<a name="line.18"></a>
-<span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.junit.Assert.assertFalse;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.junit.Assert.assertTrue;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Random;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.27"></a>
-<span class="sourceLineNo">028</span><a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.testclassification.MiscTests;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.junit.Before;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.junit.Test;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.junit.experimental.categories.Category;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>@Category({ MiscTests.class, SmallTests.class })<a name="line.35"></a>
-<span class="sourceLineNo">036</span>public class TestBoundedConcurrentLinkedQueue {<a name="line.36"></a>
-<span class="sourceLineNo">037</span>  private final static int CAPACITY = 16;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>  private BoundedConcurrentLinkedQueue&lt;Long&gt; queue;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>  @Before<a name="line.41"></a>
-<span class="sourceLineNo">042</span>  public void setUp() throws Exception {<a name="line.42"></a>
-<span class="sourceLineNo">043</span>    this.queue = new BoundedConcurrentLinkedQueue&lt;Long&gt;(CAPACITY);<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  }<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>  @Test<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  public void testOfferAndPoll() throws Exception {<a name="line.47"></a>
-<span class="sourceLineNo">048</span>    // Offer<a name="line.48"></a>
-<span class="sourceLineNo">049</span>    for (long i = 1; i &lt;= CAPACITY; ++i) {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>      assertTrue(queue.offer(i));<a name="line.50"></a>
-<span class="sourceLineNo">051</span>      assertEquals(i, queue.size());<a name="line.51"></a>
-<span class="sourceLineNo">052</span>      assertEquals(CAPACITY - i, queue.remainingCapacity());<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    }<a name="line.53"></a>
-<span class="sourceLineNo">054</span>    assertFalse(queue.offer(0L));<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>    // Poll<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    for (int i = 1; i &lt;= CAPACITY; ++i) {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>      long l = queue.poll();<a name="line.58"></a>
-<span class="sourceLineNo">059</span>      assertEquals(i, l);<a name="line.59"></a>
-<span class="sourceLineNo">060</span>      assertEquals(CAPACITY - i, queue.size());<a name="line.60"></a>
-<span class="sourceLineNo">061</span>      assertEquals(i, queue.remainingCapacity());<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    }<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    assertEquals(null, queue.poll());<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  }<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  @Test<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  public void testDrain() throws Exception {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    // Offer<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    for (long i = 1; i &lt;= CAPACITY; ++i) {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      assertTrue(queue.offer(i));<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      assertEquals(i, queue.size());<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      assertEquals(CAPACITY - i, queue.remainingCapacity());<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    }<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    assertFalse(queue.offer(0L));<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>    // Drain<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    List&lt;Long&gt; list = new ArrayList&lt;Long&gt;();<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    queue.drainTo(list);<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    assertEquals(null, queue.poll());<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    assertEquals(0, queue.size());<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    assertEquals(CAPACITY, queue.remainingCapacity());<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  @Test<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public void testClear() {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    // Offer<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    for (long i = 1; i &lt;= CAPACITY; ++i) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      assertTrue(queue.offer(i));<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      assertEquals(i, queue.size());<a name="line.89"></a>
-<span class="sourceLineNo">090</span>      assertEquals(CAPACITY - i, queue.remainingCapacity());<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    }<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    assertFalse(queue.offer(0L));<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>    queue.clear();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    assertEquals(null, queue.poll());<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    assertEquals(0, queue.size());<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    assertEquals(CAPACITY, queue.remainingCapacity());<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>  @Test<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  public void testMultiThread() throws InterruptedException {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    int offerThreadCount = 10;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    int pollThreadCount = 5;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    int duration = 5000; // ms<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    final AtomicBoolean stop = new AtomicBoolean(false);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    Thread[] offerThreads = new Thread[offerThreadCount];<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    for (int i = 0; i &lt; offerThreadCount; i++) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      offerThreads[i] = new Thread("offer-thread-" + i) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>        @Override<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        public void run() {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>          Random rand = new Random();<a name="line.112"></a>
-<span class="sourceLineNo">113</span>          while (!stop.get()) {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>            queue.offer(rand.nextLong());<a name="line.114"></a>
-<span class="sourceLineNo">115</span>            try {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>              Thread.sleep(1);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>            } catch (InterruptedException e) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>            }<a name="line.118"></a>
-<span class="sourceLineNo">119</span>          }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        }<a name="line.120"></a>
-<span class="sourceLineNo">121</span><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>    Thread[] pollThreads = new Thread[pollThreadCount];<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    for (int i = 0; i &lt; pollThreadCount; i++) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      pollThreads[i] = new Thread("poll-thread-" + i) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>        @Override<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        public void run() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>          while (!stop.get()) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>            queue.poll();<a name="line.131"></a>
-<span class="sourceLineNo">132</span>            try {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>              Thread.sleep(1);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>            } catch (InterruptedException e) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>            }<a name="line.135"></a>
-<span class="sourceLineNo">136</span>          }<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        }<a name="line.137"></a>
-<span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>      };<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    for (Thread t : offerThreads) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      t.start();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    for (Thread t : pollThreads) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      t.start();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    long startTime = System.currentTimeMillis();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    while (System.currentTimeMillis() - startTime &lt; duration) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      assertTrue(queue.size() &lt;= CAPACITY);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      Thread.yield();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    stop.set(true);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    for (Thread t : offerThreads) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      t.join();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    for (Thread t : pollThreads) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      t.join();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    assertTrue(queue.size() &lt;= CAPACITY);<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>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/xref-test/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/xref-test/allclasses-frame.html b/xref-test/allclasses-frame.html
index 7f456de..c592c4e 100644
--- a/xref-test/allclasses-frame.html
+++ b/xref-test/allclasses-frame.html
@@ -2349,9 +2349,6 @@
 				<a href="org/apache/hadoop/hbase/io/TestBoundedByteBufferPool.html" target="classFrame">TestBoundedByteBufferPool</a>
 			</li>
 						<li>
-				<a href="org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" target="classFrame">TestBoundedConcurrentLinkedQueue</a>
-			</li>
-						<li>
 				<a href="org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" target="classFrame">TestBoundedPriorityBlockingQueue</a>
 			</li>
 						<li>
@@ -3300,6 +3297,9 @@
 				<a href="org/apache/hadoop/hbase/io/hfile/TestLazyDataBlockDecompression.html" target="classFrame">TestLazyDataBlockDecompression</a>
 			</li>
 						<li>
+				<a href="org/apache/hadoop/hbase/client/TestLeaseRenewal.html" target="classFrame">TestLeaseRenewal</a>
+			</li>
+						<li>
 				<a href="org/apache/hadoop/hbase/io/encoding/TestLoadAndSwitchEncodeOnDisk.html" target="classFrame">TestLoadAndSwitchEncodeOnDisk</a>
 			</li>
 						<li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/xref-test/org/apache/hadoop/hbase/client/TestFromClientSide3.html
----------------------------------------------------------------------
diff --git a/xref-test/org/apache/hadoop/hbase/client/TestFromClientSide3.html b/xref-test/org/apache/hadoop/hbase/client/TestFromClientSide3.html
index 33a8085..4ce616d 100644
--- a/xref-test/org/apache/hadoop/hbase/client/TestFromClientSide3.html
+++ b/xref-test/org/apache/hadoop/hbase/client/TestFromClientSide3.html
@@ -486,32 +486,7 @@
 <a class="jxr_linenumber" name="476" href="#476">476</a>     assertTrue(Arrays.equals(res.getValue(FAMILY, COL_QUAL), VAL_BYTES));
 <a class="jxr_linenumber" name="477" href="#477">477</a>     table.close();
 <a class="jxr_linenumber" name="478" href="#478">478</a>   }
-<a class="jxr_linenumber" name="479" href="#479">479</a> 
-<a class="jxr_linenumber" name="480" href="#480">480</a>   @Test
-<a class="jxr_linenumber" name="481" href="#481">481</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testLeaseRenewal() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="482" href="#482">482</a>     Table table = TEST_UTIL.createTable(
-<a class="jxr_linenumber" name="483" href="#483">483</a>       TableName.valueOf(<span class="jxr_string">"testLeaseRenewal"</span>), FAMILY);
-<a class="jxr_linenumber" name="484" href="#484">484</a>     Put p = <strong class="jxr_keyword">new</strong> Put(ROW_BYTES);
-<a class="jxr_linenumber" name="485" href="#485">485</a>     p.addColumn(FAMILY, COL_QUAL, VAL_BYTES);
-<a class="jxr_linenumber" name="486" href="#486">486</a>     table.put(p);
-<a class="jxr_linenumber" name="487" href="#487">487</a>     p = <strong class="jxr_keyword">new</strong> Put(ANOTHERROW);
-<a class="jxr_linenumber" name="488" href="#488">488</a>     p.addColumn(FAMILY, COL_QUAL, VAL_BYTES);
-<a class="jxr_linenumber" name="489" href="#489">489</a>     table.put(p);
-<a class="jxr_linenumber" name="490" href="#490">490</a>     Scan s = <strong class="jxr_keyword">new</strong> Scan();
-<a class="jxr_linenumber" name="491" href="#491">491</a>     s.setCaching(1);
-<a class="jxr_linenumber" name="492" href="#492">492</a>     ResultScanner rs = table.getScanner(s);
-<a class="jxr_linenumber" name="493" href="#493">493</a>     <em class="jxr_comment">// make sure that calling renewLease does not impact the scan results</em>
-<a class="jxr_linenumber" name="494" href="#494">494</a>     assertTrue(rs.renewLease());
-<a class="jxr_linenumber" name="495" href="#495">495</a>     assertTrue(Arrays.equals(rs.next().getRow(), ANOTHERROW));
-<a class="jxr_linenumber" name="496" href="#496">496</a>     assertTrue(rs.renewLease());
-<a class="jxr_linenumber" name="497" href="#497">497</a>     assertTrue(Arrays.equals(rs.next().getRow(), ROW_BYTES));
-<a class="jxr_linenumber" name="498" href="#498">498</a>     assertTrue(rs.renewLease());
-<a class="jxr_linenumber" name="499" href="#499">499</a>     assertNull(rs.next());
-<a class="jxr_linenumber" name="500" href="#500">500</a>     assertFalse(rs.renewLease());
-<a class="jxr_linenumber" name="501" href="#501">501</a>     rs.close();
-<a class="jxr_linenumber" name="502" href="#502">502</a>     table.close();
-<a class="jxr_linenumber" name="503" href="#503">503</a>   }
-<a class="jxr_linenumber" name="504" href="#504">504</a> }
+<a class="jxr_linenumber" name="479" href="#479">479</a> }
 </pre>
 <hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
 </html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/xref-test/org/apache/hadoop/hbase/client/TestLeaseRenewal.html
----------------------------------------------------------------------
diff --git a/xref-test/org/apache/hadoop/hbase/client/TestLeaseRenewal.html b/xref-test/org/apache/hadoop/hbase/client/TestLeaseRenewal.html
new file mode 100644
index 0000000..79afa54
--- /dev/null
+++ b/xref-test/org/apache/hadoop/hbase/client/TestLeaseRenewal.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+<title>TestLeaseRenewal xref</title>
+<link type="text/css" rel="stylesheet" href="../../../../../stylesheet.css" />
+</head>
+<body>
+<div id="overview"><a href="../../../../../../testdevapidocs/org/apache/hadoop/hbase/client/TestLeaseRenewal.html">View Javadoc</a></div><pre>
+
+<a class="jxr_linenumber" name="1" href="#1">1</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="2" href="#2">2</a>   <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="3" href="#3">3</a>   <em class="jxr_javadoccomment"> * Licensed to the Apache Software Foundation (ASF) under one</em>
+<a class="jxr_linenumber" name="4" href="#4">4</a>   <em class="jxr_javadoccomment"> * or more contributor license agreements.  See the NOTICE file</em>
+<a class="jxr_linenumber" name="5" href="#5">5</a>   <em class="jxr_javadoccomment"> * distributed with this work for additional information</em>
+<a class="jxr_linenumber" name="6" href="#6">6</a>   <em class="jxr_javadoccomment"> * regarding copyright ownership.  The ASF licenses this file</em>
+<a class="jxr_linenumber" name="7" href="#7">7</a>   <em class="jxr_javadoccomment"> * to you under the Apache License, Version 2.0 (the</em>
+<a class="jxr_linenumber" name="8" href="#8">8</a>   <em class="jxr_javadoccomment"> * "License"); you may not use this file except in compliance</em>
+<a class="jxr_linenumber" name="9" href="#9">9</a>   <em class="jxr_javadoccomment"> * with the License.  You may obtain a copy of the License at</em>
+<a class="jxr_linenumber" name="10" href="#10">10</a>  <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="11" href="#11">11</a>  <em class="jxr_javadoccomment"> *     <a href="http://www.apache.org/licenses/LICENSE-2.0" target="alexandria_uri">http://www.apache.org/licenses/LICENSE-2.0</a></em>
+<a class="jxr_linenumber" name="12" href="#12">12</a>  <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="13" href="#13">13</a>  <em class="jxr_javadoccomment"> * Unless required by applicable law or agreed to in writing, software</em>
+<a class="jxr_linenumber" name="14" href="#14">14</a>  <em class="jxr_javadoccomment"> * distributed under the License is distributed on an "AS IS" BASIS,</em>
+<a class="jxr_linenumber" name="15" href="#15">15</a>  <em class="jxr_javadoccomment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</em>
+<a class="jxr_linenumber" name="16" href="#16">16</a>  <em class="jxr_javadoccomment"> * See the License for the specific language governing permissions and</em>
+<a class="jxr_linenumber" name="17" href="#17">17</a>  <em class="jxr_javadoccomment"> * limitations under the License.</em>
+<a class="jxr_linenumber" name="18" href="#18">18</a>  <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="19" href="#19">19</a>  <strong class="jxr_keyword">package</strong> org.apache.hadoop.hbase.client;
+<a class="jxr_linenumber" name="20" href="#20">20</a>  
+<a class="jxr_linenumber" name="21" href="#21">21</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.assertFalse;
+<a class="jxr_linenumber" name="22" href="#22">22</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.assertNull;
+<a class="jxr_linenumber" name="23" href="#23">23</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.assertTrue;
+<a class="jxr_linenumber" name="24" href="#24">24</a>  
+<a class="jxr_linenumber" name="25" href="#25">25</a>  <strong class="jxr_keyword">import</strong> java.util.Arrays;
+<a class="jxr_linenumber" name="26" href="#26">26</a>  
+<a class="jxr_linenumber" name="27" href="#27">27</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.Log;
+<a class="jxr_linenumber" name="28" href="#28">28</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.LogFactory;
+<a class="jxr_linenumber" name="29" href="#29">29</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HBaseTestingUtility;
+<a class="jxr_linenumber" name="30" href="#30">30</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HConstants;
+<a class="jxr_linenumber" name="31" href="#31">31</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HTableDescriptor;
+<a class="jxr_linenumber" name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.TableName;
+<a class="jxr_linenumber" name="33" href="#33">33</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.testclassification.LargeTests;
+<a class="jxr_linenumber" name="34" href="#34">34</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.Bytes;
+<a class="jxr_linenumber" name="35" href="#35">35</a>  <strong class="jxr_keyword">import</strong> org.junit.After;
+<a class="jxr_linenumber" name="36" href="#36">36</a>  <strong class="jxr_keyword">import</strong> org.junit.AfterClass;
+<a class="jxr_linenumber" name="37" href="#37">37</a>  <strong class="jxr_keyword">import</strong> org.junit.Before;
+<a class="jxr_linenumber" name="38" href="#38">38</a>  <strong class="jxr_keyword">import</strong> org.junit.BeforeClass;
+<a class="jxr_linenumber" name="39" href="#39">39</a>  <strong class="jxr_keyword">import</strong> org.junit.Test;
+<a class="jxr_linenumber" name="40" href="#40">40</a>  <strong class="jxr_keyword">import</strong> org.junit.experimental.categories.Category;
+<a class="jxr_linenumber" name="41" href="#41">41</a>  
+<a class="jxr_linenumber" name="42" href="#42">42</a>  @Category(LargeTests.<strong class="jxr_keyword">class</strong>)
+<a class="jxr_linenumber" name="43" href="#43">43</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html">TestLeaseRenewal</a> {
+<a class="jxr_linenumber" name="44" href="#44">44</a>    <strong class="jxr_keyword">final</strong> Log LOG = LogFactory.getLog(getClass());
+<a class="jxr_linenumber" name="45" href="#45">45</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a> TEST_UTIL = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a>();
+<a class="jxr_linenumber" name="46" href="#46">46</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> byte[] FAMILY = Bytes.toBytes(<span class="jxr_string">"testFamily"</span>);
+<a class="jxr_linenumber" name="47" href="#47">47</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> byte[] ANOTHERROW = Bytes.toBytes(<span class="jxr_string">"anotherrow"</span>);
+<a class="jxr_linenumber" name="48" href="#48">48</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> byte[] COL_QUAL = Bytes.toBytes(<span class="jxr_string">"f1"</span>);
+<a class="jxr_linenumber" name="49" href="#49">49</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> byte[] VAL_BYTES = Bytes.toBytes(<span class="jxr_string">"v1"</span>);
+<a class="jxr_linenumber" name="50" href="#50">50</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> byte[] ROW_BYTES = Bytes.toBytes(<span class="jxr_string">"r1"</span>);
+<a class="jxr_linenumber" name="51" href="#51">51</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">int</strong> leaseTimeout =
+<a class="jxr_linenumber" name="52" href="#52">52</a>        HConstants.DEFAULT_HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD / 4;
+<a class="jxr_linenumber" name="53" href="#53">53</a>  
+<a class="jxr_linenumber" name="54" href="#54">54</a>    <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="55" href="#55">55</a>  <em class="jxr_javadoccomment">   * @throws java.lang.Exception</em>
+<a class="jxr_linenumber" name="56" href="#56">56</a>  <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="57" href="#57">57</a>    @BeforeClass
+<a class="jxr_linenumber" name="58" href="#58">58</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> setUpBeforeClass() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="59" href="#59">59</a>      TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD,
+<a class="jxr_linenumber" name="60" href="#60">60</a>        leaseTimeout);
+<a class="jxr_linenumber" name="61" href="#61">61</a>      TEST_UTIL.startMiniCluster();
+<a class="jxr_linenumber" name="62" href="#62">62</a>    }
+<a class="jxr_linenumber" name="63" href="#63">63</a>  
+<a class="jxr_linenumber" name="64" href="#64">64</a>    <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="65" href="#65">65</a>  <em class="jxr_javadoccomment">   * @throws java.lang.Exception</em>
+<a class="jxr_linenumber" name="66" href="#66">66</a>  <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="67" href="#67">67</a>    @AfterClass
+<a class="jxr_linenumber" name="68" href="#68">68</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> tearDownAfterClass() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="69" href="#69">69</a>      TEST_UTIL.shutdownMiniCluster();
+<a class="jxr_linenumber" name="70" href="#70">70</a>    }
+<a class="jxr_linenumber" name="71" href="#71">71</a>  
+<a class="jxr_linenumber" name="72" href="#72">72</a>    <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="73" href="#73">73</a>  <em class="jxr_javadoccomment">   * @throws java.lang.Exception</em>
+<a class="jxr_linenumber" name="74" href="#74">74</a>  <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="75" href="#75">75</a>    @Before
+<a class="jxr_linenumber" name="76" href="#76">76</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setUp() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="77" href="#77">77</a>      <em class="jxr_comment">// Nothing to do.</em>
+<a class="jxr_linenumber" name="78" href="#78">78</a>    }
+<a class="jxr_linenumber" name="79" href="#79">79</a>  
+<a class="jxr_linenumber" name="80" href="#80">80</a>    <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="81" href="#81">81</a>  <em class="jxr_javadoccomment">   * @throws java.lang.Exception</em>
+<a class="jxr_linenumber" name="82" href="#82">82</a>  <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="83" href="#83">83</a>    @After
+<a class="jxr_linenumber" name="84" href="#84">84</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> tearDown() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="85" href="#85">85</a>      <strong class="jxr_keyword">for</strong> (HTableDescriptor htd : TEST_UTIL.getHBaseAdmin().listTables()) {
+<a class="jxr_linenumber" name="86" href="#86">86</a>        LOG.info(<span class="jxr_string">"Tear down, remove table="</span> + htd.getTableName());
+<a class="jxr_linenumber" name="87" href="#87">87</a>        TEST_UTIL.deleteTable(htd.getTableName());
+<a class="jxr_linenumber" name="88" href="#88">88</a>      }
+<a class="jxr_linenumber" name="89" href="#89">89</a>    }
+<a class="jxr_linenumber" name="90" href="#90">90</a>  
+<a class="jxr_linenumber" name="91" href="#91">91</a>    @Test
+<a class="jxr_linenumber" name="92" href="#92">92</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testLeaseRenewal() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="93" href="#93">93</a>      HTable table = TEST_UTIL.createTable(
+<a class="jxr_linenumber" name="94" href="#94">94</a>        TableName.valueOf(<span class="jxr_string">"testLeaseRenewal"</span>), FAMILY);
+<a class="jxr_linenumber" name="95" href="#95">95</a>      Put p = <strong class="jxr_keyword">new</strong> Put(ROW_BYTES);
+<a class="jxr_linenumber" name="96" href="#96">96</a>      p.addColumn(FAMILY, COL_QUAL, VAL_BYTES);
+<a class="jxr_linenumber" name="97" href="#97">97</a>      table.put(p);
+<a class="jxr_linenumber" name="98" href="#98">98</a>      p = <strong class="jxr_keyword">new</strong> Put(ANOTHERROW);
+<a class="jxr_linenumber" name="99" href="#99">99</a>      p.addColumn(FAMILY, COL_QUAL, VAL_BYTES);
+<a class="jxr_linenumber" name="100" href="#100">100</a>     table.put(p);
+<a class="jxr_linenumber" name="101" href="#101">101</a>     Scan s = <strong class="jxr_keyword">new</strong> Scan();
+<a class="jxr_linenumber" name="102" href="#102">102</a>     s.setCaching(1);
+<a class="jxr_linenumber" name="103" href="#103">103</a>     ResultScanner rs = table.getScanner(s);
+<a class="jxr_linenumber" name="104" href="#104">104</a>     <em class="jxr_comment">// make sure that calling renewLease does not impact the scan results</em>
+<a class="jxr_linenumber" name="105" href="#105">105</a>     assertTrue(rs.renewLease());
+<a class="jxr_linenumber" name="106" href="#106">106</a>     assertTrue(Arrays.equals(rs.next().getRow(), ANOTHERROW));
+<a class="jxr_linenumber" name="107" href="#107">107</a>     <em class="jxr_comment">// renew the lease a few times, long enough to be sure</em>
+<a class="jxr_linenumber" name="108" href="#108">108</a>     <em class="jxr_comment">// the lease would have expired otherwise</em>
+<a class="jxr_linenumber" name="109" href="#109">109</a>     Thread.sleep(leaseTimeout/2);
+<a class="jxr_linenumber" name="110" href="#110">110</a>     assertTrue(rs.renewLease());
+<a class="jxr_linenumber" name="111" href="#111">111</a>     Thread.sleep(leaseTimeout/2);
+<a class="jxr_linenumber" name="112" href="#112">112</a>     assertTrue(rs.renewLease());
+<a class="jxr_linenumber" name="113" href="#113">113</a>     Thread.sleep(leaseTimeout/2);
+<a class="jxr_linenumber" name="114" href="#114">114</a>     assertTrue(rs.renewLease());
+<a class="jxr_linenumber" name="115" href="#115">115</a>     <em class="jxr_comment">// make sure we haven't advanced the scanner</em>
+<a class="jxr_linenumber" name="116" href="#116">116</a>     assertTrue(Arrays.equals(rs.next().getRow(), ROW_BYTES));
+<a class="jxr_linenumber" name="117" href="#117">117</a>     assertTrue(rs.renewLease());
+<a class="jxr_linenumber" name="118" href="#118">118</a>     <em class="jxr_comment">// make sure scanner is exhausted now</em>
+<a class="jxr_linenumber" name="119" href="#119">119</a>     assertNull(rs.next());
+<a class="jxr_linenumber" name="120" href="#120">120</a>     <em class="jxr_comment">// renewLease should return false now</em>
+<a class="jxr_linenumber" name="121" href="#121">121</a>     assertFalse(rs.renewLease());
+<a class="jxr_linenumber" name="122" href="#122">122</a>     rs.close();
+<a class="jxr_linenumber" name="123" href="#123">123</a>     table.close();
+<a class="jxr_linenumber" name="124" href="#124">124</a>   }
+<a class="jxr_linenumber" name="125" href="#125">125</a> }
+</pre>
+<hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
+</html>
+


[39/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/util/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-summary.html b/devapidocs/org/apache/hadoop/hbase/util/package-summary.html
index 7b6b75b..e2c4da8 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-summary.html
@@ -288,41 +288,35 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a>&lt;T&gt;</td>
-<td class="colLast">
-<div class="block">A ConcurrentLinkedQueue that enforces a maximum queue size.</div>
-</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue</a>&lt;E&gt;</td>
 <td class="colLast">
 <div class="block">A generic bounded blocking Priority-Queue.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue.PriorityQueue</a>&lt;E&gt;</td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">ByteBufferArray</a></td>
 <td class="colLast">
 <div class="block">This class manages an array of ByteBuffers with a default size 4MB.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferUtils.html" title="class in org.apache.hadoop.hbase.util">ByteBufferUtils</a></td>
 <td class="colLast">
 <div class="block">Utility functions for working with byte buffers, such as reading/writing
  variable-length long numbers.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ByteRangeUtils.html" title="class in org.apache.hadoop.hbase.util">ByteRangeUtils</a></td>
 <td class="colLast">
 <div class="block">Utility methods for working with <a href="../../../../../org/apache/hadoop/hbase/util/ByteRange.html" title="interface in org.apache.hadoop.hbase.util"><code>ByteRange</code></a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></td>
 <td class="colLast">
 <div class="block">Utility class that handles byte arrays, conversions to/from other types,
@@ -330,50 +324,50 @@
  HashSets, and can be used as key in maps or trees.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Bytes.ByteArrayComparator.html" title="class in org.apache.hadoop.hbase.util">Bytes.ByteArrayComparator</a></td>
 <td class="colLast">
 <div class="block">Byte array comparator class.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.html" title="class in org.apache.hadoop.hbase.util">Bytes.LexicographicalComparerHolder</a></td>
 <td class="colLast">
 <div class="block">Provides a lexicographical comparer implementation; either a Java
  implementation or a faster implementation based on <code>Unsafe</code>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Bytes.RowEndKeyComparator.html" title="class in org.apache.hadoop.hbase.util">Bytes.RowEndKeyComparator</a></td>
 <td class="colLast">
 <div class="block">A <a href="../../../../../org/apache/hadoop/hbase/util/Bytes.ByteArrayComparator.html" title="class in org.apache.hadoop.hbase.util"><code>Bytes.ByteArrayComparator</code></a> that treats the empty array as the largest value.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ByteStringer.html" title="class in org.apache.hadoop.hbase.util">ByteStringer</a></td>
 <td class="colLast">
 <div class="block">Hack to workaround HBASE-10304 issue that keeps bubbling up when a mapreduce context.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ChecksumFactory.html" title="class in org.apache.hadoop.hbase.util">ChecksumFactory</a></td>
 <td class="colLast">
 <div class="block">Utility class that is used to generate a Checksum object.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Classes.html" title="class in org.apache.hadoop.hbase.util">Classes</a></td>
 <td class="colLast">
 <div class="block">Utilities for class manipulation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ClassLoaderBase.html" title="class in org.apache.hadoop.hbase.util">ClassLoaderBase</a></td>
 <td class="colLast">
 <div class="block">Base class loader that defines couple shared constants used by sub-classes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ClassSize.html" title="class in org.apache.hadoop.hbase.util">ClassSize</a></td>
 <td class="colLast">
 <div class="block">Class for determining the "size" of a class, an attempt to calculate the
@@ -382,418 +376,418 @@
  The core of this class is taken from the Derby project</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/CollectionBackedScanner.html" title="class in org.apache.hadoop.hbase.util">CollectionBackedScanner</a></td>
 <td class="colLast">
 <div class="block">Utility scanner that wraps a sortable collection and serves
  as a KeyValueScanner.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/CollectionUtils.html" title="class in org.apache.hadoop.hbase.util">CollectionUtils</a></td>
 <td class="colLast">
 <div class="block">Utility methods for dealing with Collections, including treating null collections as empty.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/CompressionTest.html" title="class in org.apache.hadoop.hbase.util">CompressionTest</a></td>
 <td class="colLast">
 <div class="block">Compression validation test.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ConcatenatedLists.html" title="class in org.apache.hadoop.hbase.util">ConcatenatedLists</a>&lt;T&gt;</td>
 <td class="colLast">
 <div class="block">A collection class that contains multiple sub-lists, which allows us to not copy lists.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ConcurrentIndex.html" title="class in org.apache.hadoop.hbase.util">ConcurrentIndex</a>&lt;K,V&gt;</td>
 <td class="colLast">
 <div class="block">A simple concurrent map of sets.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ConcurrentIndex.DefaultValueSetFactory.html" title="class in org.apache.hadoop.hbase.util">ConcurrentIndex.DefaultValueSetFactory</a>&lt;V&gt;</td>
 <td class="colLast">
 <div class="block">Default factory class for the sets associated with given keys.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ConfigurationUtil.html" title="class in org.apache.hadoop.hbase.util">ConfigurationUtil</a></td>
 <td class="colLast">
 <div class="block">Utilities for storing more complex collection types in
  <code>Configuration</code> instances.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ConnectionCache.html" title="class in org.apache.hadoop.hbase.util">ConnectionCache</a></td>
 <td class="colLast">
 <div class="block">A utility to store user specific HConnections in memory.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/CoprocessorClassLoader.html" title="class in org.apache.hadoop.hbase.util">CoprocessorClassLoader</a></td>
 <td class="colLast">
 <div class="block">ClassLoader used to load classes for Coprocessor instances.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Counter.html" title="class in org.apache.hadoop.hbase.util">Counter</a></td>
 <td class="colLast">
 <div class="block">High scalable counter.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Counter.Cell.html" title="class in org.apache.hadoop.hbase.util">Counter.Cell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Counter.Container.html" title="class in org.apache.hadoop.hbase.util">Counter.Container</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Counter.IndexHolder.html" title="class in org.apache.hadoop.hbase.util">Counter.IndexHolder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/DefaultEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">DefaultEnvironmentEdge</a></td>
 <td class="colLast">
 <div class="block">Default implementation of an environment edge.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/DirectMemoryUtils.html" title="class in org.apache.hadoop.hbase.util">DirectMemoryUtils</a></td>
 <td class="colLast">
 <div class="block">Utilities for interacting with and monitoring DirectByteBuffer allocations.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/DNS.html" title="class in org.apache.hadoop.hbase.util">DNS</a></td>
 <td class="colLast">
 <div class="block">Wrapper around Hadoop's DNS class to hide reflection.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/DrainBarrier.html" title="class in org.apache.hadoop.hbase.util">DrainBarrier</a></td>
 <td class="colLast">
 <div class="block">A simple barrier that can be used by classes that need to wait for some operations to
  finish before stopping/closing/etc.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/DynamicClassLoader.html" title="class in org.apache.hadoop.hbase.util">DynamicClassLoader</a></td>
 <td class="colLast">
 <div class="block">This is a class loader that can load classes dynamically from new
  jar files under a configured folder.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/EncryptionTest.html" title="class in org.apache.hadoop.hbase.util">EncryptionTest</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html" title="class in org.apache.hadoop.hbase.util">EnvironmentEdgeManager</a></td>
 <td class="colLast">
 <div class="block">Manages a singleton instance of the environment edge.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ExceptionUtil.html" title="class in org.apache.hadoop.hbase.util">ExceptionUtil</a></td>
 <td class="colLast">
 <div class="block">This class handles the different interruption classes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FastLongHistogram.html" title="class in org.apache.hadoop.hbase.util">FastLongHistogram</a></td>
 <td class="colLast">
 <div class="block">FastLongHistogram is a thread-safe class that estimate distribution of data and computes the
  quantiles.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FastLongHistogram.Bins.html" title="class in org.apache.hadoop.hbase.util">FastLongHistogram.Bins</a></td>
 <td class="colLast">
 <div class="block">Bins is a class containing a list of buckets(or bins) for estimation histogram of some data.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ForeignExceptionUtil.html" title="class in org.apache.hadoop.hbase.util">ForeignExceptionUtil</a></td>
 <td class="colLast">
 <div class="block">Helper to convert Exceptions and StackTraces from/to protobuf.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSHDFSUtils.html" title="class in org.apache.hadoop.hbase.util">FSHDFSUtils</a></td>
 <td class="colLast">
 <div class="block">Implementation for hdfs</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSMapRUtils.html" title="class in org.apache.hadoop.hbase.util">FSMapRUtils</a></td>
 <td class="colLast">
 <div class="block"><a href="http://www.mapr.com/">MapR</a> implementation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSRegionScanner.html" title="class in org.apache.hadoop.hbase.util">FSRegionScanner</a></td>
 <td class="colLast">
 <div class="block">Thread that walks over the filesystem, and computes the mappings
  Region -> BestHost and Region -> <code>Map&lt;HostName, fractional-locality-of-region&gt;</code></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSTableDescriptors.html" title="class in org.apache.hadoop.hbase.util">FSTableDescriptors</a></td>
 <td class="colLast">
 <div class="block">Implementation of <a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase"><code>TableDescriptors</code></a> that reads descriptors from the
  passed filesystem.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html" title="class in org.apache.hadoop.hbase.util">FSUtils</a></td>
 <td class="colLast">
 <div class="block">Utility methods for interacting with the underlying file system.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.BlackListDirFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.BlackListDirFilter</a></td>
 <td class="colLast">
 <div class="block">Directory filter that doesn't include any of the directories in the specified blacklist</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.DirFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.DirFilter</a></td>
 <td class="colLast">
 <div class="block">A <code>PathFilter</code> that only allows directories.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.FamilyDirFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.FamilyDirFilter</a></td>
 <td class="colLast">
 <div class="block">Filter for all dirs that are legal column family names.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.FileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.FileFilter</a></td>
 <td class="colLast">
 <div class="block">A <code>PathFilter</code> that returns only regular files.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.HFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.HFileFilter</a></td>
 <td class="colLast">
 <div class="block">Filter for HFiles that excludes reference files.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.ReferenceFileFilter</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.RegionDirFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.RegionDirFilter</a></td>
 <td class="colLast">
 <div class="block">Filter for all dirs that don't start with '.'</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.UserTableDirFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.UserTableDirFilter</a></td>
 <td class="colLast">
 <div class="block">A <code>PathFilter</code> that returns usertable directories.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSVisitor.html" title="class in org.apache.hadoop.hbase.util">FSVisitor</a></td>
 <td class="colLast">
 <div class="block">Utility methods for interacting with the hbase.root file system.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/GetJavaProperty.html" title="class in org.apache.hadoop.hbase.util">GetJavaProperty</a></td>
 <td class="colLast">
 <div class="block">A generic way for querying Java properties.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Hash.html" title="class in org.apache.hadoop.hbase.util">Hash</a></td>
 <td class="colLast">
 <div class="block">This class represents a common API for hashing functions.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HashedBytes.html" title="class in org.apache.hadoop.hbase.util">HashedBytes</a></td>
 <td class="colLast">
 <div class="block">This class encapsulates a byte array and overrides hashCode and equals so
  that it's identity is based on the data rather than the array instance.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" title="class in org.apache.hadoop.hbase.util">HasThread</a></td>
 <td class="colLast">
 <div class="block">Abstract class which contains a Thread and delegates the common Thread
  methods to that instance.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseConfTool.html" title="class in org.apache.hadoop.hbase.util">HBaseConfTool</a></td>
 <td class="colLast">
 <div class="block">Tool that prints out a configuration.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a></td>
 <td class="colLast">
 <div class="block">HBaseFsck (hbck) is a tool for checking and repairing region consistency and
  table integrity problems in a corrupted HBase.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HBaseFsckTool</a></td>
 <td class="colLast">
 <div class="block">This is a Tool wrapper that gathers -Dxxx=yyy configuration settings from the command line.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a></td>
 <td class="colLast">
 <div class="block">Maintain information about a particular region.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HdfsEntry</a></td>
 <td class="colLast">
 <div class="block">Stores the regioninfo entries from HDFS</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.MetaEntry</a></td>
 <td class="colLast">
 <div class="block">Stores the regioninfo entries scanned from META</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.OnlineEntry</a></td>
 <td class="colLast">
 <div class="block">Stores the regioninfo retrieved from Online region servers.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.PrintingErrorReporter</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.RegionBoundariesInformation</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.WorkItemHdfsDir</a></td>
 <td class="colLast">
 <div class="block">Contact hdfs and get all information about specified table directory into
  regioninfo list.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.WorkItemHdfsRegionInfo</a></td>
 <td class="colLast">
 <div class="block">Contact hdfs and get all information about specified table directory into
  regioninfo list.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.WorkItemOverlapMerge</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.WorkItemRegion</a></td>
 <td class="colLast">
 <div class="block">Contact a region server and get all information from it</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsckRepair.html" title="class in org.apache.hadoop.hbase.util">HBaseFsckRepair</a></td>
 <td class="colLast">
 <div class="block">This class contains helper methods that repair parts of hbase's filesystem
  contents.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HFileArchiveUtil.html" title="class in org.apache.hadoop.hbase.util">HFileArchiveUtil</a></td>
 <td class="colLast">
 <div class="block">Helper class for all utilities related to archival/retrieval of HFiles</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HMerge.html" title="class in org.apache.hadoop.hbase.util">HMerge</a></td>
 <td class="colLast">
 <div class="block">A non-instantiable class that has a static method capable of compacting
  a table by merging adjacent regions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HMerge.Merger.html" title="class in org.apache.hadoop.hbase.util">HMerge.Merger</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HMerge.OnlineMerger.html" title="class in org.apache.hadoop.hbase.util">HMerge.OnlineMerger</a></td>
 <td class="colLast">
 <div class="block">Instantiated to compact a normal user table</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HttpServerUtil.html" title="class in org.apache.hadoop.hbase.util">HttpServerUtil</a></td>
 <td class="colLast">
 <div class="block">HttpServer utility.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a></td>
 <td class="colLast">
 <div class="block">Allows multiple concurrent clients to lock on a numeric id with a minimal
  memory overhead.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/IdLock.Entry.html" title="class in org.apache.hadoop.hbase.util">IdLock.Entry</a></td>
 <td class="colLast">
 <div class="block">An entry returned to the client as a lock object</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.html" title="class in org.apache.hadoop.hbase.util">IdReadWriteLock</a></td>
 <td class="colLast">
 <div class="block">Allows multiple concurrent clients to lock on a numeric id with ReentrantReadWriteLock.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/IncrementingEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">IncrementingEnvironmentEdge</a></td>
 <td class="colLast">
 <div class="block">Uses an incrementing algorithm instead of the default.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/IterableUtils.html" title="class in org.apache.hadoop.hbase.util">IterableUtils</a></td>
 <td class="colLast">
 <div class="block">Utility methods for Iterable including null-safe handlers.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JenkinsHash.html" title="class in org.apache.hadoop.hbase.util">JenkinsHash</a></td>
 <td class="colLast">
 <div class="block">Produces 32-bit hash for hash table lookup.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JSONBean.html" title="class in org.apache.hadoop.hbase.util">JSONBean</a></td>
 <td class="colLast">
 <div class="block">Utility for doing JSON and MBeans.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JsonMapper.html" title="class in org.apache.hadoop.hbase.util">JsonMapper</a></td>
 <td class="colLast">
 <div class="block">Utility class for converting objects to JSON</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JVM.html" title="class in org.apache.hadoop.hbase.util">JVM</a></td>
 <td class="colLast">
 <div class="block">This class is a wrapper for the implementation of
@@ -802,97 +796,97 @@
  depending on the runtime (vendor) used.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JVMClusterUtil.html" title="class in org.apache.hadoop.hbase.util">JVMClusterUtil</a></td>
 <td class="colLast">
 <div class="block">Utility used running a cluster all in the one JVM.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JVMClusterUtil.MasterThread.html" title="class in org.apache.hadoop.hbase.util">JVMClusterUtil.MasterThread</a></td>
 <td class="colLast">
 <div class="block">Datastructure to hold Master Thread and Master instance</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JVMClusterUtil.RegionServerThread.html" title="class in org.apache.hadoop.hbase.util">JVMClusterUtil.RegionServerThread</a></td>
 <td class="colLast">
 <div class="block">Datastructure to hold RegionServer Thread and RegionServer instance</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JvmPauseMonitor.html" title="class in org.apache.hadoop.hbase.util">JvmPauseMonitor</a></td>
 <td class="colLast">
 <div class="block">Class which sets up a simple thread which runs in a loop sleeping
  for a short interval of time.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JvmPauseMonitor.GcTimes.html" title="class in org.apache.hadoop.hbase.util">JvmPauseMonitor.GcTimes</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JvmVersion.html" title="class in org.apache.hadoop.hbase.util">JvmVersion</a></td>
 <td class="colLast">
 <div class="block">Certain JVM versions are known to be unstable with HBase.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/KeyLocker.html" title="class in org.apache.hadoop.hbase.util">KeyLocker</a>&lt;K&gt;</td>
 <td class="colLast">
 <div class="block">A utility class to manage a set of locks.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ManualEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">ManualEnvironmentEdge</a></td>
 <td class="colLast">
 <div class="block">An environment edge that uses a manually set value.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/MapreduceDependencyClasspathTool.html" title="class in org.apache.hadoop.hbase.util">MapreduceDependencyClasspathTool</a></td>
 <td class="colLast">
 <div class="block">Generate a classpath string containing any jars required by mapreduce jobs.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/MD5Hash.html" title="class in org.apache.hadoop.hbase.util">MD5Hash</a></td>
 <td class="colLast">
 <div class="block">Utility class for MD5
  MD5 hash produces a 128-bit digest.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Merge.html" title="class in org.apache.hadoop.hbase.util">Merge</a></td>
 <td class="colLast">
 <div class="block">Utility that can merge any two regions in the same table: adjacent,
  overlapping or disjoint.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/MetaUtils.html" title="class in org.apache.hadoop.hbase.util">MetaUtils</a></td>
 <td class="colLast">
 <div class="block">Contains utility methods for manipulating HBase meta tables.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Methods.html" title="class in org.apache.hadoop.hbase.util">Methods</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ModifyRegionUtils.html" title="class in org.apache.hadoop.hbase.util">ModifyRegionUtils</a></td>
 <td class="colLast">
 <div class="block">Utility methods for interacting with the regions.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/MultiHConnection.html" title="class in org.apache.hadoop.hbase.util">MultiHConnection</a></td>
 <td class="colLast">
 <div class="block">Provides ability to create multiple HConnection instances and allows to process a batch of
  actions using HConnection.processBatchCallback()</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/MunkresAssignment.html" title="class in org.apache.hadoop.hbase.util">MunkresAssignment</a></td>
 <td class="colLast">
 <div class="block">Computes the optimal (minimal cost) assignment of jobs to workers (or other
@@ -903,102 +897,102 @@
  Problem: An Improved Version of Munkres' Algorithm".</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/MurmurHash.html" title="class in org.apache.hadoop.hbase.util">MurmurHash</a></td>
 <td class="colLast">
 <div class="block">This is a very fast, non-cryptographic hash suitable for general hash-based
  lookup.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/MurmurHash3.html" title="class in org.apache.hadoop.hbase.util">MurmurHash3</a></td>
 <td class="colLast">
 <div class="block">This is a very fast, non-cryptographic hash suitable for general hash-based
  lookup.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a></td>
 <td class="colLast">
 <div class="block">This implementation is not smart and just treats nonce group and nonce as random bits.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;T&gt;</td>
 <td class="colLast">
 <div class="block">A generic class for pair of an Object and and a primitive int value.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html" title="class in org.apache.hadoop.hbase.util">OrderedBytes</a></td>
 <td class="colLast">
 <div class="block">Utility class that handles ordered byte arrays.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;T1,T2&gt;</td>
 <td class="colLast">
 <div class="block">A generic class for pairs.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/PairOfSameType.html" title="class in org.apache.hadoop.hbase.util">PairOfSameType</a>&lt;T&gt;</td>
 <td class="colLast">
 <div class="block">A generic, immutable class for pairs of objects both of type <code>T</code>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.html" title="class in org.apache.hadoop.hbase.util">PoolMap</a>&lt;K,V&gt;</td>
 <td class="colLast">
 <div class="block">The <code>PoolMap</code> maps a key to a collection of values, the elements
  of which are managed by a pool.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.ThreadLocalPool.html" title="class in org.apache.hadoop.hbase.util">PoolMap.ThreadLocalPool</a>&lt;R&gt;</td>
 <td class="colLast">
 <div class="block">The <code>ThreadLocalPool</code> represents a <a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.Pool.html" title="interface in org.apache.hadoop.hbase.util"><code>PoolMap.Pool</code></a> that
  builds on the <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html?is-external=true" title="class or interface in java.lang"><code>ThreadLocal</code></a> class.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.html" title="class in org.apache.hadoop.hbase.util">PrettyPrinter</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ProtoUtil.html" title="class in org.apache.hadoop.hbase.util">ProtoUtil</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ReflectionUtils.html" title="class in org.apache.hadoop.hbase.util">ReflectionUtils</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RegionMover.html" title="class in org.apache.hadoop.hbase.util">RegionMover</a></td>
 <td class="colLast">
 <div class="block">Tool for loading/unloading regions to/from given regionserver This tool can be run from Command
  line directly as a utility.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RegionMover.RegionMoverBuilder.html" title="class in org.apache.hadoop.hbase.util">RegionMover.RegionMoverBuilder</a></td>
 <td class="colLast">
 <div class="block">Builder for Region mover.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RegionSizeCalculator.html" title="class in org.apache.hadoop.hbase.util">RegionSizeCalculator</a></td>
 <td class="colLast">
 <div class="block">Computes size of each region for given table and given column families.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util">RegionSplitCalculator</a>&lt;R extends <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" title="interface in org.apache.hadoop.hbase.util">KeyRange</a>&gt;</td>
 <td class="colLast">
 <div class="block">This is a generic region split calculator.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitter.html" title="class in org.apache.hadoop.hbase.util">RegionSplitter</a></td>
 <td class="colLast">
 <div class="block">The <a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitter.html" title="class in org.apache.hadoop.hbase.util"><code>RegionSplitter</code></a> class provides several utilities to help in the
@@ -1006,184 +1000,184 @@
  instead of having HBase handle that automatically.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitter.HexStringSplit.html" title="class in org.apache.hadoop.hbase.util">RegionSplitter.HexStringSplit</a></td>
 <td class="colLast">
 <div class="block">HexStringSplit is a well-known <a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitter.SplitAlgorithm.html" title="interface in org.apache.hadoop.hbase.util"><code>RegionSplitter.SplitAlgorithm</code></a> for choosing region
  boundaries.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitter.UniformSplit.html" title="class in org.apache.hadoop.hbase.util">RegionSplitter.UniformSplit</a></td>
 <td class="colLast">
 <div class="block">A SplitAlgorithm that divides the space of possible keys evenly.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.BackoffPolicy.html" title="class in org.apache.hadoop.hbase.util">RetryCounter.BackoffPolicy</a></td>
 <td class="colLast">
 <div class="block">Policy for calculating sleeping intervals between retry attempts</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.ExponentialBackoffPolicy.html" title="class in org.apache.hadoop.hbase.util">RetryCounter.ExponentialBackoffPolicy</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.ExponentialBackoffPolicyWithLimit.html" title="class in org.apache.hadoop.hbase.util">RetryCounter.ExponentialBackoffPolicyWithLimit</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.RetryConfig.html" title="class in org.apache.hadoop.hbase.util">RetryCounter.RetryConfig</a></td>
 <td class="colLast">
 <div class="block">Configuration for a retry counter</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RetryCounterFactory.html" title="class in org.apache.hadoop.hbase.util">RetryCounterFactory</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RollingStatCalculator.html" title="class in org.apache.hadoop.hbase.util">RollingStatCalculator</a></td>
 <td class="colLast">
 <div class="block">This class maintains mean and variation for any sequence of input provided to it.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ServerCommandLine.html" title="class in org.apache.hadoop.hbase.util">ServerCommandLine</a></td>
 <td class="colLast">
 <div class="block">Base class for command lines that start up various HBase daemons.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.html" title="class in org.apache.hadoop.hbase.util">ServerRegionReplicaUtil</a></td>
 <td class="colLast">
 <div class="block">Similar to <a href="../../../../../org/apache/hadoop/hbase/client/RegionReplicaUtil.html" title="class in org.apache.hadoop.hbase.client"><code>RegionReplicaUtil</code></a> but for the server side</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ShutdownHookManager.html" title="class in org.apache.hadoop.hbase.util">ShutdownHookManager</a></td>
 <td class="colLast">
 <div class="block">This class provides ShutdownHookManager shims for HBase to interact with the Hadoop 1.0.x and the
  Hadoop 2.0+ series.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ShutdownHookManager.ShutdownHookManagerV1.html" title="class in org.apache.hadoop.hbase.util">ShutdownHookManager.ShutdownHookManagerV1</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ShutdownHookManager.ShutdownHookManagerV2.html" title="class in org.apache.hadoop.hbase.util">ShutdownHookManager.ShutdownHookManagerV2</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/SimpleByteRange.html" title="class in org.apache.hadoop.hbase.util">SimpleByteRange</a></td>
 <td class="colLast">
 <div class="block">A read only version of the <a href="../../../../../org/apache/hadoop/hbase/util/ByteRange.html" title="interface in org.apache.hadoop.hbase.util"><code>ByteRange</code></a>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/SimpleMutableByteRange.html" title="class in org.apache.hadoop.hbase.util">SimpleMutableByteRange</a></td>
 <td class="colLast">
 <div class="block">A basic mutable <a href="../../../../../org/apache/hadoop/hbase/util/ByteRange.html" title="interface in org.apache.hadoop.hbase.util"><code>ByteRange</code></a> implementation.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/SimplePositionedByteRange.html" title="class in org.apache.hadoop.hbase.util">SimplePositionedByteRange</a></td>
 <td class="colLast">
 <div class="block">Extends the basic <a href="../../../../../org/apache/hadoop/hbase/util/SimpleMutableByteRange.html" title="class in org.apache.hadoop.hbase.util"><code>SimpleMutableByteRange</code></a> implementation with position
  support and it is a readonly version.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/SimplePositionedMutableByteRange.html" title="class in org.apache.hadoop.hbase.util">SimplePositionedMutableByteRange</a></td>
 <td class="colLast">
 <div class="block">Extends the basic <a href="../../../../../org/apache/hadoop/hbase/util/AbstractPositionedByteRange.html" title="class in org.apache.hadoop.hbase.util"><code>AbstractPositionedByteRange</code></a> implementation with
  position support and it is a mutable version.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Sleeper.html" title="class in org.apache.hadoop.hbase.util">Sleeper</a></td>
 <td class="colLast">
 <div class="block">Sleeper for current thread.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/SortedCopyOnWriteSet.html" title="class in org.apache.hadoop.hbase.util">SortedCopyOnWriteSet</a>&lt;E&gt;</td>
 <td class="colLast">
 <div class="block">Simple <a href="http://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><code>SortedSet</code></a> implementation that uses an internal
  <a href="http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util"><code>TreeSet</code></a> to provide ordering.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/SortedList.html" title="class in org.apache.hadoop.hbase.util">SortedList</a>&lt;E&gt;</td>
 <td class="colLast">
 <div class="block">Simple sorted list implementation that uses <a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util"><code>ArrayList</code></a> as
  the underlying collection so we can support RandomAccess.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/StealJobQueue.html" title="class in org.apache.hadoop.hbase.util">StealJobQueue</a>&lt;T&gt;</td>
 <td class="colLast">
 <div class="block">This queue allows a ThreadPoolExecutor to steal jobs from another ThreadPoolExecutor.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Strings.html" title="class in org.apache.hadoop.hbase.util">Strings</a></td>
 <td class="colLast">
 <div class="block">Utility for Strings.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Threads.html" title="class in org.apache.hadoop.hbase.util">Threads</a></td>
 <td class="colLast">
 <div class="block">Thread Utility</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Threads.PrintThreadInfoLazyHolder.html" title="class in org.apache.hadoop.hbase.util">Threads.PrintThreadInfoLazyHolder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Triple.html" title="class in org.apache.hadoop.hbase.util">Triple</a>&lt;A,B,C&gt;</td>
 <td class="colLast">
 <div class="block">Utility class to manage a triple.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/UnsafeAccess.html" title="class in org.apache.hadoop.hbase.util">UnsafeAccess</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/VersionInfo.html" title="class in org.apache.hadoop.hbase.util">VersionInfo</a></td>
 <td class="colLast">
 <div class="block">This class finds the package info for hbase and the VersionAnnotation
  information.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/WeakObjectPool.html" title="class in org.apache.hadoop.hbase.util">WeakObjectPool</a>&lt;K,V&gt;</td>
 <td class="colLast">
 <div class="block">A <code>WeakReference</code> based shared object pool.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Writables.html" title="class in org.apache.hadoop.hbase.util">Writables</a></td>
 <td class="colLast">
 <div class="block">Utility class with methods for manipulating Writable objects</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/YammerHistogramUtils.html" title="class in org.apache.hadoop.hbase.util">YammerHistogramUtils</a></td>
 <td class="colLast">
 <div class="block">Utility functions for working with Yammer Metrics.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ZKDataMigrator.html" title="class in org.apache.hadoop.hbase.util">ZKDataMigrator</a></td>
 <td class="colLast">
 <div class="block">utlity method to migrate zookeeper data across HBase versions.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/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 e149d00..035e505 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -93,7 +93,6 @@
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">BoundedPriorityBlockingQueue</span></a>&lt;E&gt; (implements java.util.concurrent.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;E&gt;)</li>
 <li type="circle">java.util.concurrent.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true" title="class or interface in java.util.concurrent"><span class="strong">ConcurrentLinkedQueue</span></a>&lt;E&gt; (implements java.util.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</a>&lt;E&gt;, java.io.<a href="http://docs.oracle.com/javase/7/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/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">BoundedConcurrentLinkedQueue</span></a>&lt;T&gt;</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.ReusablePool.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">PoolMap.ReusablePool</span></a>&lt;R&gt; (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.Pool.html" title="interface in org.apache.hadoop.hbase.util">PoolMap.Pool</a>&lt;R&gt;)</li>
 </ul>
 </li>
@@ -457,13 +456,13 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">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="strong">ChecksumType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">PoolMap.PoolType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">PrettyPrinter.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">ChecksumType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">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/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html
index b40b54b..0b06eb3 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html
@@ -113,7 +113,7 @@
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.2202">WALSplitter.CorruptedLogFileException</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.2208">WALSplitter.CorruptedLogFileException</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 </li>
 </ul>
@@ -197,7 +197,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>serialVersionUID</h4>
-<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html#line.2203">serialVersionUID</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html#line.2209">serialVersionUID</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.wal.WALSplitter.CorruptedLogFileException.serialVersionUID">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -215,7 +215,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.CorruptedLogFileException</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html#line.2205">WALSplitter.CorruptedLogFileException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html#line.2211">WALSplitter.CorruptedLogFileException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html
index b2c30aa..e1a4e24 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html
@@ -336,7 +336,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1526">append</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&nbsp;buffer)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1532">append</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&nbsp;buffer)
             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -352,7 +352,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>getOutputCounts</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1573">getOutputCounts</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1579">getOutputCounts</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#getOutputCounts()">getOutputCounts</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a></code></dd>
@@ -365,7 +365,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getNumberOfRecoveredRegions</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1584">getNumberOfRecoveredRegions</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1590">getNumberOfRecoveredRegions</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#getNumberOfRecoveredRegions()">getNumberOfRecoveredRegions</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a></code></dd>


[46/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html
index 010be6e..c9cbd63 100644
--- a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html
+++ b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html
@@ -5916,6 +5916,21 @@ service.</div>
 </tr>
 </tbody>
 </table>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a> with annotations of type <a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">InterfaceAudience.Private</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="strong">WALEdit.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#setCells(java.util.ArrayList)">setCells</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells)</code>
+<div class="block">This is not thread safe.</div>
+</td>
+</tr>
+</tbody>
+</table>
 </li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.replication">
 <!--   -->
@@ -7187,60 +7202,54 @@ service.</div>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a>&lt;T&gt;</strong></code>
-<div class="block">A ConcurrentLinkedQueue that enforces a maximum queue size.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue</a>&lt;E&gt;</strong></code>
 <div class="block">A generic bounded blocking Priority-Queue.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">ByteBufferArray</a></strong></code>
 <div class="block">This class manages an array of ByteBuffers with a default size 4MB.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ByteStringer.html" title="class in org.apache.hadoop.hbase.util">ByteStringer</a></strong></code>
 <div class="block">Hack to workaround HBASE-10304 issue that keeps bubbling up when a mapreduce context.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a></strong></code>
 <div class="block">Similar interface as <code>Progressable</code> but returns
  a boolean to support canceling the operation.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ChecksumFactory.html" title="class in org.apache.hadoop.hbase.util">ChecksumFactory</a></strong></code>
 <div class="block">Utility class that is used to generate a Checksum object.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util">ChecksumType</a></strong></code>
 <div class="block">Checksum types.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Classes.html" title="class in org.apache.hadoop.hbase.util">Classes</a></strong></code>
 <div class="block">Utilities for class manipulation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ClassLoaderBase.html" title="class in org.apache.hadoop.hbase.util">ClassLoaderBase</a></strong></code>
 <div class="block">Base class loader that defines couple shared constants used by sub-classes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ClassSize.html" title="class in org.apache.hadoop.hbase.util">ClassSize</a></strong></code>
 <div class="block">Class for determining the "size" of a class, an attempt to calculate the
@@ -7249,209 +7258,209 @@ service.</div>
  The core of this class is taken from the Derby project</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/CollectionBackedScanner.html" title="class in org.apache.hadoop.hbase.util">CollectionBackedScanner</a></strong></code>
 <div class="block">Utility scanner that wraps a sortable collection and serves
  as a KeyValueScanner.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/CollectionUtils.html" title="class in org.apache.hadoop.hbase.util">CollectionUtils</a></strong></code>
 <div class="block">Utility methods for dealing with Collections, including treating null collections as empty.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ConcatenatedLists.html" title="class in org.apache.hadoop.hbase.util">ConcatenatedLists</a>&lt;T&gt;</strong></code>
 <div class="block">A collection class that contains multiple sub-lists, which allows us to not copy lists.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ConcurrentIndex.html" title="class in org.apache.hadoop.hbase.util">ConcurrentIndex</a>&lt;K,V&gt;</strong></code>
 <div class="block">A simple concurrent map of sets.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ConnectionCache.html" title="class in org.apache.hadoop.hbase.util">ConnectionCache</a></strong></code>
 <div class="block">A utility to store user specific HConnections in memory.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/CoprocessorClassLoader.html" title="class in org.apache.hadoop.hbase.util">CoprocessorClassLoader</a></strong></code>
 <div class="block">ClassLoader used to load classes for Coprocessor instances.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/DefaultEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">DefaultEnvironmentEdge</a></strong></code>
 <div class="block">Default implementation of an environment edge.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/DirectMemoryUtils.html" title="class in org.apache.hadoop.hbase.util">DirectMemoryUtils</a></strong></code>
 <div class="block">Utilities for interacting with and monitoring DirectByteBuffer allocations.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/DNS.html" title="class in org.apache.hadoop.hbase.util">DNS</a></strong></code>
 <div class="block">Wrapper around Hadoop's DNS class to hide reflection.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/DrainBarrier.html" title="class in org.apache.hadoop.hbase.util">DrainBarrier</a></strong></code>
 <div class="block">A simple barrier that can be used by classes that need to wait for some operations to
  finish before stopping/closing/etc.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/DynamicClassLoader.html" title="class in org.apache.hadoop.hbase.util">DynamicClassLoader</a></strong></code>
 <div class="block">This is a class loader that can load classes dynamically from new
  jar files under a configured folder.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util">EnvironmentEdge</a></strong></code>
 <div class="block">Has some basic interaction with the environment.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html" title="class in org.apache.hadoop.hbase.util">EnvironmentEdgeManager</a></strong></code>
 <div class="block">Manages a singleton instance of the environment edge.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ExceptionUtil.html" title="class in org.apache.hadoop.hbase.util">ExceptionUtil</a></strong></code>
 <div class="block">This class handles the different interruption classes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ForeignExceptionUtil.html" title="class in org.apache.hadoop.hbase.util">ForeignExceptionUtil</a></strong></code>
 <div class="block">Helper to convert Exceptions and StackTraces from/to protobuf.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/FSHDFSUtils.html" title="class in org.apache.hadoop.hbase.util">FSHDFSUtils</a></strong></code>
 <div class="block">Implementation for hdfs</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/FSMapRUtils.html" title="class in org.apache.hadoop.hbase.util">FSMapRUtils</a></strong></code>
 <div class="block"><a href="http://www.mapr.com/">MapR</a> implementation.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/FSRegionScanner.html" title="class in org.apache.hadoop.hbase.util">FSRegionScanner</a></strong></code>
 <div class="block">Thread that walks over the filesystem, and computes the mappings
  Region -> BestHost and Region -> <code>Map&lt;HostName, fractional-locality-of-region&gt;</code></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/FSTableDescriptors.html" title="class in org.apache.hadoop.hbase.util">FSTableDescriptors</a></strong></code>
 <div class="block">Implementation of <a href="../../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase"><code>TableDescriptors</code></a> that reads descriptors from the
  passed filesystem.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/FSUtils.html" title="class in org.apache.hadoop.hbase.util">FSUtils</a></strong></code>
 <div class="block">Utility methods for interacting with the underlying file system.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/FSVisitor.html" title="class in org.apache.hadoop.hbase.util">FSVisitor</a></strong></code>
 <div class="block">Utility methods for interacting with the hbase.root file system.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Hash.html" title="class in org.apache.hadoop.hbase.util">Hash</a></strong></code>
 <div class="block">This class represents a common API for hashing functions.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/HashedBytes.html" title="class in org.apache.hadoop.hbase.util">HashedBytes</a></strong></code>
 <div class="block">This class encapsulates a byte array and overrides hashCode and equals so
  that it's identity is based on the data rather than the array instance.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/HasThread.html" title="class in org.apache.hadoop.hbase.util">HasThread</a></strong></code>
 <div class="block">Abstract class which contains a Thread and delegates the common Thread
  methods to that instance.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/HBaseConfTool.html" title="class in org.apache.hadoop.hbase.util">HBaseConfTool</a></strong></code>
 <div class="block">Tool that prints out a configuration.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/HBaseFsckRepair.html" title="class in org.apache.hadoop.hbase.util">HBaseFsckRepair</a></strong></code>
 <div class="block">This class contains helper methods that repair parts of hbase's filesystem
  contents.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/HMerge.html" title="class in org.apache.hadoop.hbase.util">HMerge</a></strong></code>
 <div class="block">A non-instantiable class that has a static method capable of compacting
  a table by merging adjacent regions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a></strong></code>
 <div class="block">Allows multiple concurrent clients to lock on a numeric id with a minimal
  memory overhead.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.html" title="class in org.apache.hadoop.hbase.util">IdReadWriteLock</a></strong></code>
 <div class="block">Allows multiple concurrent clients to lock on a numeric id with ReentrantReadWriteLock.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/IncrementingEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">IncrementingEnvironmentEdge</a></strong></code>
 <div class="block">Uses an incrementing algorithm instead of the default.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/IterableUtils.html" title="class in org.apache.hadoop.hbase.util">IterableUtils</a></strong></code>
 <div class="block">Utility methods for Iterable including null-safe handlers.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/JenkinsHash.html" title="class in org.apache.hadoop.hbase.util">JenkinsHash</a></strong></code>
 <div class="block">Produces 32-bit hash for hash table lookup.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/JVM.html" title="class in org.apache.hadoop.hbase.util">JVM</a></strong></code>
 <div class="block">This class is a wrapper for the implementation of
@@ -7460,67 +7469,67 @@ service.</div>
  depending on the runtime (vendor) used.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/JVMClusterUtil.html" title="class in org.apache.hadoop.hbase.util">JVMClusterUtil</a></strong></code>
 <div class="block">Utility used running a cluster all in the one JVM.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/JvmPauseMonitor.html" title="class in org.apache.hadoop.hbase.util">JvmPauseMonitor</a></strong></code>
 <div class="block">Class which sets up a simple thread which runs in a loop sleeping
  for a short interval of time.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/JvmVersion.html" title="class in org.apache.hadoop.hbase.util">JvmVersion</a></strong></code>
 <div class="block">Certain JVM versions are known to be unstable with HBase.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/KeyLocker.html" title="class in org.apache.hadoop.hbase.util">KeyLocker</a>&lt;K&gt;</strong></code>
 <div class="block">A utility class to manage a set of locks.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/KeyRange.html" title="interface in org.apache.hadoop.hbase.util">KeyRange</a></strong></code>
 <div class="block">A key range use in split coverage.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ManualEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">ManualEnvironmentEdge</a></strong></code>
 <div class="block">An environment edge that uses a manually set value.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/MetaUtils.html" title="class in org.apache.hadoop.hbase.util">MetaUtils</a></strong></code>
 <div class="block">Contains utility methods for manipulating HBase meta tables.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Methods.html" title="class in org.apache.hadoop.hbase.util">Methods</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ModifyRegionUtils.html" title="class in org.apache.hadoop.hbase.util">ModifyRegionUtils</a></strong></code>
 <div class="block">Utility methods for interacting with the regions.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/MultiHConnection.html" title="class in org.apache.hadoop.hbase.util">MultiHConnection</a></strong></code>
 <div class="block">Provides ability to create multiple HConnection instances and allows to process a batch of
  actions using HConnection.processBatchCallback()</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/MunkresAssignment.html" title="class in org.apache.hadoop.hbase.util">MunkresAssignment</a></strong></code>
 <div class="block">Computes the optimal (minimal cost) assignment of jobs to workers (or other
@@ -7531,64 +7540,64 @@ service.</div>
  Problem: An Improved Version of Munkres' Algorithm".</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/MurmurHash.html" title="class in org.apache.hadoop.hbase.util">MurmurHash</a></strong></code>
 <div class="block">This is a very fast, non-cryptographic hash suitable for general hash-based
  lookup.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/MurmurHash3.html" title="class in org.apache.hadoop.hbase.util">MurmurHash3</a></strong></code>
 <div class="block">This is a very fast, non-cryptographic hash suitable for general hash-based
  lookup.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a></strong></code>
 <div class="block">This implementation is not smart and just treats nonce group and nonce as random bits.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;T&gt;</strong></code>
 <div class="block">A generic class for pair of an Object and and a primitive int value.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/PoolMap.html" title="class in org.apache.hadoop.hbase.util">PoolMap</a>&lt;K,V&gt;</strong></code>
 <div class="block">The <code>PoolMap</code> maps a key to a collection of values, the elements
  of which are managed by a pool.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.html" title="class in org.apache.hadoop.hbase.util">PrettyPrinter</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ProtoUtil.html" title="class in org.apache.hadoop.hbase.util">ProtoUtil</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ReflectionUtils.html" title="class in org.apache.hadoop.hbase.util">ReflectionUtils</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/RegionSizeCalculator.html" title="class in org.apache.hadoop.hbase.util">RegionSizeCalculator</a></strong></code>
 <div class="block">Computes size of each region for given table and given column families.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/RegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util">RegionSplitCalculator</a>&lt;R extends <a href="../../../../../../org/apache/hadoop/hbase/util/KeyRange.html" title="interface in org.apache.hadoop.hbase.util">KeyRange</a>&gt;</strong></code>
 <div class="block">This is a generic region split calculator.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/RegionSplitter.html" title="class in org.apache.hadoop.hbase.util">RegionSplitter</a></strong></code>
 <div class="block">The <a href="../../../../../../org/apache/hadoop/hbase/util/RegionSplitter.html" title="class in org.apache.hadoop.hbase.util"><code>RegionSplitter</code></a> class provides several utilities to help in the
@@ -7596,74 +7605,74 @@ service.</div>
  instead of having HBase handle that automatically.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounterFactory.html" title="class in org.apache.hadoop.hbase.util">RetryCounterFactory</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ServerCommandLine.html" title="class in org.apache.hadoop.hbase.util">ServerCommandLine</a></strong></code>
 <div class="block">Base class for command lines that start up various HBase daemons.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Sleeper.html" title="class in org.apache.hadoop.hbase.util">Sleeper</a></strong></code>
 <div class="block">Sleeper for current thread.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/SortedCopyOnWriteSet.html" title="class in org.apache.hadoop.hbase.util">SortedCopyOnWriteSet</a>&lt;E&gt;</strong></code>
 <div class="block">Simple <a href="http://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><code>SortedSet</code></a> implementation that uses an internal
  <a href="http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util"><code>TreeSet</code></a> to provide ordering.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/StealJobQueue.html" title="class in org.apache.hadoop.hbase.util">StealJobQueue</a>&lt;T&gt;</strong></code>
 <div class="block">This queue allows a ThreadPoolExecutor to steal jobs from another ThreadPoolExecutor.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Strings.html" title="class in org.apache.hadoop.hbase.util">Strings</a></strong></code>
 <div class="block">Utility for Strings.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Threads.html" title="class in org.apache.hadoop.hbase.util">Threads</a></strong></code>
 <div class="block">Thread Utility</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Triple.html" title="class in org.apache.hadoop.hbase.util">Triple</a>&lt;A,B,C&gt;</strong></code>
 <div class="block">Utility class to manage a triple.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/UnsafeAccess.html" title="class in org.apache.hadoop.hbase.util">UnsafeAccess</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/WeakObjectPool.html" title="class in org.apache.hadoop.hbase.util">WeakObjectPool</a>&lt;K,V&gt;</strong></code>
 <div class="block">A <code>WeakReference</code> based shared object pool.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Writables.html" title="class in org.apache.hadoop.hbase.util">Writables</a></strong></code>
 <div class="block">Utility class with methods for manipulating Writable objects</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ZKDataMigrator.html" title="class in org.apache.hadoop.hbase.util">ZKDataMigrator</a></strong></code>
 <div class="block">utlity method to migrate zookeeper data across HBase versions.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Stable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Stable.html b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Stable.html
index 80fa957..6a4dcd7 100644
--- a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Stable.html
+++ b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Stable.html
@@ -1397,17 +1397,11 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a>&lt;T&gt;</strong></code>
-<div class="block">A ConcurrentLinkedQueue that enforces a maximum queue size.</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue</a>&lt;E&gt;</strong></code>
 <div class="block">A generic bounded blocking Priority-Queue.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></strong></code>
 <div class="block">Utility class that handles byte arrays, conversions to/from other types,
@@ -1415,71 +1409,71 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
  HashSets, and can be used as key in maps or trees.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Bytes.ByteArrayComparator.html" title="class in org.apache.hadoop.hbase.util">Bytes.ByteArrayComparator</a></strong></code>
 <div class="block">Byte array comparator class.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Bytes.RowEndKeyComparator.html" title="class in org.apache.hadoop.hbase.util">Bytes.RowEndKeyComparator</a></strong></code>
 <div class="block">A <a href="../../../../../../org/apache/hadoop/hbase/util/Bytes.ByteArrayComparator.html" title="class in org.apache.hadoop.hbase.util"><code>Bytes.ByteArrayComparator</code></a> that treats the empty array as the largest value.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Hash.html" title="class in org.apache.hadoop.hbase.util">Hash</a></strong></code>
 <div class="block">This class represents a common API for hashing functions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/HashedBytes.html" title="class in org.apache.hadoop.hbase.util">HashedBytes</a></strong></code>
 <div class="block">This class encapsulates a byte array and overrides hashCode and equals so
  that it's identity is based on the data rather than the array instance.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/JenkinsHash.html" title="class in org.apache.hadoop.hbase.util">JenkinsHash</a></strong></code>
 <div class="block">Produces 32-bit hash for hash table lookup.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/JvmVersion.html" title="class in org.apache.hadoop.hbase.util">JvmVersion</a></strong></code>
 <div class="block">Certain JVM versions are known to be unstable with HBase.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/MD5Hash.html" title="class in org.apache.hadoop.hbase.util">MD5Hash</a></strong></code>
 <div class="block">Utility class for MD5
  MD5 hash produces a 128-bit digest.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/MurmurHash.html" title="class in org.apache.hadoop.hbase.util">MurmurHash</a></strong></code>
 <div class="block">This is a very fast, non-cryptographic hash suitable for general hash-based
  lookup.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/MurmurHash3.html" title="class in org.apache.hadoop.hbase.util">MurmurHash3</a></strong></code>
 <div class="block">This is a very fast, non-cryptographic hash suitable for general hash-based
  lookup.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;T1,T2&gt;</strong></code>
 <div class="block">A generic class for pairs.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/PairOfSameType.html" title="class in org.apache.hadoop.hbase.util">PairOfSameType</a>&lt;T&gt;</strong></code>
 <div class="block">A generic, immutable class for pairs of objects both of type <code>T</code>.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html b/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
index c1182ef..c2dd439 100644
--- a/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
@@ -80,12 +80,12 @@
 </ul>
 <h2 title="Annotation Type Hierarchy">Annotation Type Hierarchy</h2>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceAudience.Private</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.LimitedPrivate.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceAudience.LimitedPrivate</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Stable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceStability.Stable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Public.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceAudience.Public</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Evolving.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceStability.Evolving</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Unstable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceStability.Unstable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Evolving.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceStability.Evolving</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Stable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceStability.Stable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceAudience.Private</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 </ul>
 </div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/client/ClientSmallScanner.SmallScannerCallable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/ClientSmallScanner.SmallScannerCallable.html b/devapidocs/org/apache/hadoop/hbase/client/ClientSmallScanner.SmallScannerCallable.html
index 1fa401e..150ed59 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/ClientSmallScanner.SmallScannerCallable.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/ClientSmallScanner.SmallScannerCallable.html
@@ -132,7 +132,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.h
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#cConnection">cConnection</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#closed">closed</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#controller">controller</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#controllerFactory">controllerFactory</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#heartbeatMessage">heartbeatMessage</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#id">id</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#instantiated">instantiated</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#isRegionServerRemote">isRegionServerRemote</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#LOG">LOG</a>, <a href="../../../../../org/apache/hadoop
 /hbase/client/ScannerCallable.html#LOG_SCANNER_ACTIVITY">LOG_SCANNER_ACTIVITY</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#LOG_SCANNER_LATENCY_CUTOFF">LOG_SCANNER_LATENCY_CUTOFF</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#scanMetrics">scanMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#scannerId">scannerId</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#serverHasMoreResults">serverHasMoreResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#serverHasMoreResultsContext">serverHasMoreResultsContext</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#cConnection">cConnection</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#closed">closed</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#controller">controller</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#controllerFactory">controllerFactory</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#heartbeatMessage">heartbeatMessage</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#id">id</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#instantiated">instantiated</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#isRegionServerRemote">isRegionServerRemote</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#LOG">LOG</a>, <a href="../../../../../org/apache/hadoop
 /hbase/client/ScannerCallable.html#LOG_SCANNER_ACTIVITY">LOG_SCANNER_ACTIVITY</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#LOG_SCANNER_LATENCY_CUTOFF">LOG_SCANNER_LATENCY_CUTOFF</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#renew">renew</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#scanMetrics">scanMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#scannerId">scannerId</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#serverHasMoreResults">serverHasMoreResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#serverHasMoreResultsContext">serverHasMoreResultsContext</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields_inherited_from_class_org.apache.hadoop.hbase.client.RegionServerCallable">
@@ -194,7 +194,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.h
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#checkIfRegionServerIsRemote()">checkIfRegionServerIsRemote</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getCaching()">getCaching</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getConnection()">getConnection</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getController()">getController</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getHRegionInfo()">getHRegionInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getScan()">getScan</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getServerHasMoreResults()">getServerHasMoreResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#hasMoreResultsContext()">hasMoreResultsContext</a>, <a href="../../../../../org/apache/hadoop/hbase
 /client/ScannerCallable.html#isHeartbeatMessage()">isHeartbeatMessage</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#openScanner()">openScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#prepare(boolean)">prepare</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setCaching(int)">setCaching</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setClose()">setClose</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setHasMoreResultsContext(boolean)">setHasMoreResultsContext</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setHeartbeatMessage(boolean)">setHeartbeatMessage</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setServerHasMoreResults(boolean)">setServerHasMoreResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#updateRes
 ultsMetrics(org.apache.hadoop.hbase.client.Result[])">updateResultsMetrics</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#checkIfRegionServerIsRemote()">checkIfRegionServerIsRemote</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getCaching()">getCaching</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getConnection()">getConnection</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getController()">getController</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getHRegionInfo()">getHRegionInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getScan()">getScan</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getServerHasMoreResults()">getServerHasMoreResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#hasMoreResultsContext()">hasMoreResultsContext</a>, <a href="../../../../../org/apache/hadoop/hbase
 /client/ScannerCallable.html#isHeartbeatMessage()">isHeartbeatMessage</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#openScanner()">openScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#prepare(boolean)">prepare</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setCaching(int)">setCaching</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setClose()">setClose</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setHasMoreResultsContext(boolean)">setHasMoreResultsContext</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setHeartbeatMessage(boolean)">setHeartbeatMessage</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setRenew(boolean)">setRenew</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setServerHasMoreResults(boolean)">setSe
 rverHasMoreResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#updateResultsMetrics(org.apache.hadoop.hbase.client.Result[])">updateResultsMetrics</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.client.RegionServerCallable">


[22/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.Intf.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.Intf.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.Intf.html
index 00d7a34..87dabfe 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.Intf.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.Intf.html
@@ -11,143 +11,158 @@
 <span class="sourceLineNo">003</span><a name="line.3"></a>
 <span class="sourceLineNo">004</span>package org.apache.hadoop.hbase.tmpl.regionserver;<a name="line.4"></a>
 <span class="sourceLineNo">005</span><a name="line.5"></a>
-<span class="sourceLineNo">006</span>// 23, 1<a name="line.6"></a>
+<span class="sourceLineNo">006</span>// 24, 1<a name="line.6"></a>
 <span class="sourceLineNo">007</span>import java.util.*;<a name="line.7"></a>
-<span class="sourceLineNo">008</span>// 24, 1<a name="line.8"></a>
+<span class="sourceLineNo">008</span>// 25, 1<a name="line.8"></a>
 <span class="sourceLineNo">009</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.9"></a>
-<span class="sourceLineNo">010</span>// 25, 1<a name="line.10"></a>
-<span class="sourceLineNo">011</span>import org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper;<a name="line.11"></a>
-<span class="sourceLineNo">012</span>// 26, 1<a name="line.12"></a>
-<span class="sourceLineNo">013</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.13"></a>
-<span class="sourceLineNo">014</span>// 27, 1<a name="line.14"></a>
-<span class="sourceLineNo">015</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.15"></a>
-<span class="sourceLineNo">016</span>// 28, 1<a name="line.16"></a>
-<span class="sourceLineNo">017</span>import org.apache.hadoop.hbase.ServerName;<a name="line.17"></a>
-<span class="sourceLineNo">018</span>// 29, 1<a name="line.18"></a>
-<span class="sourceLineNo">019</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.19"></a>
-<span class="sourceLineNo">020</span>// 30, 1<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>// 31, 1<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ServerInfo;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>// 32, 1<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>// 33, 1<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.util.DirectMemoryUtils;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>// 34, 1<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.util.StringUtils;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>// 35, 1<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import com.codahale.metrics.Snapshot;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>// 36, 1<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.lang.management.ManagementFactory;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>@org.jamon.annotations.Template(<a name="line.35"></a>
-<span class="sourceLineNo">036</span>  signature = "3EB466602F374B0C7D5132A481C93C4C",<a name="line.36"></a>
-<span class="sourceLineNo">037</span>  requiredArguments = {<a name="line.37"></a>
-<span class="sourceLineNo">038</span>    @org.jamon.annotations.Argument(name = "mWrap", type = "MetricsRegionServerWrapper")})<a name="line.38"></a>
-<span class="sourceLineNo">039</span>public class ServerMetricsTmpl<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  extends org.jamon.AbstractTemplateProxy<a name="line.40"></a>
-<span class="sourceLineNo">041</span>{<a name="line.41"></a>
-<span class="sourceLineNo">042</span>  <a name="line.42"></a>
-<span class="sourceLineNo">043</span>  public ServerMetricsTmpl(org.jamon.TemplateManager p_manager)<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>     super(p_manager);<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  }<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  <a name="line.47"></a>
-<span class="sourceLineNo">048</span>  protected ServerMetricsTmpl(String p_path)<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    super(p_path);<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  }<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  <a name="line.52"></a>
-<span class="sourceLineNo">053</span>  public ServerMetricsTmpl()<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  {<a name="line.54"></a>
-<span class="sourceLineNo">055</span>     super("/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl");<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  }<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  <a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public interface Intf<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    extends org.jamon.AbstractTemplateProxy.Intf<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  {<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    <a name="line.61"></a>
-<span class="sourceLineNo">062</span>    void renderNoFlush(final java.io.Writer jamonWriter) throws java.io.IOException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    <a name="line.63"></a>
-<span class="sourceLineNo">064</span>  }<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  public static class ImplData<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    extends org.jamon.AbstractTemplateProxy.ImplData<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    // 20, 1<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    public void setMWrap(MetricsRegionServerWrapper mWrap)<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      // 20, 1<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      m_mWrap = mWrap;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    }<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    public MetricsRegionServerWrapper getMWrap()<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      return m_mWrap;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    }<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    private MetricsRegionServerWrapper m_mWrap;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  @Override<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    return new ImplData();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  @Override public ImplData getImplData()<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    return (ImplData) super.getImplData();<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  <a name="line.89"></a>
-<span class="sourceLineNo">090</span>  <a name="line.90"></a>
-<span class="sourceLineNo">091</span>  @Override<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  public org.jamon.AbstractTemplateImpl constructImpl(Class&lt;? extends org.jamon.AbstractTemplateImpl&gt; p_class){<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    try<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      return p_class<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        .getConstructor(new Class [] { org.jamon.TemplateManager.class, ImplData.class })<a name="line.96"></a>
-<span class="sourceLineNo">097</span>        .newInstance(new Object [] { getTemplateManager(), getImplData()});<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    }<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    catch (RuntimeException e)<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      throw e;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    catch (Exception e)<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      throw new RuntimeException(e);<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>  <a name="line.108"></a>
-<span class="sourceLineNo">109</span>  @Override<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected org.jamon.AbstractTemplateImpl constructImpl(){<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    return new ServerMetricsTmplImpl(getTemplateManager(), getImplData());<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public org.jamon.Renderer makeRenderer(final MetricsRegionServerWrapper mWrap)<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return new org.jamon.AbstractRenderer() {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      @Override<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      public void renderTo(final java.io.Writer jamonWriter)<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        throws java.io.IOException<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        render(jamonWriter, mWrap);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    };<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  }<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  <a name="line.124"></a>
-<span class="sourceLineNo">125</span>  public void render(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    throws java.io.IOException<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    renderNoFlush(jamonWriter, mWrap);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    jamonWriter.flush();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public void renderNoFlush(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    throws java.io.IOException<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    ImplData implData = getImplData();<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    implData.setMWrap(mWrap);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    Intf instance = (Intf) getTemplateManager().constructImpl(this);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    instance.renderNoFlush(jamonWriter);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    reset();<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">010</span>// 26, 1<a name="line.10"></a>
+<span class="sourceLineNo">011</span>import org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper;<a name="line.11"></a>
+<span class="sourceLineNo">012</span>// 27, 1<a name="line.12"></a>
+<span class="sourceLineNo">013</span>import org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper;<a name="line.13"></a>
+<span class="sourceLineNo">014</span>// 28, 1<a name="line.14"></a>
+<span class="sourceLineNo">015</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.15"></a>
+<span class="sourceLineNo">016</span>// 29, 1<a name="line.16"></a>
+<span class="sourceLineNo">017</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.17"></a>
+<span class="sourceLineNo">018</span>// 30, 1<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import org.apache.hadoop.hbase.ServerName;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>// 31, 1<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>// 32, 1<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>// 33, 1<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ServerInfo;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>// 34, 1<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>// 35, 1<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.util.DirectMemoryUtils;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>// 36, 1<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.util.StringUtils;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>// 37, 1<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import com.codahale.metrics.Snapshot;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>// 38, 1<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.lang.management.ManagementFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>@org.jamon.annotations.Template(<a name="line.37"></a>
+<span class="sourceLineNo">038</span>  signature = "B9C61EF1325C0BBC55600C5CBC6C51A0",<a name="line.38"></a>
+<span class="sourceLineNo">039</span>  requiredArguments = {<a name="line.39"></a>
+<span class="sourceLineNo">040</span>    @org.jamon.annotations.Argument(name = "mWrap", type = "MetricsRegionServerWrapper"),<a name="line.40"></a>
+<span class="sourceLineNo">041</span>    @org.jamon.annotations.Argument(name = "mServerWrap", type = "MetricsHBaseServerWrapper")})<a name="line.41"></a>
+<span class="sourceLineNo">042</span>public class ServerMetricsTmpl<a name="line.42"></a>
+<span class="sourceLineNo">043</span>  extends org.jamon.AbstractTemplateProxy<a name="line.43"></a>
+<span class="sourceLineNo">044</span>{<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  <a name="line.45"></a>
+<span class="sourceLineNo">046</span>  public ServerMetricsTmpl(org.jamon.TemplateManager p_manager)<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>     super(p_manager);<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  }<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  <a name="line.50"></a>
+<span class="sourceLineNo">051</span>  protected ServerMetricsTmpl(String p_path)<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    super(p_path);<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  }<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  <a name="line.55"></a>
+<span class="sourceLineNo">056</span>  public ServerMetricsTmpl()<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>     super("/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl");<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  <a name="line.60"></a>
+<span class="sourceLineNo">061</span>  public interface Intf<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    extends org.jamon.AbstractTemplateProxy.Intf<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    <a name="line.64"></a>
+<span class="sourceLineNo">065</span>    void renderNoFlush(final java.io.Writer jamonWriter) throws java.io.IOException;<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>  public static class ImplData<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    extends org.jamon.AbstractTemplateProxy.ImplData<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    // 20, 1<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    public void setMWrap(MetricsRegionServerWrapper mWrap)<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      // 20, 1<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      m_mWrap = mWrap;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    }<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    public MetricsRegionServerWrapper getMWrap()<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      return m_mWrap;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    }<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    private MetricsRegionServerWrapper m_mWrap;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    // 21, 1<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    public void setMServerWrap(MetricsHBaseServerWrapper mServerWrap)<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      // 21, 1<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      m_mServerWrap = mServerWrap;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    }<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    public MetricsHBaseServerWrapper getMServerWrap()<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      return m_mServerWrap;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    }<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    private MetricsHBaseServerWrapper m_mServerWrap;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  }<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  @Override<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    return new ImplData();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  @Override public ImplData getImplData()<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    return (ImplData) super.getImplData();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  <a name="line.103"></a>
+<span class="sourceLineNo">104</span>  <a name="line.104"></a>
+<span class="sourceLineNo">105</span>  @Override<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  public org.jamon.AbstractTemplateImpl constructImpl(Class&lt;? extends org.jamon.AbstractTemplateImpl&gt; p_class){<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    try<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      return p_class<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        .getConstructor(new Class [] { org.jamon.TemplateManager.class, ImplData.class })<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        .newInstance(new Object [] { getTemplateManager(), getImplData()});<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    catch (RuntimeException e)<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      throw e;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    catch (Exception e)<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      throw new RuntimeException(e);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  <a name="line.122"></a>
+<span class="sourceLineNo">123</span>  @Override<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  protected org.jamon.AbstractTemplateImpl constructImpl(){<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    return new ServerMetricsTmplImpl(getTemplateManager(), getImplData());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  public org.jamon.Renderer makeRenderer(final MetricsRegionServerWrapper mWrap, final MetricsHBaseServerWrapper mServerWrap)<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    return new org.jamon.AbstractRenderer() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      public void renderTo(final java.io.Writer jamonWriter)<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        throws java.io.IOException<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        render(jamonWriter, mWrap, mServerWrap);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      }<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    };<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  <a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public void render(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap, final MetricsHBaseServerWrapper mServerWrap)<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    throws java.io.IOException<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    renderNoFlush(jamonWriter, mWrap, mServerWrap);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    jamonWriter.flush();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  }<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  public void renderNoFlush(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap, final MetricsHBaseServerWrapper mServerWrap)<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    throws java.io.IOException<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    ImplData implData = getImplData();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    implData.setMWrap(mWrap);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    implData.setMServerWrap(mServerWrap);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    Intf instance = (Intf) getTemplateManager().constructImpl(this);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    instance.renderNoFlush(jamonWriter);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    reset();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  <a name="line.155"></a>
+<span class="sourceLineNo">156</span>  <a name="line.156"></a>
+<span class="sourceLineNo">157</span>}<a name="line.157"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html
index 00d7a34..87dabfe 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html
@@ -11,143 +11,158 @@
 <span class="sourceLineNo">003</span><a name="line.3"></a>
 <span class="sourceLineNo">004</span>package org.apache.hadoop.hbase.tmpl.regionserver;<a name="line.4"></a>
 <span class="sourceLineNo">005</span><a name="line.5"></a>
-<span class="sourceLineNo">006</span>// 23, 1<a name="line.6"></a>
+<span class="sourceLineNo">006</span>// 24, 1<a name="line.6"></a>
 <span class="sourceLineNo">007</span>import java.util.*;<a name="line.7"></a>
-<span class="sourceLineNo">008</span>// 24, 1<a name="line.8"></a>
+<span class="sourceLineNo">008</span>// 25, 1<a name="line.8"></a>
 <span class="sourceLineNo">009</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.9"></a>
-<span class="sourceLineNo">010</span>// 25, 1<a name="line.10"></a>
-<span class="sourceLineNo">011</span>import org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper;<a name="line.11"></a>
-<span class="sourceLineNo">012</span>// 26, 1<a name="line.12"></a>
-<span class="sourceLineNo">013</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.13"></a>
-<span class="sourceLineNo">014</span>// 27, 1<a name="line.14"></a>
-<span class="sourceLineNo">015</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.15"></a>
-<span class="sourceLineNo">016</span>// 28, 1<a name="line.16"></a>
-<span class="sourceLineNo">017</span>import org.apache.hadoop.hbase.ServerName;<a name="line.17"></a>
-<span class="sourceLineNo">018</span>// 29, 1<a name="line.18"></a>
-<span class="sourceLineNo">019</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.19"></a>
-<span class="sourceLineNo">020</span>// 30, 1<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>// 31, 1<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ServerInfo;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>// 32, 1<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>// 33, 1<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.util.DirectMemoryUtils;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>// 34, 1<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.util.StringUtils;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>// 35, 1<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import com.codahale.metrics.Snapshot;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>// 36, 1<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.lang.management.ManagementFactory;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>@org.jamon.annotations.Template(<a name="line.35"></a>
-<span class="sourceLineNo">036</span>  signature = "3EB466602F374B0C7D5132A481C93C4C",<a name="line.36"></a>
-<span class="sourceLineNo">037</span>  requiredArguments = {<a name="line.37"></a>
-<span class="sourceLineNo">038</span>    @org.jamon.annotations.Argument(name = "mWrap", type = "MetricsRegionServerWrapper")})<a name="line.38"></a>
-<span class="sourceLineNo">039</span>public class ServerMetricsTmpl<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  extends org.jamon.AbstractTemplateProxy<a name="line.40"></a>
-<span class="sourceLineNo">041</span>{<a name="line.41"></a>
-<span class="sourceLineNo">042</span>  <a name="line.42"></a>
-<span class="sourceLineNo">043</span>  public ServerMetricsTmpl(org.jamon.TemplateManager p_manager)<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>     super(p_manager);<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  }<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  <a name="line.47"></a>
-<span class="sourceLineNo">048</span>  protected ServerMetricsTmpl(String p_path)<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    super(p_path);<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  }<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  <a name="line.52"></a>
-<span class="sourceLineNo">053</span>  public ServerMetricsTmpl()<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  {<a name="line.54"></a>
-<span class="sourceLineNo">055</span>     super("/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl");<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  }<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  <a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public interface Intf<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    extends org.jamon.AbstractTemplateProxy.Intf<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  {<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    <a name="line.61"></a>
-<span class="sourceLineNo">062</span>    void renderNoFlush(final java.io.Writer jamonWriter) throws java.io.IOException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    <a name="line.63"></a>
-<span class="sourceLineNo">064</span>  }<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  public static class ImplData<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    extends org.jamon.AbstractTemplateProxy.ImplData<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    // 20, 1<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    public void setMWrap(MetricsRegionServerWrapper mWrap)<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      // 20, 1<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      m_mWrap = mWrap;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    }<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    public MetricsRegionServerWrapper getMWrap()<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      return m_mWrap;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    }<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    private MetricsRegionServerWrapper m_mWrap;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  @Override<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    return new ImplData();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  @Override public ImplData getImplData()<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    return (ImplData) super.getImplData();<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  <a name="line.89"></a>
-<span class="sourceLineNo">090</span>  <a name="line.90"></a>
-<span class="sourceLineNo">091</span>  @Override<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  public org.jamon.AbstractTemplateImpl constructImpl(Class&lt;? extends org.jamon.AbstractTemplateImpl&gt; p_class){<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    try<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      return p_class<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        .getConstructor(new Class [] { org.jamon.TemplateManager.class, ImplData.class })<a name="line.96"></a>
-<span class="sourceLineNo">097</span>        .newInstance(new Object [] { getTemplateManager(), getImplData()});<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    }<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    catch (RuntimeException e)<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      throw e;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    catch (Exception e)<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      throw new RuntimeException(e);<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>  <a name="line.108"></a>
-<span class="sourceLineNo">109</span>  @Override<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected org.jamon.AbstractTemplateImpl constructImpl(){<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    return new ServerMetricsTmplImpl(getTemplateManager(), getImplData());<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public org.jamon.Renderer makeRenderer(final MetricsRegionServerWrapper mWrap)<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return new org.jamon.AbstractRenderer() {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      @Override<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      public void renderTo(final java.io.Writer jamonWriter)<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        throws java.io.IOException<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        render(jamonWriter, mWrap);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    };<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  }<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  <a name="line.124"></a>
-<span class="sourceLineNo">125</span>  public void render(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    throws java.io.IOException<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    renderNoFlush(jamonWriter, mWrap);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    jamonWriter.flush();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public void renderNoFlush(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    throws java.io.IOException<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    ImplData implData = getImplData();<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    implData.setMWrap(mWrap);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    Intf instance = (Intf) getTemplateManager().constructImpl(this);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    instance.renderNoFlush(jamonWriter);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    reset();<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">010</span>// 26, 1<a name="line.10"></a>
+<span class="sourceLineNo">011</span>import org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper;<a name="line.11"></a>
+<span class="sourceLineNo">012</span>// 27, 1<a name="line.12"></a>
+<span class="sourceLineNo">013</span>import org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper;<a name="line.13"></a>
+<span class="sourceLineNo">014</span>// 28, 1<a name="line.14"></a>
+<span class="sourceLineNo">015</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.15"></a>
+<span class="sourceLineNo">016</span>// 29, 1<a name="line.16"></a>
+<span class="sourceLineNo">017</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.17"></a>
+<span class="sourceLineNo">018</span>// 30, 1<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import org.apache.hadoop.hbase.ServerName;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>// 31, 1<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>// 32, 1<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>// 33, 1<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ServerInfo;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>// 34, 1<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>// 35, 1<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.util.DirectMemoryUtils;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>// 36, 1<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.util.StringUtils;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>// 37, 1<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import com.codahale.metrics.Snapshot;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>// 38, 1<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.lang.management.ManagementFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>@org.jamon.annotations.Template(<a name="line.37"></a>
+<span class="sourceLineNo">038</span>  signature = "B9C61EF1325C0BBC55600C5CBC6C51A0",<a name="line.38"></a>
+<span class="sourceLineNo">039</span>  requiredArguments = {<a name="line.39"></a>
+<span class="sourceLineNo">040</span>    @org.jamon.annotations.Argument(name = "mWrap", type = "MetricsRegionServerWrapper"),<a name="line.40"></a>
+<span class="sourceLineNo">041</span>    @org.jamon.annotations.Argument(name = "mServerWrap", type = "MetricsHBaseServerWrapper")})<a name="line.41"></a>
+<span class="sourceLineNo">042</span>public class ServerMetricsTmpl<a name="line.42"></a>
+<span class="sourceLineNo">043</span>  extends org.jamon.AbstractTemplateProxy<a name="line.43"></a>
+<span class="sourceLineNo">044</span>{<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  <a name="line.45"></a>
+<span class="sourceLineNo">046</span>  public ServerMetricsTmpl(org.jamon.TemplateManager p_manager)<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>     super(p_manager);<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  }<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  <a name="line.50"></a>
+<span class="sourceLineNo">051</span>  protected ServerMetricsTmpl(String p_path)<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    super(p_path);<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  }<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  <a name="line.55"></a>
+<span class="sourceLineNo">056</span>  public ServerMetricsTmpl()<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>     super("/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl");<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  <a name="line.60"></a>
+<span class="sourceLineNo">061</span>  public interface Intf<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    extends org.jamon.AbstractTemplateProxy.Intf<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    <a name="line.64"></a>
+<span class="sourceLineNo">065</span>    void renderNoFlush(final java.io.Writer jamonWriter) throws java.io.IOException;<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>  public static class ImplData<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    extends org.jamon.AbstractTemplateProxy.ImplData<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    // 20, 1<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    public void setMWrap(MetricsRegionServerWrapper mWrap)<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      // 20, 1<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      m_mWrap = mWrap;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    }<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    public MetricsRegionServerWrapper getMWrap()<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      return m_mWrap;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    }<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    private MetricsRegionServerWrapper m_mWrap;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    // 21, 1<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    public void setMServerWrap(MetricsHBaseServerWrapper mServerWrap)<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      // 21, 1<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      m_mServerWrap = mServerWrap;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    }<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    public MetricsHBaseServerWrapper getMServerWrap()<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      return m_mServerWrap;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    }<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    private MetricsHBaseServerWrapper m_mServerWrap;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  }<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  @Override<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    return new ImplData();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  @Override public ImplData getImplData()<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    return (ImplData) super.getImplData();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  <a name="line.103"></a>
+<span class="sourceLineNo">104</span>  <a name="line.104"></a>
+<span class="sourceLineNo">105</span>  @Override<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  public org.jamon.AbstractTemplateImpl constructImpl(Class&lt;? extends org.jamon.AbstractTemplateImpl&gt; p_class){<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    try<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      return p_class<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        .getConstructor(new Class [] { org.jamon.TemplateManager.class, ImplData.class })<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        .newInstance(new Object [] { getTemplateManager(), getImplData()});<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    catch (RuntimeException e)<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      throw e;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    catch (Exception e)<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      throw new RuntimeException(e);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  <a name="line.122"></a>
+<span class="sourceLineNo">123</span>  @Override<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  protected org.jamon.AbstractTemplateImpl constructImpl(){<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    return new ServerMetricsTmplImpl(getTemplateManager(), getImplData());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  public org.jamon.Renderer makeRenderer(final MetricsRegionServerWrapper mWrap, final MetricsHBaseServerWrapper mServerWrap)<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    return new org.jamon.AbstractRenderer() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      public void renderTo(final java.io.Writer jamonWriter)<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        throws java.io.IOException<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        render(jamonWriter, mWrap, mServerWrap);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      }<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    };<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  <a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public void render(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap, final MetricsHBaseServerWrapper mServerWrap)<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    throws java.io.IOException<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    renderNoFlush(jamonWriter, mWrap, mServerWrap);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    jamonWriter.flush();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  }<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  public void renderNoFlush(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap, final MetricsHBaseServerWrapper mServerWrap)<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    throws java.io.IOException<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    ImplData implData = getImplData();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    implData.setMWrap(mWrap);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    implData.setMServerWrap(mServerWrap);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    Intf instance = (Intf) getTemplateManager().constructImpl(this);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    instance.renderNoFlush(jamonWriter);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    reset();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  <a name="line.155"></a>
+<span class="sourceLineNo">156</span>  <a name="line.156"></a>
+<span class="sourceLineNo">157</span>}<a name="line.157"></a>
 
 
 


[21/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html
index 55e5e05..566b26d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html
@@ -11,244 +11,253 @@
 <span class="sourceLineNo">003</span><a name="line.3"></a>
 <span class="sourceLineNo">004</span>package org.apache.hadoop.hbase.tmpl.regionserver;<a name="line.4"></a>
 <span class="sourceLineNo">005</span><a name="line.5"></a>
-<span class="sourceLineNo">006</span>// 23, 1<a name="line.6"></a>
+<span class="sourceLineNo">006</span>// 24, 1<a name="line.6"></a>
 <span class="sourceLineNo">007</span>import java.util.*;<a name="line.7"></a>
-<span class="sourceLineNo">008</span>// 24, 1<a name="line.8"></a>
+<span class="sourceLineNo">008</span>// 25, 1<a name="line.8"></a>
 <span class="sourceLineNo">009</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.9"></a>
-<span class="sourceLineNo">010</span>// 25, 1<a name="line.10"></a>
-<span class="sourceLineNo">011</span>import org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper;<a name="line.11"></a>
-<span class="sourceLineNo">012</span>// 26, 1<a name="line.12"></a>
-<span class="sourceLineNo">013</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.13"></a>
-<span class="sourceLineNo">014</span>// 27, 1<a name="line.14"></a>
-<span class="sourceLineNo">015</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.15"></a>
-<span class="sourceLineNo">016</span>// 28, 1<a name="line.16"></a>
-<span class="sourceLineNo">017</span>import org.apache.hadoop.hbase.ServerName;<a name="line.17"></a>
-<span class="sourceLineNo">018</span>// 29, 1<a name="line.18"></a>
-<span class="sourceLineNo">019</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.19"></a>
-<span class="sourceLineNo">020</span>// 30, 1<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>// 31, 1<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ServerInfo;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>// 32, 1<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>// 33, 1<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.util.DirectMemoryUtils;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>// 34, 1<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.util.StringUtils;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>// 35, 1<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import com.codahale.metrics.Snapshot;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>// 36, 1<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.lang.management.ManagementFactory;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>public class ServerMetricsTmplImpl<a name="line.35"></a>
-<span class="sourceLineNo">036</span>  extends org.jamon.AbstractTemplateImpl<a name="line.36"></a>
-<span class="sourceLineNo">037</span>  implements org.apache.hadoop.hbase.tmpl.regionserver.ServerMetricsTmpl.Intf<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>{<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  private final MetricsRegionServerWrapper mWrap;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>  protected static org.apache.hadoop.hbase.tmpl.regionserver.ServerMetricsTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.regionserver.ServerMetricsTmpl.ImplData p_implData)<a name="line.41"></a>
-<span class="sourceLineNo">042</span>  {<a name="line.42"></a>
-<span class="sourceLineNo">043</span>    return p_implData;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  }<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  public ServerMetricsTmplImpl(org.jamon.TemplateManager p_templateManager, org.apache.hadoop.hbase.tmpl.regionserver.ServerMetricsTmpl.ImplData p_implData)<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  {<a name="line.46"></a>
-<span class="sourceLineNo">047</span>    super(p_templateManager, __jamon_setOptionalArguments(p_implData));<a name="line.47"></a>
-<span class="sourceLineNo">048</span>    mWrap = p_implData.getMWrap();<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  }<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  <a name="line.50"></a>
-<span class="sourceLineNo">051</span>  @Override public void renderNoFlush(final java.io.Writer jamonWriter)<a name="line.51"></a>
-<span class="sourceLineNo">052</span>    throws java.io.IOException<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  {<a name="line.53"></a>
-<span class="sourceLineNo">054</span>    // 38, 1<a name="line.54"></a>
-<span class="sourceLineNo">055</span>    jamonWriter.write("&lt;div class=\"tabbable\"&gt;\n    &lt;ul class=\"nav nav-pills\"&gt;\n        &lt;li class=\"active\"&gt;&lt;a href=\"#tab_baseStats\" data-toggle=\"tab\"&gt;Base Stats&lt;/a&gt;&lt;/li&gt;\n        &lt;li class=\"\"&gt;&lt;a href=\"#tab_memoryStats\" data-toggle=\"tab\"&gt;Memory&lt;/a&gt;&lt;/li&gt;\n        &lt;li class=\"\"&gt;&lt;a href=\"#tab_requestStats\" data-toggle=\"tab\"&gt;Requests&lt;/a&gt;&lt;/li&gt;\n        &lt;li class=\"\"&gt;&lt;a href=\"#tab_walStats\" data-toggle=\"tab\"&gt;WALs&lt;/a&gt;&lt;/li&gt;\n        &lt;li class=\"\"&gt;&lt;a href=\"#tab_storeStats\" data-toggle=\"tab\"&gt;Storefiles&lt;/a&gt;&lt;/li&gt;\n        &lt;li class=\"\"&gt;&lt;a href=\"#tab_queueStats\" data-toggle=\"tab\"&gt;Queues&lt;/a&gt;&lt;/li&gt;\n    &lt;/ul&gt;\n    &lt;div class=\"tab-content\" style=\"padding-bottom: 9px; border-bottom: 1px solid #ddd;\"&gt;\n        &lt;div class=\"tab-pane active\" id=\"tab_baseStats\
 "&gt;\n            ");<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    // 49, 13<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>      // 49, 13<a name="line.58"></a>
-<span class="sourceLineNo">059</span>      __jamon_innerUnit__baseStats(jamonWriter, mWrap );<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    }<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    // 49, 43<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    jamonWriter.write("\n        &lt;/div&gt;\n        &lt;div class=\"tab-pane\" id=\"tab_memoryStats\"&gt;\n            ");<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    // 52, 13<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    {<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      // 52, 13<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      __jamon_innerUnit__memoryStats(jamonWriter, mWrap );<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    }<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    // 52, 45<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    jamonWriter.write("\n        &lt;/div&gt;\n        &lt;div class=\"tab-pane\" id=\"tab_requestStats\"&gt;\n            ");<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    // 55, 13<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      // 55, 13<a name="line.72"></a>
-<span class="sourceLineNo">073</span>      __jamon_innerUnit__requestStats(jamonWriter, mWrap );<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    }<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    // 55, 46<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    jamonWriter.write("\n        &lt;/div&gt;\n        &lt;div class=\"tab-pane\" id=\"tab_walStats\"&gt;\n            ");<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    // 58, 13<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      // 58, 13<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      __jamon_innerUnit__walStats(jamonWriter, mWrap );<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    }<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    // 58, 42<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    jamonWriter.write("\n        &lt;/div&gt;\n        &lt;div class=\"tab-pane\" id=\"tab_storeStats\"&gt;\n            ");<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    // 61, 13<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      // 61, 13<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      __jamon_innerUnit__storeStats(jamonWriter, mWrap );<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    }<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 61, 44<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    jamonWriter.write("\n        &lt;/div&gt;\n        &lt;div class=\"tab-pane\" id=\"tab_queueStats\"&gt;\n            ");<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    // 64, 13<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      // 64, 13<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      __jamon_innerUnit__queueStats(jamonWriter, mWrap  );<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    // 64, 45<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    jamonWriter.write("\n        &lt;/div&gt;\n    &lt;/div&gt;\n&lt;/div&gt;\n\n");<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  <a name="line.99"></a>
-<span class="sourceLineNo">100</span>  <a name="line.100"></a>
-<span class="sourceLineNo">101</span>  // 166, 1<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private void __jamon_innerUnit__requestStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    throws java.io.IOException<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    // 170, 1<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    jamonWriter.write("&lt;table class=\"table table-striped\"&gt;\n&lt;tr&gt;\n    &lt;th&gt;Request Per Second&lt;/th&gt;\n    &lt;th&gt;Read Request Count&lt;/th&gt;\n    &lt;th&gt;Write Request Count&lt;/th&gt;\n&lt;/tr&gt;\n&lt;tr&gt;\n    &lt;td&gt;");<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    // 177, 9<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%.0f", mWrap.getRequestsPerSecond())), jamonWriter);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    // 177, 66<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;td&gt;");<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // 178, 9<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getReadRequestsCount()), jamonWriter);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    // 178, 43<a name="line.113"></a>
+<span class="sourceLineNo">010</span>// 26, 1<a name="line.10"></a>
+<span class="sourceLineNo">011</span>import org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper;<a name="line.11"></a>
+<span class="sourceLineNo">012</span>// 27, 1<a name="line.12"></a>
+<span class="sourceLineNo">013</span>import org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper;<a name="line.13"></a>
+<span class="sourceLineNo">014</span>// 28, 1<a name="line.14"></a>
+<span class="sourceLineNo">015</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.15"></a>
+<span class="sourceLineNo">016</span>// 29, 1<a name="line.16"></a>
+<span class="sourceLineNo">017</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.17"></a>
+<span class="sourceLineNo">018</span>// 30, 1<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import org.apache.hadoop.hbase.ServerName;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>// 31, 1<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>// 32, 1<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>// 33, 1<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ServerInfo;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>// 34, 1<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>// 35, 1<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.util.DirectMemoryUtils;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>// 36, 1<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.util.StringUtils;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>// 37, 1<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import com.codahale.metrics.Snapshot;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>// 38, 1<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.lang.management.ManagementFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>public class ServerMetricsTmplImpl<a name="line.37"></a>
+<span class="sourceLineNo">038</span>  extends org.jamon.AbstractTemplateImpl<a name="line.38"></a>
+<span class="sourceLineNo">039</span>  implements org.apache.hadoop.hbase.tmpl.regionserver.ServerMetricsTmpl.Intf<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>{<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  private final MetricsRegionServerWrapper mWrap;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>  private final MetricsHBaseServerWrapper mServerWrap;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  protected static org.apache.hadoop.hbase.tmpl.regionserver.ServerMetricsTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.regionserver.ServerMetricsTmpl.ImplData p_implData)<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  {<a name="line.45"></a>
+<span class="sourceLineNo">046</span>    return p_implData;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  }<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  public ServerMetricsTmplImpl(org.jamon.TemplateManager p_templateManager, org.apache.hadoop.hbase.tmpl.regionserver.ServerMetricsTmpl.ImplData p_implData)<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  {<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    super(p_templateManager, __jamon_setOptionalArguments(p_implData));<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    mWrap = p_implData.getMWrap();<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    mServerWrap = p_implData.getMServerWrap();<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  }<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  <a name="line.54"></a>
+<span class="sourceLineNo">055</span>  @Override public void renderNoFlush(final java.io.Writer jamonWriter)<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    throws java.io.IOException<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    // 40, 1<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    jamonWriter.write("&lt;div class=\"tabbable\"&gt;\n    &lt;ul class=\"nav nav-pills\"&gt;\n        &lt;li class=\"active\"&gt;&lt;a href=\"#tab_baseStats\" data-toggle=\"tab\"&gt;Base Stats&lt;/a&gt;&lt;/li&gt;\n        &lt;li class=\"\"&gt;&lt;a href=\"#tab_memoryStats\" data-toggle=\"tab\"&gt;Memory&lt;/a&gt;&lt;/li&gt;\n        &lt;li class=\"\"&gt;&lt;a href=\"#tab_requestStats\" data-toggle=\"tab\"&gt;Requests&lt;/a&gt;&lt;/li&gt;\n        &lt;li class=\"\"&gt;&lt;a href=\"#tab_walStats\" data-toggle=\"tab\"&gt;WALs&lt;/a&gt;&lt;/li&gt;\n        &lt;li class=\"\"&gt;&lt;a href=\"#tab_storeStats\" data-toggle=\"tab\"&gt;Storefiles&lt;/a&gt;&lt;/li&gt;\n        &lt;li class=\"\"&gt;&lt;a href=\"#tab_queueStats\" data-toggle=\"tab\"&gt;Queues&lt;/a&gt;&lt;/li&gt;\n    &lt;/ul&gt;\n    &lt;div class=\"tab-content\" style=\"padding-bottom: 9px; border-bottom: 1px solid #ddd;\"&gt;\n        &lt;div class=\"tab-pane active\" id=\"tab_baseStats\
 "&gt;\n            ");<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    // 51, 13<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      // 51, 13<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      __jamon_innerUnit__baseStats(jamonWriter, mWrap );<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    }<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    // 51, 43<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    jamonWriter.write("\n        &lt;/div&gt;\n        &lt;div class=\"tab-pane\" id=\"tab_memoryStats\"&gt;\n            ");<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    // 54, 13<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      // 54, 13<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      __jamon_innerUnit__memoryStats(jamonWriter, mWrap );<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    }<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    // 54, 45<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    jamonWriter.write("\n        &lt;/div&gt;\n        &lt;div class=\"tab-pane\" id=\"tab_requestStats\"&gt;\n            ");<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    // 57, 13<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      // 57, 13<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      __jamon_innerUnit__requestStats(jamonWriter, mWrap );<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    }<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    // 57, 46<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    jamonWriter.write("\n        &lt;/div&gt;\n        &lt;div class=\"tab-pane\" id=\"tab_walStats\"&gt;\n            ");<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    // 60, 13<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      // 60, 13<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      __jamon_innerUnit__walStats(jamonWriter, mWrap );<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    }<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    // 60, 42<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    jamonWriter.write("\n        &lt;/div&gt;\n        &lt;div class=\"tab-pane\" id=\"tab_storeStats\"&gt;\n            ");<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    // 63, 13<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      // 63, 13<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      __jamon_innerUnit__storeStats(jamonWriter, mWrap );<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    // 63, 44<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    jamonWriter.write("\n        &lt;/div&gt;\n        &lt;div class=\"tab-pane\" id=\"tab_queueStats\"&gt;\n            ");<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    // 66, 13<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      // 66, 13<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      __jamon_innerUnit__queueStats(jamonWriter, mWrap, mServerWrap);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    // 66, 72<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    jamonWriter.write("\n        &lt;/div&gt;\n    &lt;/div&gt;\n&lt;/div&gt;\n\n");<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  <a name="line.103"></a>
+<span class="sourceLineNo">104</span>  <a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // 168, 1<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private void __jamon_innerUnit__requestStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    throws java.io.IOException<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    // 172, 1<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    jamonWriter.write("&lt;table class=\"table table-striped\"&gt;\n&lt;tr&gt;\n    &lt;th&gt;Request Per Second&lt;/th&gt;\n    &lt;th&gt;Read Request Count&lt;/th&gt;\n    &lt;th&gt;Write Request Count&lt;/th&gt;\n&lt;/tr&gt;\n&lt;tr&gt;\n    &lt;td&gt;");<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    // 179, 9<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%.0f", mWrap.getRequestsPerSecond())), jamonWriter);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    // 179, 66<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;td&gt;");<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    // 179, 9<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getWriteRequestsCount()), jamonWriter);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    // 179, 44<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    jamonWriter.write("&lt;/td&gt;\n&lt;/tr&gt;\n&lt;/table&gt;\n");<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>  <a name="line.121"></a>
-<span class="sourceLineNo">122</span>  // 184, 1<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private void __jamon_innerUnit__queueStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    throws java.io.IOException<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    // 188, 1<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    jamonWriter.write("&lt;table class=\"table table-striped\"&gt;\n&lt;tr&gt;\n    &lt;th&gt;Compaction Queue Size&lt;/th&gt;\n    &lt;th&gt;Flush Queue Size&lt;/th&gt;\n\n&lt;/tr&gt;\n&lt;tr&gt;\n    &lt;td&gt;");<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 195, 9<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getCompactionQueueSize()), jamonWriter);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    // 195, 45<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;td&gt;");<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    // 196, 9<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getFlushQueueSize()), jamonWriter);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    // 196, 40<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    jamonWriter.write("&lt;/td&gt;\n&lt;/tr&gt;\n&lt;/table&gt;\n");<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>  // 92, 1<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private void __jamon_innerUnit__memoryStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    throws java.io.IOException<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    // 96, 1<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    jamonWriter.write("&lt;table class=\"table table-striped\"&gt;\n&lt;tr&gt;\n    &lt;tr&gt;\n        &lt;th&gt;Used Heap&lt;/th&gt;\n        &lt;th&gt;Max Heap&lt;/th&gt;\n        &lt;th&gt;Direct Memory Used&lt;/th&gt;\n        &lt;th&gt;Direct Memory Configured&lt;/th&gt;\n        &lt;th&gt;Memstore Size&lt;/th&gt;\n    &lt;/tr&gt;\n&lt;/tr&gt;\n&lt;tr&gt;\n    &lt;td&gt;\n        ");<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // 108, 9<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed())), jamonWriter);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    // 108, 111<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    jamonWriter.write("\n    &lt;/td&gt;\n    &lt;td&gt;\n        ");<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    // 111, 9<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getMax())), jamonWriter);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    // 111, 110<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    jamonWriter.write("\n    &lt;/td&gt;\n    &lt;td&gt;\n        ");<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    // 114, 9<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(DirectMemoryUtils.getDirectMemoryUsage())), jamonWriter);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // 114, 85<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    jamonWriter.write("\n    &lt;/td&gt;\n    &lt;td&gt;\n        ");<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    // 117, 9<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(DirectMemoryUtils.getDirectMemorySize())), jamonWriter);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    // 117, 84<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    jamonWriter.write("\n    &lt;/td&gt;\n    &lt;td&gt;");<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    // 119, 9<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getMemstoreSize())), jamonWriter);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    // 119, 68<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    jamonWriter.write("&lt;/td&gt;\n&lt;/tr&gt;\n&lt;/table&gt;\n");<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  <a name="line.166"></a>
-<span class="sourceLineNo">167</span>  <a name="line.167"></a>
-<span class="sourceLineNo">168</span>  // 69, 1<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  private void __jamon_innerUnit__baseStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    throws java.io.IOException<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    // 73, 1<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    jamonWriter.write("&lt;table class=\"table table-striped\"&gt;\n    &lt;tr&gt;\n\n        &lt;th&gt;Requests Per Second&lt;/th&gt;\n        &lt;th&gt;Num. Regions&lt;/th&gt;\n        &lt;th&gt;Block locality&lt;/th&gt;\n        &lt;th&gt;Block locality (Secondary replicas)&lt;/th&gt;\n        &lt;th&gt;Slow WAL Append Count&lt;/th&gt;\n    &lt;/tr&gt;\n    &lt;tr&gt;\n        &lt;td&gt;");<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    // 83, 13<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%.0f", mWrap.getRequestsPerSecond())), jamonWriter);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    // 83, 70<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    jamonWriter.write("&lt;/td&gt;\n        &lt;td&gt;");<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    // 84, 13<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getNumOnlineRegions()), jamonWriter);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    // 84, 46<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    jamonWriter.write("&lt;/td&gt;\n        &lt;td&gt;");<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    // 85, 13<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getPercentFileLocal()), jamonWriter);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    // 85, 46<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    jamonWriter.write("&lt;/td&gt;\n        &lt;td&gt;");<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // 86, 13<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getPercentFileLocalSecondaryRegions()), jamonWriter);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    // 86, 62<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    jamonWriter.write("&lt;/td&gt;\n        &lt;td&gt;");<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    // 87, 13<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getNumWALSlowAppend()), jamonWriter);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    // 87, 46<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;/tr&gt;\n&lt;/table&gt;\n");<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  <a name="line.195"></a>
-<span class="sourceLineNo">196</span>  <a name="line.196"></a>
-<span class="sourceLineNo">197</span>  // 124, 1<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  private void __jamon_innerUnit__walStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    throws java.io.IOException<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    // 128, 1<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    jamonWriter.write("&lt;table class=\"table table-striped\"&gt;\n&lt;tr&gt;\n    &lt;tr&gt;\n        &lt;th&gt;Num. WAL Files&lt;/th&gt;\n        &lt;th&gt;Size. WAL Files (bytes)&lt;/th&gt;\n    &lt;/tr&gt;\n&lt;/tr&gt;\n&lt;tr&gt;\n    &lt;td&gt;");<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    // 136, 9<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getNumWALFiles()), jamonWriter);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    // 136, 37<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;td&gt;");<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    // 137, 9<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getWALFileSize()), jamonWriter);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // 137, 37<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    jamonWriter.write("&lt;/td&gt;\n&lt;/tr&gt;\n&lt;/table&gt;\n");<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  <a name="line.212"></a>
-<span class="sourceLineNo">213</span>  <a name="line.213"></a>
-<span class="sourceLineNo">214</span>  // 142, 1<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  private void __jamon_innerUnit__storeStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    throws java.io.IOException<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    // 146, 1<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    jamonWriter.write("&lt;table class=\"table table-striped\"&gt;\n&lt;tr&gt;\n\n    &lt;th&gt;Num. Stores&lt;/th&gt;\n    &lt;th&gt;Num. Storefiles&lt;/th&gt;\n    &lt;th&gt;Root Index Size (bytes)&lt;/th&gt;\n    &lt;th&gt;Index Size (bytes)&lt;/th&gt;\n    &lt;th&gt;Bloom Size (bytes)&lt;/th&gt;\n&lt;/tr&gt;\n&lt;tr&gt;\n    &lt;td&gt;");<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    // 156, 9<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getNumStores())), jamonWriter);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    // 156, 65<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;td&gt;");<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    // 157, 9<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getNumStoreFiles())), jamonWriter);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    // 157, 69<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;td&gt;");<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    // 158, 9<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getStoreFileIndexSize())), jamonWriter);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 158, 74<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;td&gt;");<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    // 159, 9<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getTotalStaticIndexSize())), jamonWriter);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    // 159, 76<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;td&gt;");<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    // 160, 9<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getTotalStaticBloomSize())), jamonWriter);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    // 160, 76<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    jamonWriter.write("&lt;/td&gt;\n&lt;/tr&gt;\n&lt;/table&gt;\n");<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>  <a name="line.242"></a>
-<span class="sourceLineNo">243</span>}<a name="line.243"></a>
+<span class="sourceLineNo">115</span>    // 180, 9<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getReadRequestsCount()), jamonWriter);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // 180, 43<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;td&gt;");<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    // 181, 9<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getWriteRequestsCount()), jamonWriter);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    // 181, 44<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    jamonWriter.write("&lt;/td&gt;\n&lt;/tr&gt;\n&lt;/table&gt;\n");<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>  <a name="line.125"></a>
+<span class="sourceLineNo">126</span>  // 186, 1<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  private void __jamon_innerUnit__queueStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap, final MetricsHBaseServerWrapper mServerWrap)<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    throws java.io.IOException<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    // 191, 1<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    jamonWriter.write("&lt;table class=\"table table-striped\"&gt;\n&lt;tr&gt;\n    &lt;th&gt;Compaction Queue Size&lt;/th&gt;\n    &lt;th&gt;Flush Queue Size&lt;/th&gt;\n    &lt;th&gt;Call Queue Size (bytes)&lt;/th&gt;\n\n&lt;/tr&gt;\n&lt;tr&gt;\n    &lt;td&gt;");<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    // 199, 9<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getCompactionQueueSize()), jamonWriter);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    // 199, 45<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;td&gt;");<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    // 200, 9<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getFlushQueueSize()), jamonWriter);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    // 200, 40<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;td&gt;");<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // 201, 9<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.TraditionalBinaryPrefix.long2String(mServerWrap.getTotalQueueSize(),<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      "", 1)), jamonWriter);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    // 202, 16<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    jamonWriter.write("&lt;/td&gt;\n&lt;/tr&gt;\n&lt;/table&gt;\n");<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>  // 94, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private void __jamon_innerUnit__memoryStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    throws java.io.IOException<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    // 98, 1<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    jamonWriter.write("&lt;table class=\"table table-striped\"&gt;\n&lt;tr&gt;\n    &lt;tr&gt;\n        &lt;th&gt;Used Heap&lt;/th&gt;\n        &lt;th&gt;Max Heap&lt;/th&gt;\n        &lt;th&gt;Direct Memory Used&lt;/th&gt;\n        &lt;th&gt;Direct Memory Configured&lt;/th&gt;\n        &lt;th&gt;Memstore Size&lt;/th&gt;\n    &lt;/tr&gt;\n&lt;/tr&gt;\n&lt;tr&gt;\n    &lt;td&gt;\n        ");<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // 110, 9<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed())), jamonWriter);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    // 110, 111<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    jamonWriter.write("\n    &lt;/td&gt;\n    &lt;td&gt;\n        ");<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    // 113, 9<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getMax())), jamonWriter);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    // 113, 110<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    jamonWriter.write("\n    &lt;/td&gt;\n    &lt;td&gt;\n        ");<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // 116, 9<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(DirectMemoryUtils.getDirectMemoryUsage())), jamonWriter);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    // 116, 85<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    jamonWriter.write("\n    &lt;/td&gt;\n    &lt;td&gt;\n        ");<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    // 119, 9<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(DirectMemoryUtils.getDirectMemorySize())), jamonWriter);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    // 119, 84<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    jamonWriter.write("\n    &lt;/td&gt;\n    &lt;td&gt;");<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    // 121, 9<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getMemstoreSize())), jamonWriter);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    // 121, 68<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    jamonWriter.write("&lt;/td&gt;\n&lt;/tr&gt;\n&lt;/table&gt;\n");<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>  <a name="line.176"></a>
+<span class="sourceLineNo">177</span>  // 71, 1<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  private void __jamon_innerUnit__baseStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    throws java.io.IOException<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // 75, 1<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    jamonWriter.write("&lt;table class=\"table table-striped\"&gt;\n    &lt;tr&gt;\n\n        &lt;th&gt;Requests Per Second&lt;/th&gt;\n        &lt;th&gt;Num. Regions&lt;/th&gt;\n        &lt;th&gt;Block locality&lt;/th&gt;\n        &lt;th&gt;Block locality (Secondary replicas)&lt;/th&gt;\n        &lt;th&gt;Slow WAL Append Count&lt;/th&gt;\n    &lt;/tr&gt;\n    &lt;tr&gt;\n        &lt;td&gt;");<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    // 85, 13<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(String.format("%.0f", mWrap.getRequestsPerSecond())), jamonWriter);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    // 85, 70<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    jamonWriter.write("&lt;/td&gt;\n        &lt;td&gt;");<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    // 86, 13<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getNumOnlineRegions()), jamonWriter);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    // 86, 46<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    jamonWriter.write("&lt;/td&gt;\n        &lt;td&gt;");<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    // 87, 13<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getPercentFileLocal()), jamonWriter);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // 87, 46<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    jamonWriter.write("&lt;/td&gt;\n        &lt;td&gt;");<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    // 88, 13<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getPercentFileLocalSecondaryRegions()), jamonWriter);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    // 88, 62<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    jamonWriter.write("&lt;/td&gt;\n        &lt;td&gt;");<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    // 89, 13<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getNumWALSlowAppend()), jamonWriter);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // 89, 46<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;/tr&gt;\n&lt;/table&gt;\n");<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>  <a name="line.204"></a>
+<span class="sourceLineNo">205</span>  <a name="line.205"></a>
+<span class="sourceLineNo">206</span>  // 126, 1<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  private void __jamon_innerUnit__walStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    throws java.io.IOException<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    // 130, 1<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    jamonWriter.write("&lt;table class=\"table table-striped\"&gt;\n&lt;tr&gt;\n    &lt;tr&gt;\n        &lt;th&gt;Num. WAL Files&lt;/th&gt;\n        &lt;th&gt;Size. WAL Files (bytes)&lt;/th&gt;\n    &lt;/tr&gt;\n&lt;/tr&gt;\n&lt;tr&gt;\n    &lt;td&gt;");<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    // 138, 9<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getNumWALFiles()), jamonWriter);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    // 138, 37<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;td&gt;");<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    // 139, 9<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(mWrap.getWALFileSize()), jamonWriter);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    // 139, 37<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    jamonWriter.write("&lt;/td&gt;\n&lt;/tr&gt;\n&lt;/table&gt;\n");<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  }<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  <a name="line.221"></a>
+<span class="sourceLineNo">222</span>  <a name="line.222"></a>
+<span class="sourceLineNo">223</span>  // 144, 1<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  private void __jamon_innerUnit__storeStats(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    throws java.io.IOException<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    // 148, 1<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    jamonWriter.write("&lt;table class=\"table table-striped\"&gt;\n&lt;tr&gt;\n\n    &lt;th&gt;Num. Stores&lt;/th&gt;\n    &lt;th&gt;Num. Storefiles&lt;/th&gt;\n    &lt;th&gt;Root Index Size (bytes)&lt;/th&gt;\n    &lt;th&gt;Index Size (bytes)&lt;/th&gt;\n    &lt;th&gt;Bloom Size (bytes)&lt;/th&gt;\n&lt;/tr&gt;\n&lt;tr&gt;\n    &lt;td&gt;");<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    // 158, 9<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getNumStores())), jamonWriter);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    // 158, 65<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;td&gt;");<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    // 159, 9<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getNumStoreFiles())), jamonWriter);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    // 159, 69<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;td&gt;");<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    // 160, 9<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getStoreFileIndexSize())), jamonWriter);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    // 160, 74<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;td&gt;");<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    // 161, 9<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getTotalStaticIndexSize())), jamonWriter);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    // 161, 76<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    jamonWriter.write("&lt;/td&gt;\n    &lt;td&gt;");<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    // 162, 9<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(StringUtils.humanReadableInt(mWrap.getTotalStaticBloomSize())), jamonWriter);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // 162, 76<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    jamonWriter.write("&lt;/td&gt;\n&lt;/tr&gt;\n&lt;/table&gt;\n");<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  <a name="line.250"></a>
+<span class="sourceLineNo">251</span>  <a name="line.251"></a>
+<span class="sourceLineNo">252</span>}<a name="line.252"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html
deleted file mode 100644
index 75ea32e..0000000
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html
+++ /dev/null
@@ -1,194 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
-<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
-<span class="sourceLineNo">009</span> *<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *<a name="line.11"></a>
-<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
-<span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.util;<a name="line.18"></a>
-<span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import java.util.Collection;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.util.concurrent.ConcurrentLinkedQueue;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.25"></a>
-<span class="sourceLineNo">026</span><a name="line.26"></a>
-<span class="sourceLineNo">027</span>/**<a name="line.27"></a>
-<span class="sourceLineNo">028</span> * A ConcurrentLinkedQueue that enforces a maximum queue size.<a name="line.28"></a>
-<span class="sourceLineNo">029</span> */<a name="line.29"></a>
-<span class="sourceLineNo">030</span>@InterfaceAudience.Private<a name="line.30"></a>
-<span class="sourceLineNo">031</span>@InterfaceStability.Stable<a name="line.31"></a>
-<span class="sourceLineNo">032</span>public class BoundedConcurrentLinkedQueue&lt;T&gt; extends ConcurrentLinkedQueue&lt;T&gt; {<a name="line.32"></a>
-<span class="sourceLineNo">033</span>  private static final long serialVersionUID = 1L;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>  private final AtomicLong size = new AtomicLong(0L);<a name="line.34"></a>
-<span class="sourceLineNo">035</span>  private final long maxSize;<a name="line.35"></a>
-<span class="sourceLineNo">036</span><a name="line.36"></a>
-<span class="sourceLineNo">037</span>  public BoundedConcurrentLinkedQueue() {<a name="line.37"></a>
-<span class="sourceLineNo">038</span>    this(Long.MAX_VALUE);<a name="line.38"></a>
-<span class="sourceLineNo">039</span>  }<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>  public BoundedConcurrentLinkedQueue(long maxSize) {<a name="line.41"></a>
-<span class="sourceLineNo">042</span>    super();<a name="line.42"></a>
-<span class="sourceLineNo">043</span>    this.maxSize = maxSize;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  }<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>  @Override<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  public boolean addAll(Collection&lt;? extends T&gt; c) {<a name="line.47"></a>
-<span class="sourceLineNo">048</span>    for (;;) {<a name="line.48"></a>
-<span class="sourceLineNo">049</span>      long currentSize = size.get();<a name="line.49"></a>
-<span class="sourceLineNo">050</span>      long nextSize = currentSize + c.size();<a name="line.50"></a>
-<span class="sourceLineNo">051</span>      if (nextSize &gt; maxSize) { // already exceeded limit<a name="line.51"></a>
-<span class="sourceLineNo">052</span>        return false;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>      }<a name="line.53"></a>
-<span class="sourceLineNo">054</span>      if (size.compareAndSet(currentSize, nextSize)) {<a name="line.54"></a>
-<span class="sourceLineNo">055</span>        break;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>      }<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    }<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    return super.addAll(c); // Always true for ConcurrentLinkedQueue<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  @Override<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  public void clear() {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    // override this method to batch update size.<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    long removed = 0L;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    while (super.poll() != null) {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      removed++;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    }<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    size.addAndGet(-removed);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  @Override<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  public boolean offer(T e) {<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    for (;;) {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>      long currentSize = size.get();<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      if (currentSize &gt;= maxSize) { // already exceeded limit<a name="line.75"></a>
-<span class="sourceLineNo">076</span>        return false;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      }<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      if (size.compareAndSet(currentSize, currentSize + 1)) {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>        break;<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>    return super.offer(e); // Always true for ConcurrentLinkedQueue<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  @Override<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  public T poll() {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    T result = super.poll();<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    if (result != null) {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      size.decrementAndGet();<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    return result;<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<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public boolean remove(Object o) {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    boolean result = super.remove(o);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    if (result) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      size.decrementAndGet();<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    return result;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  @Override<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  public int size() {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    return (int) size.get();<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>  public void drainTo(Collection&lt;T&gt; list) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    long removed = 0;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    for (T element; (element = super.poll()) != null;) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      list.add(element);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      removed++;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Limit the number of operations on size by only reporting size change after the drain is<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    // completed.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    size.addAndGet(-removed);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  public long remainingCapacity() {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    return maxSize - size.get();<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>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>


[11/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html
index f3aed1b..0597160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html
@@ -1513,810 +1513,816 @@
 <span class="sourceLineNo">1505</span>      if (maxSeqIdInStores == null || maxSeqIdInStores.isEmpty()) {<a name="line.1505"></a>
 <span class="sourceLineNo">1506</span>        return;<a name="line.1506"></a>
 <span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        if (!CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          // or the master was crashed before and we can not get the information.<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>          if (maxSeqId != null &amp;&amp; maxSeqId.longValue() &gt;= logEntry.getKey().getLogSeqNum()) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>            skippedCells.add(cell);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>          }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      }<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (!skippedCells.isEmpty()) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        logEntry.getEdit().getCells().removeAll(skippedCells);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1508</span>      // Create the array list for the cells that aren't filtered.<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // We make the assumption that most cells will be kept.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      ArrayList&lt;Cell&gt; keptCells = new ArrayList&lt;Cell&gt;(logEntry.getEdit().getCells().size());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>          keptCells.add(cell);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        } else {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          // or the master was crashed before and we can not get the information.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>          if (maxSeqId == null || maxSeqId.longValue() &lt; logEntry.getKey().getLogSeqNum()) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>            keptCells.add(cell);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      }<a name="line.1523"></a>
 <span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    @Override<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (entries.isEmpty()) {<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        return;<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      WriterAndPath wap = null;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      long startTime = System.nanoTime();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      try {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        int editsCount = 0;<a name="line.1537"></a>
+<span class="sourceLineNo">1525</span>      // Anything in the keptCells array list is still live.<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // So rather than removing the cells from the array list<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      // which would be an O(n^2) operation, we just replace the list<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      logEntry.getEdit().setCells(keptCells);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    @Override<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      if (entries.isEmpty()) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>        return;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      }<a name="line.1537"></a>
 <span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        for (Entry logEntry : entries) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          if (wap == null) {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>            wap = getWriterAndPath(logEntry);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>            if (wap == null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>              if (LOG.isDebugEnabled()) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>              }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>              return;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          filterCellByStore(logEntry);<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            wap.w.append(logEntry);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            editsCount++;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          } else {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>            wap.incrementSkippedEdits(1);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>          }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        // Pass along summary statistics<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        wap.incrementEdits(editsCount);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      } catch (IOException e) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          e = e instanceof RemoteException ?<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>        throw e;<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    }<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span><a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    /**<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>     */<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    @Override<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      synchronized (writers) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>        }<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      return ret;<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span><a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    @Override<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    public int getNumberOfRecoveredRegions() {<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      return writers.size();<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>  }<a name="line.1587"></a>
+<span class="sourceLineNo">1539</span>      WriterAndPath wap = null;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      long startTime = System.nanoTime();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      try {<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        int editsCount = 0;<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span><a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>        for (Entry logEntry : entries) {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>          if (wap == null) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>            wap = getWriterAndPath(logEntry);<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>            if (wap == null) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>              if (LOG.isDebugEnabled()) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>              }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>              return;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>            }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          filterCellByStore(logEntry);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            wap.w.append(logEntry);<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            editsCount++;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          } else {<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>            wap.incrementSkippedEdits(1);<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>          }<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        // Pass along summary statistics<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        wap.incrementEdits(editsCount);<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      } catch (IOException e) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>          e = e instanceof RemoteException ?<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>        throw e;<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    }<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span><a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>    /**<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>     */<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    @Override<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      synchronized (writers) {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      return ret;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    }<a name="line.1587"></a>
 <span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  /**<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>   */<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  public abstract static class SinkWriter {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    /* Count of edits written to this path */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    long editsWritten = 0;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    /* Count of edits skipped to this path */<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    long editsSkipped = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    /* Number of nanos spent writing to this log */<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    long nanosSpent = 0;<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    void incrementEdits(int edits) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      editsWritten += edits;<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    void incrementSkippedEdits(int skipped) {<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      editsSkipped += skipped;<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span><a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    void incrementNanoTime(long nanos) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      nanosSpent += nanos;<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    }<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  }<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span><a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>  /**<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * data written to this output.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   */<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    final Path p;<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    final Writer w;<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      this.p = p;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      this.w = w;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>  }<a name="line.1625"></a>
+<span class="sourceLineNo">1589</span>    @Override<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    public int getNumberOfRecoveredRegions() {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      return writers.size();<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  }<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span><a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>  /**<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>   */<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>  public abstract static class SinkWriter {<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    /* Count of edits written to this path */<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    long editsWritten = 0;<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    /* Count of edits skipped to this path */<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    long editsSkipped = 0;<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    /* Number of nanos spent writing to this log */<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    long nanosSpent = 0;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span><a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    void incrementEdits(int edits) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      editsWritten += edits;<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>    void incrementSkippedEdits(int skipped) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      editsSkipped += skipped;<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span><a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    void incrementNanoTime(long nanos) {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      nanosSpent += nanos;<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span><a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>  /**<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>   * data written to this output.<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>   */<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    final Path p;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    final Writer w;<a name="line.1625"></a>
 <span class="sourceLineNo">1626</span><a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>  /**<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>   */<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    private static final String KEY_DELIMITER = "#";<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    private long waitRegionOnlineTimeOut;<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    // online encoded region name -&gt; region location map<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span><a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>    /**<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>     * Map key -&gt; value layout<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>     */<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span><a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        int numWriters) {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      super(controller, entryBuffers, numWriters);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      this.waitRegionOnlineTimeOut =<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>        entryBuffers, numWriters);<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span><a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>    @Override<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      if (entries.isEmpty()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        return;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span><a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      // check if current region in a disabling or disabled table<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        // need fall back to old way<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>        // store regions we have recovered so far<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        return;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      }<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span><a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      // group entries by region servers<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      groupEditsByServer(entries);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span><a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      // process workitems<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      String maxLocKey = null;<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      int maxSize = 0;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>            maxSize = curQueue.size();<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>            maxQueue = curQueue;<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>            maxLocKey = entry.getKey();<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>          }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        if (maxSize &lt; minBatchSize<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>          // buffer more to process<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>          return;<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        } else if (maxSize &gt; 0) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>        }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span><a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>      if (maxSize &gt; 0) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>        recoveredRegions.add(encodedRegionName);<a name="line.1721"></a>
+<span class="sourceLineNo">1627</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      this.p = p;<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      this.w = w;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>    }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>  }<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span><a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>  /**<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>   */<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    private static final String KEY_DELIMITER = "#";<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>    private long waitRegionOnlineTimeOut;<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    // online encoded region name -&gt; region location map<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span><a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>    /**<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>     * Map key -&gt; value layout<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>     */<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span><a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span><a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>        int numWriters) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      super(controller, entryBuffers, numWriters);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      this.waitRegionOnlineTimeOut =<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>        entryBuffers, numWriters);<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    @Override<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (entries.isEmpty()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        return;<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      }<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span><a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      // check if current region in a disabling or disabled table<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // need fall back to old way<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>        // store regions we have recovered so far<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        return;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span><a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      // group entries by region servers<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      groupEditsByServer(entries);<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span><a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      // process workitems<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      String maxLocKey = null;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>      int maxSize = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>            maxSize = curQueue.size();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>            maxQueue = curQueue;<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>            maxLocKey = entry.getKey();<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>          }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>        }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        if (maxSize &lt; minBatchSize<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>          // buffer more to process<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>          return;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        } else if (maxSize &gt; 0) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span><a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      if (maxSize &gt; 0) {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
 <span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
 <span class="sourceLineNo">1724</span><a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    /**<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>     * Helper function to group WALEntries to individual region servers<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>     * @throws IOException<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>     */<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      for (Entry entry : entries) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>        WALEdit edit = entry.getEdit();<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        TableName table = entry.getKey().getTablename();<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>        // clear scopes which isn't needed for recovery<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>        entry.getKey().setScopes(null);<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>        // skip edits of non-existent tables<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>          this.skippedEdits.incrementAndGet();<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>          continue;<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        }<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span><a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        boolean needSkip = false;<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        HRegionLocation loc = null;<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        String locKey = null;<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span><a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>        for (Cell cell : cells) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>          boolean isCompactionEntry = false;<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>              try {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>                  .toByteArray());<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>                row = regionName[1]; // startKey of the region<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>                isCompactionEntry = true;<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>              } catch (Exception ex) {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>                skippedCells.add(cell);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>                continue;<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>              }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>            } else {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>              skippedCells.add(cell);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>              continue;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>            }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>          try {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>            loc =<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>                  encodeRegionNameStr);<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            // skip replaying the compaction if the region is gone<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>                  + encodeRegionNameStr);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>              needSkip = true;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>            }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>          } catch (TableNotFoundException ex) {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>            // table has been deleted so skip edits of the table<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>                + encodeRegionNameStr);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>            if (nonExistentTables == null) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>            }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            nonExistentTables.add(table);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>            this.skippedEdits.incrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>            needSkip = true;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>            break;<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          }<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span><a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          cachedLastFlushedSequenceId =<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          if (cachedLastFlushedSequenceId != null<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            // skip the whole WAL entry<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            this.skippedEdits.incrementAndGet();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            needSkip = true;<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            break;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } else {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            if (maxStoreSequenceIds == null) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>              maxStoreSequenceIds =<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            }<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            if (maxStoreSequenceIds != null) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>                skippedCells.add(cell);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                continue;<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>              }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>            }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>          }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        }<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>        // skip the edit<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        if (loc == null || needSkip) continue;<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>        if (!skippedCells.isEmpty()) {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          cells.removeAll(skippedCells);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        synchronized (serverToBufferQueueMap) {<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>          if (queue == null) {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>            queue =<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>          }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>        }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        // store regions we have recovered so far<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      }<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    }<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span><a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    /**<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>     * destination region is online for replay.<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>     * @throws IOException<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>     */<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>      // fetch location from cache<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      if(loc != null) return loc;<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      if (loc == null) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>            + " of table:" + table);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      // check if current row moves to a different region due to region merge/split<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        // originalEncodedRegionName should have already flushed<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      }<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span><a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      Long lastFlushedSequenceId = -1l;<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      if (!isRecovering.get()) {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>        // been moved to somewhere before hosting RS fails<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>            + " because it's not in recovering.");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      } else {<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>        Long cachedLastFlushedSequenceId =<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span><a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        // update the value for the region<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>        RegionStoreSequenceIds ids =<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>              loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        if (ids != null) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>          }<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        }<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        if (cachedLastFlushedSequenceId == null<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>            || lastFlushedSequenceId &gt; cachedLastFlushedSequenceId) {<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>          lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), lastFlushedSequenceId);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        }<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      }<a name="line.1903"></a>
+<span class="sourceLineNo">1725</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>        recoveredRegions.add(encodedRegionName);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    }<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span><a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>    /**<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>     * Helper function to group WALEntries to individual region servers<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>     * @throws IOException<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>     */<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      for (Entry entry : entries) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        WALEdit edit = entry.getEdit();<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>        TableName table = entry.getKey().getTablename();<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        // clear scopes which isn't needed for recovery<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        entry.getKey().setScopes(null);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // skip edits of non-existent tables<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>          this.skippedEdits.incrementAndGet();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>          continue;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        boolean needSkip = false;<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        HRegionLocation loc = null;<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        String locKey = null;<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span><a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        for (Cell cell : cells) {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>          boolean isCompactionEntry = false;<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>              try {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>                  .toByteArray());<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>                row = regionName[1]; // startKey of the region<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>                isCompactionEntry = true;<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>              } catch (Exception ex) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>                skippedCells.add(cell);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>                continue;<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>              }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            } else {<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>              skippedCells.add(cell);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>              continue;<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>            }<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          }<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span><a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          try {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>            loc =<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>                  encodeRegionNameStr);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>            // skip replaying the compaction if the region is gone<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>                  + encodeRegionNameStr);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>              needSkip = true;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>            }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>          } catch (TableNotFoundException ex) {<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>            // table has been deleted so skip edits of the table<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>                + encodeRegionNameStr);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>            if (nonExistentTables == null) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>            }<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>            nonExistentTables.add(table);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>            this.skippedEdits.incrementAndGet();<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>            needSkip = true;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>            break;<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          }<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span><a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>          cachedLastFlushedSequenceId =<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>          if (cachedLastFlushedSequenceId != null<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            // skip the whole WAL entry<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>            this.skippedEdits.incrementAndGet();<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>            needSkip = true;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            break;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>          } else {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>            if (maxStoreSequenceIds == null) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>              maxStoreSequenceIds =<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>            }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            if (maxStoreSequenceIds != null) {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>                skippedCells.add(cell);<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                continue;<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              }<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>            }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>          }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        }<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>        // skip the edit<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        if (loc == null || needSkip) continue;<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span><a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (!skippedCells.isEmpty()) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          cells.removeAll(skippedCells);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>        synchronized (serverToBufferQueueMap) {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>          if (queue == null) {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            queue =<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>        }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>        // store regions we have recovered so far<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span><a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    /**<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>     * destination region is online for replay.<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>     * @throws IOException<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>     */<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      // fetch location from cache<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      if(loc != null) return loc;<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      if (loc == null) {<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>            + " of table:" + table);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      }<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      // check if current row moves to a different region due to region merge/split<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        // originalEncodedRegionName should have already flushed<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      Long lastFlushedSequenceId = -1l;<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      if (!isRecovering.get()) {<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>        // been moved to somewhere before hosting RS fails<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>            + " because it's not in recovering.");<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      } else {<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        Long cachedLastFlushedSequenceId =<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        // update the value for the region<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>        RegionStoreSequenceIds ids =<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>              loc.getRegionInfo().getEncodedName());<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>        if (ids != null) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>          }<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        }<a name="line.1903"></a>
 <span class="sourceLineNo">1904</span><a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      onlineRegions.put(loc.getRegionInfo().getEncodedName(), loc);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      return loc;<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span><a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>    private void processWorkItems(String key, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; actions)<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>        throws IOException {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>      RegionServerWriter rsw = null;<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span><a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long startTime = System.nanoTime();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      try {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        rsw = getRegionServerWriter(key);<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>        rsw.sink.replayEntries(actions);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>        // Pass along summary statistics<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        rsw.incrementEdits(actions.size());<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>        rsw.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      } catch (IOException e) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        throw e;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    /**<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>     * Wait until region is online on the destination region server<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>     * @param loc<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>     * @param row<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>     * @param timeout How long to wait<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>     * @param isRecovering Recovering state of the region interested on destination region server.<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>     * @return True when region is online on the destination region server<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>     * @throws InterruptedException<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>     */<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    private HRegionLocation waitUntilRegionOnline(HRegionLocation loc, byte[] row,<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>        final long timeout, AtomicBoolean isRecovering)<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>        throws IOException {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      final long endTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      final long pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      boolean reloadLocation = false;<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      TableName tableName = loc.getRegionInfo().getTable();<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      int tries = 0;<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      Throwable cause = null;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>      while (endTime &gt; EnvironmentEdgeManager.currentTime()) {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>        try {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          // Try and get regioninfo from the hosting server.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          HConnection hconn = getConnectionByTableName(tableName);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          if(reloadLocation) {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            loc = hconn.getRegionLocation(tableName, row, true);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          }<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          BlockingInterface remoteSvr = hconn.getAdmin(loc.getServerName());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          HRegionInfo region = loc.getRegionInfo();<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>          try {<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>            GetRegionInfoRequest request =<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>                RequestConverter.buildGetRegionInfoRequest(region.getRegionName());<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            GetRegionInfoResponse response = remoteSvr.getRegionInfo(null, request);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>            if (HRegionInfo.convert(response.getRegionInfo()) != null) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>              isRecovering.set((response.hasIsRecovering()) ? response.getIsRecovering() : true);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>              return loc;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            }<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          } catch (ServiceException se) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>          }<a name="line.1966"></a>
-<span class="sour

<TRUNCATED>

[05/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/client/TestMultiParallel.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestMultiParallel.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestMultiParallel.html
index fbfc3da..8407fda 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestMultiParallel.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestMultiParallel.html
@@ -512,7 +512,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testBatchWithGet</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.171">testBatchWithGet</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.172">testBatchWithGet</a>()
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -524,7 +524,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testBadFam</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.210">testBadFam</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.211">testBadFam</a>()
                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -536,7 +536,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testFlushCommitsNoAbort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.240">testFlushCommitsNoAbort</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.241">testFlushCommitsNoAbort</a>()
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -548,7 +548,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testFlushCommitsWithAbort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.252">testFlushCommitsWithAbort</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.253">testFlushCommitsWithAbort</a>()
                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Only run one Multi test with a forced RegionServer abort. Otherwise, the
  unit tests will take an unnecessarily long time to run.</div>
@@ -562,7 +562,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>doTestFlushCommits</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.262">doTestFlushCommits</a>(boolean&nbsp;doAbort)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.263">doTestFlushCommits</a>(boolean&nbsp;doAbort)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Set table auto flush to false and test flushing commits</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>doAbort</code> - true if abort one regionserver in the testing</dd>
@@ -576,7 +576,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testBatchWithPut</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.324">testBatchWithPut</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.325">testBatchWithPut</a>()
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -588,7 +588,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testBatchWithDelete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.357">testBatchWithDelete</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.358">testBatchWithDelete</a>()
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -600,7 +600,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testHTableDeleteWithList</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.388">testHTableDeleteWithList</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.389">testHTableDeleteWithList</a>()
                               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -612,7 +612,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testBatchWithManyColsInOneRowGetAndPut</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.418">testBatchWithManyColsInOneRowGetAndPut</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.419">testBatchWithManyColsInOneRowGetAndPut</a>()
                                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -624,7 +624,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testBatchWithIncrementAndAppend</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.457">testBatchWithIncrementAndAppend</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.458">testBatchWithIncrementAndAppend</a>()
                                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -636,7 +636,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testNonceCollision</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.492">testNonceCollision</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.493">testNonceCollision</a>()
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -648,7 +648,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testBatchWithMixedActions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.584">testBatchWithMixedActions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.585">testBatchWithMixedActions</a>()
                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -660,7 +660,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>validateResult</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.658">validateResult</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;r)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.659">validateResult</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;r)</pre>
 </li>
 </ul>
 <a name="validateResult(java.lang.Object, byte[], byte[])">
@@ -669,7 +669,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>validateResult</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.662">validateResult</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;r1,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.663">validateResult</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;r1,
                   byte[]&nbsp;qual,
                   byte[]&nbsp;val)</pre>
 </li>
@@ -680,7 +680,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>constructPutRequests</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.Put&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.672">constructPutRequests</a>()</pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.Put&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.673">constructPutRequests</a>()</pre>
 </li>
 </ul>
 <a name="validateLoadedData(org.apache.hadoop.hbase.client.Table)">
@@ -689,7 +689,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>validateLoadedData</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.682">validateLoadedData</a>(org.apache.hadoop.hbase.client.Table&nbsp;table)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.683">validateLoadedData</a>(org.apache.hadoop.hbase.client.Table&nbsp;table)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -701,7 +701,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>validateEmpty</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.695">validateEmpty</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;r1)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.696">validateEmpty</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;r1)</pre>
 </li>
 </ul>
 <a name="validateSizeAndEmpty(java.lang.Object[], int)">
@@ -710,7 +710,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>validateSizeAndEmpty</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.702">validateSizeAndEmpty</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&nbsp;results,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiParallel.html#line.703">validateSizeAndEmpty</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&nbsp;results,
                         int&nbsp;expectedSize)</pre>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/client/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/client/package-frame.html
index aa5f0b6..4a92019 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/package-frame.html
@@ -82,6 +82,7 @@
 <li><a href="TestHTableMultiplexerFlushCache.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestHTableMultiplexerFlushCache</a></li>
 <li><a href="TestIncrement.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestIncrement</a></li>
 <li><a href="TestIntraRowPagination.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestIntraRowPagination</a></li>
+<li><a href="TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestLeaseRenewal</a></li>
 <li><a href="TestMetaWithReplicas.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestMetaWithReplicas</a></li>
 <li><a href="TestMetricsConnection.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestMetricsConnection</a></li>
 <li><a href="TestMobCloneSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestMobCloneSnapshotFromClient</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/client/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/client/package-summary.html
index a0c40d8..b0f0d19 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/package-summary.html
@@ -412,196 +412,200 @@
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestMetaWithReplicas.html" title="class in org.apache.hadoop.hbase.client">TestMetaWithReplicas</a></td>
 <td class="colLast">
 <div class="block">Tests the scenarios where replicas are enabled for the meta table</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestMetricsConnection.html" title="class in org.apache.hadoop.hbase.client">TestMetricsConnection</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestMobCloneSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.client">TestMobCloneSnapshotFromClient</a></td>
 <td class="colLast">
 <div class="block">Test clone snapshots from the client</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestMobRestoreSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.client">TestMobRestoreSnapshotFromClient</a></td>
 <td class="colLast">
 <div class="block">Test restore snapshots from the client</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestMobSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.client">TestMobSnapshotFromClient</a></td>
 <td class="colLast">
 <div class="block">Test create/using/deleting snapshots from the client</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestMultiParallel.html" title="class in org.apache.hadoop.hbase.client">TestMultiParallel</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestMultipleTimestamps.html" title="class in org.apache.hadoop.hbase.client">TestMultipleTimestamps</a></td>
 <td class="colLast">
 <div class="block">Run tests related to <code>TimestampsFilter</code> using HBase client APIs.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html" title="class in org.apache.hadoop.hbase.client">TestMultiRespectsLimits</a></td>
 <td class="colLast">
 <div class="block">This test sets the multi size WAAAAAY low and then checks to make sure that gets will still make
  progress.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestOperation.html" title="class in org.apache.hadoop.hbase.client">TestOperation</a></td>
 <td class="colLast">
 <div class="block">Run tests that use the functionality of the Operation superclass for
  Puts, Gets, Deletes, Scans, and MultiPuts.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestProcedureFuture.html" title="class in org.apache.hadoop.hbase.client">TestProcedureFuture</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestProcedureFuture.TestFuture.html" title="class in org.apache.hadoop.hbase.client">TestProcedureFuture.TestFuture</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestPut.html" title="class in org.apache.hadoop.hbase.client">TestPut</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestPutDeleteEtcCellIteration.html" title="class in org.apache.hadoop.hbase.client">TestPutDeleteEtcCellIteration</a></td>
 <td class="colLast">
 <div class="block">Test that I can Iterate Client Actions that hold Cells (Get does not have Cells).</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestPutDotHas.html" title="class in org.apache.hadoop.hbase.client">TestPutDotHas</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestPutWithDelete.html" title="class in org.apache.hadoop.hbase.client">TestPutWithDelete</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestPutWriteToWal.html" title="class in org.apache.hadoop.hbase.client">TestPutWriteToWal</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicasClient.html" title="class in org.apache.hadoop.hbase.client">TestReplicasClient</a></td>
 <td class="colLast">
 <div class="block">Tests for region replicas.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicasClient.SlowMeCopro.html" title="class in org.apache.hadoop.hbase.client">TestReplicasClient.SlowMeCopro</a></td>
 <td class="colLast">
 <div class="block">This copro is used to synchronize the tests.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicaWithCluster.html" title="class in org.apache.hadoop.hbase.client">TestReplicaWithCluster</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicaWithCluster.SlowMeCopro.html" title="class in org.apache.hadoop.hbase.client">TestReplicaWithCluster.SlowMeCopro</a></td>
 <td class="colLast">
 <div class="block">This copro is used to synchronize the tests.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.client">TestRestoreSnapshotFromClient</a></td>
 <td class="colLast">
 <div class="block">Test restore snapshots from the client</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.html" title="class in org.apache.hadoop.hbase.client">TestRestoreSnapshotFromClientWithRegionReplicas</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestResult.html" title="class in org.apache.hadoop.hbase.client">TestResult</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestResultSizeEstimation.html" title="class in org.apache.hadoop.hbase.client">TestResultSizeEstimation</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRpcControllerFactory.html" title="class in org.apache.hadoop.hbase.client">TestRpcControllerFactory</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRpcControllerFactory.CountingRpcController.html" title="class in org.apache.hadoop.hbase.client">TestRpcControllerFactory.CountingRpcController</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRpcControllerFactory.StaticRpcControllerFactory.html" title="class in org.apache.hadoop.hbase.client">TestRpcControllerFactory.StaticRpcControllerFactory</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestScan.html" title="class in org.apache.hadoop.hbase.client">TestScan</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestScannersFromClientSide.html" title="class in org.apache.hadoop.hbase.client">TestScannersFromClientSide</a></td>
 <td class="colLast">
 <div class="block">A client-side test, mostly testing scanners with various parameters.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestScannerTimeout.html" title="class in org.apache.hadoop.hbase.client">TestScannerTimeout</a></td>
 <td class="colLast">
 <div class="block">Test various scanner timeout issues.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestShortCircuitConnection.html" title="class in org.apache.hadoop.hbase.client">TestShortCircuitConnection</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client">TestSizeFailures</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotFromAdmin.html" title="class in org.apache.hadoop.hbase.client">TestSnapshotFromAdmin</a></td>
 <td class="colLast">
 <div class="block">Test snapshot logic from the client</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.client">TestSnapshotFromClient</a></td>
 <td class="colLast">
 <div class="block">Test create/using/deleting snapshots from the client</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotFromClientWithRegionReplicas.html" title="class in org.apache.hadoop.hbase.client">TestSnapshotFromClientWithRegionReplicas</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotMetadata.html" title="class in org.apache.hadoop.hbase.client">TestSnapshotMetadata</a></td>
 <td class="colLast">
 <div class="block">Test class to verify that metadata is consistent before and after a snapshot attempt.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestTableSnapshotScanner.html" title="class in org.apache.hadoop.hbase.client">TestTableSnapshotScanner</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestTimestampsFilter.html" title="class in org.apache.hadoop.hbase.client">TestTimestampsFilter</a></td>
 <td class="colLast">
 <div class="block">Run tests related to <code>TimestampsFilter</code> using HBase client APIs.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestUpdateConfiguration.html" title="class in org.apache.hadoop.hbase.client">TestUpdateConfiguration</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/client/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 770e159..9b49e88 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -241,6 +241,7 @@
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">TestHTableMultiplexerFlushCache</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestIncrement.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">TestIncrement</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestIntraRowPagination.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">TestIntraRowPagination</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">TestLeaseRenewal</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestMetaWithReplicas.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">TestMetaWithReplicas</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestMetricsConnection.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">TestMetricsConnection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestMultiParallel.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">TestMultiParallel</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index b37ecd0..477138b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -156,9 +156,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestCacheOnWrite.CacheOnWriteType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileBlockCompatibility.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestHFileBlockCompatibility.Writer.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TagUsage.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">TagUsage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestCacheOnWrite.CacheOnWriteType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/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 136ee11..2a7384a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -506,14 +506,14 @@
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="strong">ClusterManager.ServiceType</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="strong">HBaseClusterManager.CommandProvider.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="strong">RESTApiClusterManager.Service</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="strong">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="strong">ResourceChecker.Phase</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="strong">ScanPerformanceEvaluation.ScanCounter</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="strong">RESTApiClusterManager.Service</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="strong">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="strong">PerformanceEvaluation.Counter</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="strong">IntegrationTestRegionReplicaPerf.Stat</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="strong">RESTApiClusterManager.RoleCommand</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="strong">ScanPerformanceEvaluation.ScanCounter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="strong">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="strong">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index ebb5e7b..afa4107 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -147,8 +147,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="strong">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="strong">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="strong">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html
index c1a42b9..1a26db4 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html
@@ -95,7 +95,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.57">TestRSStatusServlet</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.60">TestRSStatusServlet</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Tests for the region server status page and its template.</div>
 </li>
@@ -141,10 +141,14 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#LOG">LOG</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private org.apache.hadoop.hbase.ipc.RpcServerInterface</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#rpcServer">rpcServer</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private org.apache.hadoop.hbase.regionserver.RSRpcServices</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#rpcServices">rpcServices</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private org.apache.hadoop.hbase.regionserver.HRegionServer</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#rs">rs</a></strong></code>&nbsp;</td>
 </tr>
@@ -220,7 +224,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.58">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.61">LOG</a></pre>
 </li>
 </ul>
 <a name="rs">
@@ -229,7 +233,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>rs</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.HRegionServer <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.59">rs</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.HRegionServer <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.62">rs</a></pre>
 </li>
 </ul>
 <a name="rpcServices">
@@ -238,7 +242,16 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcServices</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.RSRpcServices <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.60">rpcServices</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.RSRpcServices <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.63">rpcServices</a></pre>
+</li>
+</ul>
+<a name="rpcServer">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rpcServer</h4>
+<pre>private&nbsp;org.apache.hadoop.hbase.ipc.RpcServerInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.64">rpcServer</a></pre>
 </li>
 </ul>
 <a name="FAKE_IPC_PORT">
@@ -247,7 +260,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>FAKE_IPC_PORT</h4>
-<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.62">FAKE_IPC_PORT</a></pre>
+<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.66">FAKE_IPC_PORT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.TestRSStatusServlet.FAKE_IPC_PORT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -257,7 +270,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>FAKE_WEB_PORT</h4>
-<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.63">FAKE_WEB_PORT</a></pre>
+<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.67">FAKE_WEB_PORT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.TestRSStatusServlet.FAKE_WEB_PORT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -267,7 +280,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>fakeServerName</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.ServerName <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.65">fakeServerName</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.ServerName <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.69">fakeServerName</a></pre>
 </li>
 </ul>
 <a name="fakeResponse">
@@ -276,7 +289,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>fakeResponse</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.67">fakeResponse</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.71">fakeResponse</a></pre>
 </li>
 </ul>
 <a name="fakeMasterAddress">
@@ -285,7 +298,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>fakeMasterAddress</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.ServerName <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.70">fakeMasterAddress</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.ServerName <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.74">fakeMasterAddress</a></pre>
 </li>
 </ul>
 </li>
@@ -302,7 +315,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestRSStatusServlet</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.57">TestRSStatusServlet</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.60">TestRSStatusServlet</a>()</pre>
 </li>
 </ul>
 </li>
@@ -319,7 +332,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setupBasicMocks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.74">setupBasicMocks</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.78">setupBasicMocks</a>()
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                             com.google.protobuf.ServiceException</pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -333,7 +346,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testBasic</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.104">testBasic</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.114">testBasic</a>()
                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                       com.google.protobuf.ServiceException</pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -347,7 +360,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testWithRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.109">testWithRegions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#line.119">testWithRegions</a>()
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                             com.google.protobuf.ServiceException</pre>
 <dl><dt><span class="strong">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/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 1075d6b..5ea25b1 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -541,9 +541,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">TestCacheOnWriteInSchema.CacheOnWriteType</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="strong">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="strong">DataBlockEncodingTool.Manipulation</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="strong">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/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 01222b0..5d3945b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -234,9 +234,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="strong">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="strong">IntegrationTestLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="strong">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="strong">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="strong">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html b/testdevapidocs/org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html
index 8db3975..b2f54d3 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/util/TestBloomFilterChunk.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html" target="_top">Frames</a></li>
@@ -263,7 +263,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/util/TestBloomFilterChunk.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html b/testdevapidocs/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html
deleted file mode 100644
index f7a527b..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html
+++ /dev/null
@@ -1,370 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TestBoundedConcurrentLinkedQueue (Apache HBase 2.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<script type="text/javascript"><!--
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="TestBoundedConcurrentLinkedQueue (Apache HBase 2.0.0-SNAPSHOT Test API)";
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar_top">
-<!--   -->
-</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestBoundedConcurrentLinkedQueue.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" target="_top">Frames</a></li>
-<li><a href="TestBoundedConcurrentLinkedQueue.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method_summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method_detail">Method</a></li>
-</ul>
-</div>
-<a name="skip-navbar_top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.util</div>
-<h2 title="Class TestBoundedConcurrentLinkedQueue" class="title">Class TestBoundedConcurrentLinkedQueue</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.util.TestBoundedConcurrentLinkedQueue</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<hr>
-<br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#line.36">TestBoundedConcurrentLinkedQueue</a>
-extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field_summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#CAPACITY">CAPACITY</a></strong></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private org.apache.hadoop.hbase.util.BoundedConcurrentLinkedQueue&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#queue">queue</a></strong></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor_summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#TestBoundedConcurrentLinkedQueue()">TestBoundedConcurrentLinkedQueue</a></strong>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method_summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#setUp()">setUp</a></strong>()</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#testClear()">testClear</a></strong>()</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#testDrain()">testDrain</a></strong>()</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#testMultiThread()">testMultiThread</a></strong>()</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#testOfferAndPoll()">testOfferAndPoll</a></strong>()</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang
 /Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field_detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="CAPACITY">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>CAPACITY</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#line.37">CAPACITY</a></pre>
-<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.TestBoundedConcurrentLinkedQueue.CAPACITY">Constant Field Values</a></dd></dl>
-</li>
-</ul>
-<a name="queue">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>queue</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.util.BoundedConcurrentLinkedQueue&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#line.39">queue</a></pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor_detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="TestBoundedConcurrentLinkedQueue()">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>TestBoundedConcurrentLinkedQueue</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#line.36">TestBoundedConcurrentLinkedQueue</a>()</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method_detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="setUp()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setUp</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#line.42">setUp</a>()
-           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
-</li>
-</ul>
-<a name="testOfferAndPoll()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testOfferAndPoll</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#line.47">testOfferAndPoll</a>()
-                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
-</li>
-</ul>
-<a name="testDrain()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testDrain</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#line.67">testDrain</a>()
-               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
-</li>
-</ul>
-<a name="testClear()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testClear</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#line.85">testClear</a>()</pre>
-</li>
-</ul>
-<a name="testMultiThread()">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>testMultiThread</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#line.101">testMultiThread</a>()
-                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
-<dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></code></dd></dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar_bottom">
-<!--   -->
-</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestBoundedConcurrentLinkedQueue.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" target="_top">Frames</a></li>
-<li><a href="TestBoundedConcurrentLinkedQueue.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method_summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method_detail">Method</a></li>
-</ul>
-</div>
-<a name="skip-navbar_bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2015 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html b/testdevapidocs/org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html
index 8a7d1ff..fef9ef3 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html
@@ -35,7 +35,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.TestObject.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -411,7 +411,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.TestObject.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">


[50/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 78d7fbc..f4a3fc4 100644
--- a/book.html
+++ b/book.html
@@ -77,193 +77,199 @@
 <li><a href="#schema">HBase and Schema Design</a>
 <ul class="sectlevel1">
 <li><a href="#schema.creation">32. Schema Creation</a></li>
-<li><a href="#number.of.cfs">33. On the number of column families</a></li>
-<li><a href="#rowkey.design">34. Rowkey Design</a></li>
-<li><a href="#schema.versions">35. Number of Versions</a></li>
-<li><a href="#supported.datatypes">36. Supported Datatypes</a></li>
-<li><a href="#schema.joins">37. Joins</a></li>
-<li><a href="#ttl">38. Time To Live (TTL)</a></li>
-<li><a href="#cf.keep.deleted">39. Keeping Deleted Cells</a></li>
-<li><a href="#secondary.indexes">40. Secondary Indexes and Alternate Query Paths</a></li>
-<li><a href="#_constraints">41. Constraints</a></li>
-<li><a href="#schema.casestudies">42. Schema Design Case Studies</a></li>
-<li><a href="#schema.ops">43. Operational and Performance Configuration Options</a></li>
+<li><a href="#table_schema_rules_of_thumb">33. Table Schema Rules Of Thumb</a></li>
+</ul>
+</li>
+<li><a href="#regionserver_sizing_rules_of_thumb">RegionServer Sizing Rules of Thumb</a>
+<ul class="sectlevel1">
+<li><a href="#number.of.cfs">34. On the number of column families</a></li>
+<li><a href="#rowkey.design">35. Rowkey Design</a></li>
+<li><a href="#schema.versions">36. Number of Versions</a></li>
+<li><a href="#supported.datatypes">37. Supported Datatypes</a></li>
+<li><a href="#schema.joins">38. Joins</a></li>
+<li><a href="#ttl">39. Time To Live (TTL)</a></li>
+<li><a href="#cf.keep.deleted">40. Keeping Deleted Cells</a></li>
+<li><a href="#secondary.indexes">41. Secondary Indexes and Alternate Query Paths</a></li>
+<li><a href="#_constraints">42. Constraints</a></li>
+<li><a href="#schema.casestudies">43. Schema Design Case Studies</a></li>
+<li><a href="#schema.ops">44. Operational and Performance Configuration Options</a></li>
 </ul>
 </li>
 <li><a href="#mapreduce">HBase and MapReduce</a>
 <ul class="sectlevel1">
-<li><a href="#hbase.mapreduce.classpath">44. HBase, MapReduce, and the CLASSPATH</a></li>
-<li><a href="#_mapreduce_scan_caching">45. MapReduce Scan Caching</a></li>
-<li><a href="#_bundled_hbase_mapreduce_jobs">46. Bundled HBase MapReduce Jobs</a></li>
-<li><a href="#_hbase_as_a_mapreduce_job_data_source_and_data_sink">47. HBase as a MapReduce Job Data Source and Data Sink</a></li>
-<li><a href="#_writing_hfiles_directly_during_bulk_import">48. Writing HFiles Directly During Bulk Import</a></li>
-<li><a href="#_rowcounter_example">49. RowCounter Example</a></li>
-<li><a href="#splitter">50. Map-Task Splitting</a></li>
-<li><a href="#mapreduce.example">51. HBase MapReduce Examples</a></li>
-<li><a href="#mapreduce.htable.access">52. Accessing Other HBase Tables in a MapReduce Job</a></li>
-<li><a href="#mapreduce.specex">53. Speculative Execution</a></li>
-<li><a href="#cascading">54. Cascading</a></li>
+<li><a href="#hbase.mapreduce.classpath">45. HBase, MapReduce, and the CLASSPATH</a></li>
+<li><a href="#_mapreduce_scan_caching">46. MapReduce Scan Caching</a></li>
+<li><a href="#_bundled_hbase_mapreduce_jobs">47. Bundled HBase MapReduce Jobs</a></li>
+<li><a href="#_hbase_as_a_mapreduce_job_data_source_and_data_sink">48. HBase as a MapReduce Job Data Source and Data Sink</a></li>
+<li><a href="#_writing_hfiles_directly_during_bulk_import">49. Writing HFiles Directly During Bulk Import</a></li>
+<li><a href="#_rowcounter_example">50. RowCounter Example</a></li>
+<li><a href="#splitter">51. Map-Task Splitting</a></li>
+<li><a href="#mapreduce.example">52. HBase MapReduce Examples</a></li>
+<li><a href="#mapreduce.htable.access">53. Accessing Other HBase Tables in a MapReduce Job</a></li>
+<li><a href="#mapreduce.specex">54. Speculative Execution</a></li>
+<li><a href="#cascading">55. Cascading</a></li>
 </ul>
 </li>
 <li><a href="#security">Securing Apache HBase</a>
 <ul class="sectlevel1">
-<li><a href="#_using_secure_http_https_for_the_web_ui">55. Using Secure HTTP (HTTPS) for the Web UI</a></li>
-<li><a href="#hbase.secure.configuration">56. Secure Client Access to Apache HBase</a></li>
-<li><a href="#hbase.secure.simpleconfiguration">57. Simple User Access to Apache HBase</a></li>
-<li><a href="#_securing_access_to_hdfs_and_zookeeper">58. Securing Access to HDFS and ZooKeeper</a></li>
-<li><a href="#_securing_access_to_your_data">59. Securing Access To Your Data</a></li>
-<li><a href="#security.example.config">60. Security Configuration Example</a></li>
+<li><a href="#_using_secure_http_https_for_the_web_ui">56. Using Secure HTTP (HTTPS) for the Web UI</a></li>
+<li><a href="#hbase.secure.configuration">57. Secure Client Access to Apache HBase</a></li>
+<li><a href="#hbase.secure.simpleconfiguration">58. Simple User Access to Apache HBase</a></li>
+<li><a href="#_securing_access_to_hdfs_and_zookeeper">59. Securing Access to HDFS and ZooKeeper</a></li>
+<li><a href="#_securing_access_to_your_data">60. Securing Access To Your Data</a></li>
+<li><a href="#security.example.config">61. Security Configuration Example</a></li>
 </ul>
 </li>
 <li><a href="#_architecture">Architecture</a>
 <ul class="sectlevel1">
-<li><a href="#arch.overview">61. Overview</a></li>
-<li><a href="#arch.catalog">62. Catalog Tables</a></li>
-<li><a href="#architecture.client">63. Client</a></li>
-<li><a href="#client.filter">64. Client Request Filters</a></li>
-<li><a href="#_master">65. Master</a></li>
-<li><a href="#regionserver.arch">66. RegionServer</a></li>
-<li><a href="#regions.arch">67. Regions</a></li>
-<li><a href="#arch.bulk.load">68. Bulk Loading</a></li>
-<li><a href="#arch.hdfs">69. HDFS</a></li>
-<li><a href="#arch.timelineconsistent.reads">70. Timeline-consistent High Available Reads</a></li>
-<li><a href="#hbase_mob">71. Storing Medium-sized Objects (MOB)</a></li>
+<li><a href="#arch.overview">62. Overview</a></li>
+<li><a href="#arch.catalog">63. Catalog Tables</a></li>
+<li><a href="#architecture.client">64. Client</a></li>
+<li><a href="#client.filter">65. Client Request Filters</a></li>
+<li><a href="#_master">66. Master</a></li>
+<li><a href="#regionserver.arch">67. RegionServer</a></li>
+<li><a href="#regions.arch">68. Regions</a></li>
+<li><a href="#arch.bulk.load">69. Bulk Loading</a></li>
+<li><a href="#arch.hdfs">70. HDFS</a></li>
+<li><a href="#arch.timelineconsistent.reads">71. Timeline-consistent High Available Reads</a></li>
+<li><a href="#hbase_mob">72. Storing Medium-sized Objects (MOB)</a></li>
 </ul>
 </li>
 <li><a href="#hbase_apis">Apache HBase APIs</a>
 <ul class="sectlevel1">
-<li><a href="#_examples">72. Examples</a></li>
+<li><a href="#_examples">73. Examples</a></li>
 </ul>
 </li>
 <li><a href="#external_apis">Apache HBase External APIs</a>
 <ul class="sectlevel1">
-<li><a href="#_rest">73. REST</a></li>
-<li><a href="#_thrift">74. Thrift</a></li>
-<li><a href="#c">75. C/C++ Apache HBase Client</a></li>
-<li><a href="#jdo">76. Using Java Data Objects (JDO) with HBase</a></li>
-<li><a href="#scala">77. Scala</a></li>
-<li><a href="#jython">78. Jython</a></li>
+<li><a href="#_rest">74. REST</a></li>
+<li><a href="#_thrift">75. Thrift</a></li>
+<li><a href="#c">76. C/C++ Apache HBase Client</a></li>
+<li><a href="#jdo">77. Using Java Data Objects (JDO) with HBase</a></li>
+<li><a href="#scala">78. Scala</a></li>
+<li><a href="#jython">79. Jython</a></li>
 </ul>
 </li>
 <li><a href="#thrift">Thrift API and Filter Language</a>
 <ul class="sectlevel1">
-<li><a href="#thrift.filter_language">79. Filter Language</a></li>
+<li><a href="#thrift.filter_language">80. Filter Language</a></li>
 </ul>
 </li>
 <li><a href="#spark">HBase and Spark</a>
 <ul class="sectlevel1">
-<li><a href="#_basic_spark">80. Basic Spark</a></li>
-<li><a href="#_spark_streaming">81. Spark Streaming</a></li>
-<li><a href="#_bulk_load">82. Bulk Load</a></li>
-<li><a href="#_sparksql_dataframes">83. SparkSQL/DataFrames</a></li>
+<li><a href="#_basic_spark">81. Basic Spark</a></li>
+<li><a href="#_spark_streaming">82. Spark Streaming</a></li>
+<li><a href="#_bulk_load">83. Bulk Load</a></li>
+<li><a href="#_sparksql_dataframes">84. SparkSQL/DataFrames</a></li>
 </ul>
 </li>
 <li><a href="#cp">Apache HBase Coprocessors</a>
 <ul class="sectlevel1">
-<li><a href="#_coprocessor_framework">84. Coprocessor Framework</a></li>
-<li><a href="#_types_of_coprocessors">85. Types of Coprocessors</a></li>
-<li><a href="#cp_loading">86. Loading Coprocessors</a></li>
-<li><a href="#cp_example">87. Examples</a></li>
-<li><a href="#_monitor_time_spent_in_coprocessors">88. Monitor Time Spent in Coprocessors</a></li>
+<li><a href="#_coprocessor_overview">85. Coprocessor Overview</a></li>
+<li><a href="#_types_of_coprocessors">86. Types of Coprocessors</a></li>
+<li><a href="#cp_loading">87. Loading Coprocessors</a></li>
+<li><a href="#cp_example">88. Examples</a></li>
+<li><a href="#_guidelines_for_deploying_a_coprocessor">89. Guidelines For Deploying A Coprocessor</a></li>
+<li><a href="#_monitor_time_spent_in_coprocessors">90. Monitor Time Spent in Coprocessors</a></li>
 </ul>
 </li>
 <li><a href="#performance">Apache HBase Performance Tuning</a>
 <ul class="sectlevel1">
-<li><a href="#perf.os">89. Operating System</a></li>
-<li><a href="#perf.network">90. Network</a></li>
-<li><a href="#jvm">91. Java</a></li>
-<li><a href="#perf.configurations">92. HBase Configurations</a></li>
-<li><a href="#perf.zookeeper">93. ZooKeeper</a></li>
-<li><a href="#perf.schema">94. Schema Design</a></li>
-<li><a href="#perf.general">95. HBase General Patterns</a></li>
-<li><a href="#perf.writing">96. Writing to HBase</a></li>
-<li><a href="#perf.reading">97. Reading from HBase</a></li>
-<li><a href="#perf.deleting">98. Deleting from HBase</a></li>
-<li><a href="#perf.hdfs">99. HDFS</a></li>
-<li><a href="#perf.ec2">100. Amazon EC2</a></li>
-<li><a href="#perf.hbase.mr.cluster">101. Collocating HBase and MapReduce</a></li>
-<li><a href="#perf.casestudy">102. Case Studies</a></li>
+<li><a href="#perf.os">91. Operating System</a></li>
+<li><a href="#perf.network">92. Network</a></li>
+<li><a href="#jvm">93. Java</a></li>
+<li><a href="#perf.configurations">94. HBase Configurations</a></li>
+<li><a href="#perf.zookeeper">95. ZooKeeper</a></li>
+<li><a href="#perf.schema">96. Schema Design</a></li>
+<li><a href="#perf.general">97. HBase General Patterns</a></li>
+<li><a href="#perf.writing">98. Writing to HBase</a></li>
+<li><a href="#perf.reading">99. Reading from HBase</a></li>
+<li><a href="#perf.deleting">100. Deleting from HBase</a></li>
+<li><a href="#perf.hdfs">101. HDFS</a></li>
+<li><a href="#perf.ec2">102. Amazon EC2</a></li>
+<li><a href="#perf.hbase.mr.cluster">103. Collocating HBase and MapReduce</a></li>
+<li><a href="#perf.casestudy">104. Case Studies</a></li>
 </ul>
 </li>
 <li><a href="#trouble">Troubleshooting and Debugging Apache HBase</a>
 <ul class="sectlevel1">
-<li><a href="#trouble.general">103. General Guidelines</a></li>
-<li><a href="#trouble.log">104. Logs</a></li>
-<li><a href="#trouble.resources">105. Resources</a></li>
-<li><a href="#trouble.tools">106. Tools</a></li>
-<li><a href="#trouble.client">107. Client</a></li>
-<li><a href="#trouble.mapreduce">108. MapReduce</a></li>
-<li><a href="#trouble.namenode">109. NameNode</a></li>
-<li><a href="#trouble.network">110. Network</a></li>
-<li><a href="#trouble.rs">111. RegionServer</a></li>
-<li><a href="#trouble.master">112. Master</a></li>
-<li><a href="#trouble.zookeeper">113. ZooKeeper</a></li>
-<li><a href="#trouble.ec2">114. Amazon EC2</a></li>
-<li><a href="#trouble.versions">115. HBase and Hadoop version issues</a></li>
-<li><a href="#_ipc_configuration_conflicts_with_hadoop">116. IPC Configuration Conflicts with Hadoop</a></li>
-<li><a href="#_hbase_and_hdfs">117. HBase and HDFS</a></li>
-<li><a href="#trouble.tests">118. Running unit or integration tests</a></li>
-<li><a href="#trouble.casestudy">119. Case Studies</a></li>
-<li><a href="#trouble.crypto">120. Cryptographic Features</a></li>
-<li><a href="#_operating_system_specific_issues">121. Operating System Specific Issues</a></li>
-<li><a href="#_jdk_issues">122. JDK Issues</a></li>
+<li><a href="#trouble.general">105. General Guidelines</a></li>
+<li><a href="#trouble.log">106. Logs</a></li>
+<li><a href="#trouble.resources">107. Resources</a></li>
+<li><a href="#trouble.tools">108. Tools</a></li>
+<li><a href="#trouble.client">109. Client</a></li>
+<li><a href="#trouble.mapreduce">110. MapReduce</a></li>
+<li><a href="#trouble.namenode">111. NameNode</a></li>
+<li><a href="#trouble.network">112. Network</a></li>
+<li><a href="#trouble.rs">113. RegionServer</a></li>
+<li><a href="#trouble.master">114. Master</a></li>
+<li><a href="#trouble.zookeeper">115. ZooKeeper</a></li>
+<li><a href="#trouble.ec2">116. Amazon EC2</a></li>
+<li><a href="#trouble.versions">117. HBase and Hadoop version issues</a></li>
+<li><a href="#_ipc_configuration_conflicts_with_hadoop">118. IPC Configuration Conflicts with Hadoop</a></li>
+<li><a href="#_hbase_and_hdfs">119. HBase and HDFS</a></li>
+<li><a href="#trouble.tests">120. Running unit or integration tests</a></li>
+<li><a href="#trouble.casestudy">121. Case Studies</a></li>
+<li><a href="#trouble.crypto">122. Cryptographic Features</a></li>
+<li><a href="#_operating_system_specific_issues">123. Operating System Specific Issues</a></li>
+<li><a href="#_jdk_issues">124. JDK Issues</a></li>
 </ul>
 </li>
 <li><a href="#casestudies">Apache HBase Case Studies</a>
 <ul class="sectlevel1">
-<li><a href="#casestudies.overview">123. Overview</a></li>
-<li><a href="#casestudies.schema">124. Schema Design</a></li>
-<li><a href="#casestudies.perftroub">125. Performance/Troubleshooting</a></li>
+<li><a href="#casestudies.overview">125. Overview</a></li>
+<li><a href="#casestudies.schema">126. Schema Design</a></li>
+<li><a href="#casestudies.perftroub">127. Performance/Troubleshooting</a></li>
 </ul>
 </li>
 <li><a href="#ops_mgt">Apache HBase Operational Management</a>
 <ul class="sectlevel1">
-<li><a href="#tools">126. HBase Tools and Utilities</a></li>
-<li><a href="#ops.regionmgt">127. Region Management</a></li>
-<li><a href="#node.management">128. Node Management</a></li>
-<li><a href="#_hbase_metrics">129. HBase Metrics</a></li>
-<li><a href="#ops.monitoring">130. HBase Monitoring</a></li>
-<li><a href="#_cluster_replication">131. Cluster Replication</a></li>
-<li><a href="#_running_multiple_workloads_on_a_single_cluster">132. Running Multiple Workloads On a Single Cluster</a></li>
-<li><a href="#ops.backup">133. HBase Backup</a></li>
-<li><a href="#ops.snapshots">134. HBase Snapshots</a></li>
-<li><a href="#ops.capacity">135. Capacity Planning and Region Sizing</a></li>
-<li><a href="#table.rename">136. Table Rename</a></li>
+<li><a href="#tools">128. HBase Tools and Utilities</a></li>
+<li><a href="#ops.regionmgt">129. Region Management</a></li>
+<li><a href="#node.management">130. Node Management</a></li>
+<li><a href="#_hbase_metrics">131. HBase Metrics</a></li>
+<li><a href="#ops.monitoring">132. HBase Monitoring</a></li>
+<li><a href="#_cluster_replication">133. Cluster Replication</a></li>
+<li><a href="#_running_multiple_workloads_on_a_single_cluster">134. Running Multiple Workloads On a Single Cluster</a></li>
+<li><a href="#ops.backup">135. HBase Backup</a></li>
+<li><a href="#ops.snapshots">136. HBase Snapshots</a></li>
+<li><a href="#ops.capacity">137. Capacity Planning and Region Sizing</a></li>
+<li><a href="#table.rename">138. Table Rename</a></li>
 </ul>
 </li>
 <li><a href="#developer">Building and Developing Apache HBase</a>
 <ul class="sectlevel1">
-<li><a href="#getting.involved">137. Getting Involved</a></li>
-<li><a href="#repos">138. Apache HBase Repositories</a></li>
-<li><a href="#_ides">139. IDEs</a></li>
-<li><a href="#build">140. Building Apache HBase</a></li>
-<li><a href="#releasing">141. Releasing Apache HBase</a></li>
-<li><a href="#hbase.rc.voting">142. Voting on Release Candidates</a></li>
-<li><a href="#documentation">143. Generating the HBase Reference Guide</a></li>
-<li><a href="#hbase.org">144. Updating <a href="http://hbase.apache.org">hbase.apache.org</a></a></li>
-<li><a href="#hbase.tests">145. Tests</a></li>
-<li><a href="#developing">146. Developer Guidelines</a></li>
+<li><a href="#getting.involved">139. Getting Involved</a></li>
+<li><a href="#repos">140. Apache HBase Repositories</a></li>
+<li><a href="#_ides">141. IDEs</a></li>
+<li><a href="#build">142. Building Apache HBase</a></li>
+<li><a href="#releasing">143. Releasing Apache HBase</a></li>
+<li><a href="#hbase.rc.voting">144. Voting on Release Candidates</a></li>
+<li><a href="#documentation">145. Generating the HBase Reference Guide</a></li>
+<li><a href="#hbase.org">146. Updating <a href="http://hbase.apache.org">hbase.apache.org</a></a></li>
+<li><a href="#hbase.tests">147. Tests</a></li>
+<li><a href="#developing">148. Developer Guidelines</a></li>
 </ul>
 </li>
 <li><a href="#unit.tests">Unit Testing HBase Applications</a>
 <ul class="sectlevel1">
-<li><a href="#_junit">147. JUnit</a></li>
-<li><a href="#_mockito">148. Mockito</a></li>
-<li><a href="#_mrunit">149. MRUnit</a></li>
-<li><a href="#_integration_testing_with_an_hbase_mini_cluster">150. Integration Testing with an HBase Mini-Cluster</a></li>
+<li><a href="#_junit">149. JUnit</a></li>
+<li><a href="#_mockito">150. Mockito</a></li>
+<li><a href="#_mrunit">151. MRUnit</a></li>
+<li><a href="#_integration_testing_with_an_hbase_mini_cluster">152. Integration Testing with an HBase Mini-Cluster</a></li>
 </ul>
 </li>
 <li><a href="#zookeeper">ZooKeeper</a>
 <ul class="sectlevel1">
-<li><a href="#_using_existing_zookeeper_ensemble">151. Using existing ZooKeeper ensemble</a></li>
-<li><a href="#zk.sasl.auth">152. SASL Authentication with ZooKeeper</a></li>
+<li><a href="#_using_existing_zookeeper_ensemble">153. Using existing ZooKeeper ensemble</a></li>
+<li><a href="#zk.sasl.auth">154. SASL Authentication with ZooKeeper</a></li>
 </ul>
 </li>
 <li><a href="#community">Community</a>
 <ul class="sectlevel1">
-<li><a href="#_decisions">153. Decisions</a></li>
-<li><a href="#community.roles">154. Community Roles</a></li>
-<li><a href="#hbase.commit.msg.format">155. Commit Message format</a></li>
+<li><a href="#_decisions">155. Decisions</a></li>
+<li><a href="#community.roles">156. Community Roles</a></li>
+<li><a href="#hbase.commit.msg.format">157. Commit Message format</a></li>
 </ul>
 </li>
 <li><a href="#_appendix">Appendix</a>
@@ -273,7 +279,7 @@
 <li><a href="#hbck.in.depth">Appendix C: hbck In Depth</a></li>
 <li><a href="#appendix_acl_matrix">Appendix D: Access Control Matrix</a></li>
 <li><a href="#compression">Appendix E: Compression and Data Block Encoding In HBase</a></li>
-<li><a href="#data.block.encoding.enable">156. Enable Data Block Encoding</a></li>
+<li><a href="#data.block.encoding.enable">158. Enable Data Block Encoding</a></li>
 <li><a href="#sql">Appendix F: SQL over HBase</a></li>
 <li><a href="#_ycsb">Appendix G: YCSB</a></li>
 <li><a href="#_hfile_format_2">Appendix H: HFile format</a></li>
@@ -282,8 +288,8 @@
 <li><a href="#asf">Appendix K: HBase and the Apache Software Foundation</a></li>
 <li><a href="#orca">Appendix L: Apache HBase Orca</a></li>
 <li><a href="#tracing">Appendix M: Enabling Dapper-like Tracing in HBase</a></li>
-<li><a href="#tracing.client.modifications">157. Client Modifications</a></li>
-<li><a href="#tracing.client.shell">158. Tracing from HBase Shell</a></li>
+<li><a href="#tracing.client.modifications">159. Client Modifications</a></li>
+<li><a href="#tracing.client.shell">160. Tracing from HBase Shell</a></li>
 <li><a href="#hbase.rpc">Appendix N: 0.95 RPC Specification</a></li>
 </ul>
 </li>
@@ -7795,7 +7801,80 @@ online schema changes are supported in the 0.92.x codebase, but the 0.90.x codeb
 </div>
 </div>
 <div class="sect1">
-<h2 id="number.of.cfs"><a class="anchor" href="#number.of.cfs"></a>33. On the number of column families</h2>
+<h2 id="table_schema_rules_of_thumb"><a class="anchor" href="#table_schema_rules_of_thumb"></a>33. Table Schema Rules Of Thumb</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>There are many different data sets, with different access patterns and service-level
+expectations. Therefore, these rules of thumb are only an overview. Read the rest
+of this chapter to get more details after you have gone through this list.</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Aim to have regions sized between 10 and 50 GB.</p>
+</li>
+<li>
+<p>Aim to have cells no larger than 10 MB, or 50 MB if you use <a href="#mob">[mob]</a>. Otherwise,
+consider storing your cell data in HDFS and store a pointer to the data in HBase.</p>
+</li>
+<li>
+<p>A typical schema has between 1 and 3 column families per table. HBase tables should
+not be designed to mimic RDBMS tables.</p>
+</li>
+<li>
+<p>Around 50-100 regions is a good number for a table with 1 or 2 column families.
+Remember that a region is a contiguous segment of a column family.</p>
+</li>
+<li>
+<p>Keep your column family names as short as possible. The column family names are
+stored for every value (ignoring prefix encoding). They should not be self-documenting
+and descriptive like in a typical RDBMS.</p>
+</li>
+<li>
+<p>If you are storing time-based machine data or logging information, and the row key
+is based on device ID or service ID plus time, you can end up with a pattern where
+older data regions never have additional writes beyond a certain age. In this type
+of situation, you end up with a small number of active regions and a large number
+of older regions which have no new writes. For these situations, you can tolerate
+a larger number of regions because your resource consumption is driven by the active
+regions only.</p>
+</li>
+<li>
+<p>If only one column family is busy with writes, only that column family accomulates
+memory. Be aware of write patterns when allocating resources.</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<h1 id="regionserver_sizing_rules_of_thumb" class="sect0"><a class="anchor" href="#regionserver_sizing_rules_of_thumb"></a>RegionServer Sizing Rules of Thumb</h1>
+<div class="openblock partintro">
+<div class="content">
+<div class="paragraph">
+<p>Lars Hofhansl wrote a great
+<a href="http://hadoop-hbase.blogspot.com/2013/01/hbase-region-server-memory-sizing.html">blog post</a>
+about RegionServer memory sizing. The upshot is that you probably need more memory
+than you think you need. He goes into the impact of region size, memstore size, HDFS
+replication factor, and other things to check.</p>
+</div>
+<div class="quoteblock">
+<blockquote>
+<div class="paragraph">
+<p>Personally I would place the maximum disk space per machine that can be served
+exclusively with HBase around 6T, unless you have a very read-heavy workload.
+In that case the Java heap should be 32GB (20G regions, 128M memstores, the rest
+defaults).</p>
+</div>
+</blockquote>
+<div class="attribution">
+&#8212; Lars Hofhansl<br>
+<cite>http://hadoop-hbase.blogspot.com/2013/01/hbase-region-server-memory-sizing.html</cite>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="number.of.cfs"><a class="anchor" href="#number.of.cfs"></a>34. On the number of column families</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>HBase currently does not do well with anything above two or three column families so keep the number of column families in your schema low.
@@ -7808,7 +7887,7 @@ Only introduce a second and third column family in the case where data access is
 you query one column family or the other but usually not both at the one time.</p>
 </div>
 <div class="sect2">
-<h3 id="number.of.cfs.card"><a class="anchor" href="#number.of.cfs.card"></a>33.1. Cardinality of ColumnFamilies</h3>
+<h3 id="number.of.cfs.card"><a class="anchor" href="#number.of.cfs.card"></a>34.1. Cardinality of ColumnFamilies</h3>
 <div class="paragraph">
 <p>Where multiple ColumnFamilies exist in a single table, be aware of the cardinality (i.e., number of rows). If ColumnFamilyA has 1 million rows and ColumnFamilyB has 1 billion rows, ColumnFamilyA&#8217;s data will likely be spread across many, many regions (and RegionServers). This makes mass scans for ColumnFamilyA less efficient.</p>
 </div>
@@ -7816,10 +7895,10 @@ you query one column family or the other but usually not both at the one time.</
 </div>
 </div>
 <div class="sect1">
-<h2 id="rowkey.design"><a class="anchor" href="#rowkey.design"></a>34. Rowkey Design</h2>
+<h2 id="rowkey.design"><a class="anchor" href="#rowkey.design"></a>35. Rowkey Design</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_hotspotting"><a class="anchor" href="#_hotspotting"></a>34.1. Hotspotting</h3>
+<h3 id="_hotspotting"><a class="anchor" href="#_hotspotting"></a>35.1. Hotspotting</h3>
 <div class="paragraph">
 <p>Rows in HBase are sorted lexicographically by row key.
 This design optimizes for scans, allowing you to store related rows, or rows that will be read together, near each other.
@@ -7915,7 +7994,7 @@ This effectively randomizes row keys, but sacrifices row ordering properties.</p
 </div>
 </div>
 <div class="sect2">
-<h3 id="timeseries"><a class="anchor" href="#timeseries"></a>34.2. Monotonically Increasing Row Keys/Timeseries Data</h3>
+<h3 id="timeseries"><a class="anchor" href="#timeseries"></a>35.2. Monotonically Increasing Row Keys/Timeseries Data</h3>
 <div class="paragraph">
 <p>In the HBase chapter of Tom White&#8217;s book <a href="http://oreilly.com/catalog/9780596521981">Hadoop: The Definitive Guide</a> (O&#8217;Reilly) there is a an optimization note on watching out for a phenomenon where an import process walks in lock-step with all clients in concert pounding one of the table&#8217;s regions (and thus, a single node), then moving onto the next region, etc.
 With monotonically increasing row-keys (i.e., using a timestamp), this will happen.
@@ -7934,7 +8013,7 @@ Thus, even with a continual stream of input data with a mix of metric types, the
 </div>
 </div>
 <div class="sect2">
-<h3 id="keysize"><a class="anchor" href="#keysize"></a>34.3. Try to minimize row and column sizes</h3>
+<h3 id="keysize"><a class="anchor" href="#keysize"></a>35.3. Try to minimize row and column sizes</h3>
 <div class="paragraph">
 <p>In HBase, values are always freighted with their coordinates; as a cell value passes through the system, it&#8217;ll be accompanied by its row, column name, and timestamp - always.
 If your rows and column names are large, especially compared to the size of the cell value, then you may run up against some interesting scenarios.
@@ -7951,7 +8030,7 @@ Whatever patterns are selected for ColumnFamilies, attributes, and rowkeys they
 <p>See <a href="#keyvalue">keyvalue</a> for more information on HBase stores data internally to see why this is important.</p>
 </div>
 <div class="sect3">
-<h4 id="keysize.cf"><a class="anchor" href="#keysize.cf"></a>34.3.1. Column Families</h4>
+<h4 id="keysize.cf"><a class="anchor" href="#keysize.cf"></a>35.3.1. Column Families</h4>
 <div class="paragraph">
 <p>Try to keep the ColumnFamily names as small as possible, preferably one character (e.g. "d" for data/default).</p>
 </div>
@@ -7960,7 +8039,7 @@ Whatever patterns are selected for ColumnFamilies, attributes, and rowkeys they
 </div>
 </div>
 <div class="sect3">
-<h4 id="keysize.attributes"><a class="anchor" href="#keysize.attributes"></a>34.3.2. Attributes</h4>
+<h4 id="keysize.attributes"><a class="anchor" href="#keysize.attributes"></a>35.3.2. Attributes</h4>
 <div class="paragraph">
 <p>Although verbose attribute names (e.g., "myVeryImportantAttribute") are easier to read, prefer shorter attribute names (e.g., "via") to store in HBase.</p>
 </div>
@@ -7969,7 +8048,7 @@ Whatever patterns are selected for ColumnFamilies, attributes, and rowkeys they
 </div>
 </div>
 <div class="sect3">
-<h4 id="keysize.row"><a class="anchor" href="#keysize.row"></a>34.3.3. Rowkey Length</h4>
+<h4 id="keysize.row"><a class="anchor" href="#keysize.row"></a>35.3.3. Rowkey Length</h4>
 <div class="paragraph">
 <p>Keep them as short as is reasonable such that they can still be useful for required data access (e.g. Get vs.
 Scan). A short key that is useless for data access is not better than a longer key with better get/scan properties.
@@ -7977,7 +8056,7 @@ Expect tradeoffs when designing rowkeys.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="keysize.patterns"><a class="anchor" href="#keysize.patterns"></a>34.3.4. Byte Patterns</h4>
+<h4 id="keysize.patterns"><a class="anchor" href="#keysize.patterns"></a>35.3.4. Byte Patterns</h4>
 <div class="paragraph">
 <p>A long is 8 bytes.
 You can store an unsigned number up to 18,446,744,073,709,551,615 in those eight bytes.
@@ -8033,7 +8112,7 @@ This is the main trade-off.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="reverse.timestamp"><a class="anchor" href="#reverse.timestamp"></a>34.4. Reverse Timestamps</h3>
+<h3 id="reverse.timestamp"><a class="anchor" href="#reverse.timestamp"></a>35.4. Reverse Timestamps</h3>
 <div class="admonitionblock note">
 <table>
 <tr>
@@ -8065,14 +8144,14 @@ Since HBase keys are in sorted order, this key sorts before any older row-keys f
 </div>
 </div>
 <div class="sect2">
-<h3 id="rowkey.scope"><a class="anchor" href="#rowkey.scope"></a>34.5. Rowkeys and ColumnFamilies</h3>
+<h3 id="rowkey.scope"><a class="anchor" href="#rowkey.scope"></a>35.5. Rowkeys and ColumnFamilies</h3>
 <div class="paragraph">
 <p>Rowkeys are scoped to ColumnFamilies.
 Thus, the same rowkey could exist in each ColumnFamily that exists in a table without collision.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="changing.rowkeys"><a class="anchor" href="#changing.rowkeys"></a>34.6. Immutability of Rowkeys</h3>
+<h3 id="changing.rowkeys"><a class="anchor" href="#changing.rowkeys"></a>35.6. Immutability of Rowkeys</h3>
 <div class="paragraph">
 <p>Rowkeys cannot be changed.
 The only way they can be "changed" in a table is if the row is deleted and then re-inserted.
@@ -8080,7 +8159,7 @@ This is a fairly common question on the HBase dist-list so it pays to get the ro
 </div>
 </div>
 <div class="sect2">
-<h3 id="rowkey.regionsplits"><a class="anchor" href="#rowkey.regionsplits"></a>34.7. Relationship Between RowKeys and Region Splits</h3>
+<h3 id="rowkey.regionsplits"><a class="anchor" href="#rowkey.regionsplits"></a>35.7. Relationship Between RowKeys and Region Splits</h3>
 <div class="paragraph">
 <p>If you pre-split your table, it is <em>critical</em> to understand how your rowkey will be distributed across the region boundaries.
 As an example of why this is important, consider the example of using displayable hex characters as the lead position of the key (e.g., "0000000000000000" to "ffffffffffffffff"). Running those key ranges through <code>Bytes.split</code> (which is the split strategy used when creating regions in <code>Admin.createTable(byte[] startKey, byte[] endKey, numRegions)</code> for 10 regions will generate the following splits&#8230;&#8203;</p>
@@ -8152,10 +8231,10 @@ Know your data.</p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="schema.versions"><a class="anchor" href="#schema.versions"></a>35. Number of Versions</h2>
+<h2 id="schema.versions"><a class="anchor" href="#schema.versions"></a>36. Number of Versions</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="schema.versions.max"><a class="anchor" href="#schema.versions.max"></a>35.1. Maximum Number of Versions</h3>
+<h3 id="schema.versions.max"><a class="anchor" href="#schema.versions.max"></a>36.1. Maximum Number of Versions</h3>
 <div class="paragraph">
 <p>The maximum number of row versions to store is configured per column family via <a href="http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/HColumnDescriptor.html">HColumnDescriptor</a>.
 The default for max versions is 1.
@@ -8167,7 +8246,7 @@ The number of max versions may need to be increased or decreased depending on ap
 </div>
 </div>
 <div class="sect2">
-<h3 id="schema.minversions"><a class="anchor" href="#schema.minversions"></a>35.2. Minimum Number of Versions</h3>
+<h3 id="schema.minversions"><a class="anchor" href="#schema.minversions"></a>36.2. Minimum Number of Versions</h3>
 <div class="paragraph">
 <p>Like maximum number of row versions, the minimum number of row versions to keep is configured per column family via <a href="http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/HColumnDescriptor.html">HColumnDescriptor</a>.
 The default for min versions is 0, which means the feature is disabled.
@@ -8177,7 +8256,7 @@ The minimum number of row versions parameter is used together with the time-to-l
 </div>
 </div>
 <div class="sect1">
-<h2 id="supported.datatypes"><a class="anchor" href="#supported.datatypes"></a>36. Supported Datatypes</h2>
+<h2 id="supported.datatypes"><a class="anchor" href="#supported.datatypes"></a>37. Supported Datatypes</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>HBase supports a "bytes-in/bytes-out" interface via <a href="http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Put.html">Put</a> and <a href="http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Result.html">Result</a>, so anything that can be converted to an array of bytes can be stored as a value.
@@ -8189,7 +8268,7 @@ All rows in HBase conform to the <a href="#datamodel">Data Model</a>, and that i
 Take that into consideration when making your design, as well as block size for the ColumnFamily.</p>
 </div>
 <div class="sect2">
-<h3 id="_counters"><a class="anchor" href="#_counters"></a>36.1. Counters</h3>
+<h3 id="_counters"><a class="anchor" href="#_counters"></a>37.1. Counters</h3>
 <div class="paragraph">
 <p>One supported datatype that deserves special mention are "counters" (i.e., the ability to do atomic increments of numbers). See <a href="http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Table.html#increment%28org.apache.hadoop.hbase.client.Increment%29">Increment</a> in <code>Table</code>.</p>
 </div>
@@ -8200,7 +8279,7 @@ Take that into consideration when making your design, as well as block size for
 </div>
 </div>
 <div class="sect1">
-<h2 id="schema.joins"><a class="anchor" href="#schema.joins"></a>37. Joins</h2>
+<h2 id="schema.joins"><a class="anchor" href="#schema.joins"></a>38. Joins</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>If you have multiple tables, don&#8217;t forget to factor in the potential for <a href="#joins">[joins]</a> into the schema design.</p>
@@ -8208,7 +8287,7 @@ Take that into consideration when making your design, as well as block size for
 </div>
 </div>
 <div class="sect1">
-<h2 id="ttl"><a class="anchor" href="#ttl"></a>38. Time To Live (TTL)</h2>
+<h2 id="ttl"><a class="anchor" href="#ttl"></a>39. Time To Live (TTL)</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>ColumnFamilies can set a TTL length in seconds, and HBase will automatically delete rows once the expiration time is reached.
@@ -8243,7 +8322,7 @@ There are two notable differences between cell TTL handling and ColumnFamily TTL
 </div>
 </div>
 <div class="sect1">
-<h2 id="cf.keep.deleted"><a class="anchor" href="#cf.keep.deleted"></a>39. Keeping Deleted Cells</h2>
+<h2 id="cf.keep.deleted"><a class="anchor" href="#cf.keep.deleted"></a>40. Keeping Deleted Cells</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>By default, delete markers extend back to the beginning of time.
@@ -8384,7 +8463,7 @@ So with KEEP_DELETED_CELLS enabled deleted cells would get removed if either you
 </div>
 </div>
 <div class="sect1">
-<h2 id="secondary.indexes"><a class="anchor" href="#secondary.indexes"></a>40. Secondary Indexes and Alternate Query Paths</h2>
+<h2 id="secondary.indexes"><a class="anchor" href="#secondary.indexes"></a>41. Secondary Indexes and Alternate Query Paths</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>This section could also be titled "what if my table rowkey looks like <em>this</em> but I also want to query my table like <em>that</em>." A common example on the dist-list is where a row-key is of the format "user-timestamp" but there are reporting requirements on activity across users for certain time ranges.
@@ -8427,7 +8506,7 @@ However, HBase scales better at larger data volumes, so this is a feature trade-
 <p>Additionally, see the David Butler response in this dist-list thread <a href="http://search-hadoop.com/m/nvbiBp2TDP/Stargate%252Bhbase&amp;subj=Stargate+hbase">HBase, mail # user - Stargate+hbase</a></p>
 </div>
 <div class="sect2">
-<h3 id="secondary.indexes.filter"><a class="anchor" href="#secondary.indexes.filter"></a>40.1. Filter Query</h3>
+<h3 id="secondary.indexes.filter"><a class="anchor" href="#secondary.indexes.filter"></a>41.1. Filter Query</h3>
 <div class="paragraph">
 <p>Depending on the case, it may be appropriate to use <a href="#client.filter">Client Request Filters</a>.
 In this case, no secondary index is created.
@@ -8435,7 +8514,7 @@ However, don&#8217;t try a full-scan on a large table like this from an applicat
 </div>
 </div>
 <div class="sect2">
-<h3 id="secondary.indexes.periodic"><a class="anchor" href="#secondary.indexes.periodic"></a>40.2. Periodic-Update Secondary Index</h3>
+<h3 id="secondary.indexes.periodic"><a class="anchor" href="#secondary.indexes.periodic"></a>41.2. Periodic-Update Secondary Index</h3>
 <div class="paragraph">
 <p>A secondary index could be created in another table which is periodically updated via a MapReduce job.
 The job could be executed intra-day, but depending on load-strategy it could still potentially be out of sync with the main data table.</p>
@@ -8445,13 +8524,13 @@ The job could be executed intra-day, but depending on load-strategy it could sti
 </div>
 </div>
 <div class="sect2">
-<h3 id="secondary.indexes.dualwrite"><a class="anchor" href="#secondary.indexes.dualwrite"></a>40.3. Dual-Write Secondary Index</h3>
+<h3 id="secondary.indexes.dualwrite"><a class="anchor" href="#secondary.indexes.dualwrite"></a>41.3. Dual-Write Secondary Index</h3>
 <div class="paragraph">
 <p>Another strategy is to build the secondary index while publishing data to the cluster (e.g., write to data table, write to index table). If this is approach is taken after a data table already exists, then bootstrapping will be needed for the secondary index with a MapReduce job (see <a href="#secondary.indexes.periodic">secondary.indexes.periodic</a>).</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="secondary.indexes.summary"><a class="anchor" href="#secondary.indexes.summary"></a>40.4. Summary Tables</h3>
+<h3 id="secondary.indexes.summary"><a class="anchor" href="#secondary.indexes.summary"></a>41.4. Summary Tables</h3>
 <div class="paragraph">
 <p>Where time-ranges are very wide (e.g., year-long report) and where the data is voluminous, summary tables are a common approach.
 These would be generated with MapReduce jobs into another table.</p>
@@ -8461,7 +8540,7 @@ These would be generated with MapReduce jobs into another table.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="secondary.indexes.coproc"><a class="anchor" href="#secondary.indexes.coproc"></a>40.5. Coprocessor Secondary Index</h3>
+<h3 id="secondary.indexes.coproc"><a class="anchor" href="#secondary.indexes.coproc"></a>41.5. Coprocessor Secondary Index</h3>
 <div class="paragraph">
 <p>Coprocessors act like RDBMS triggers. These were added in 0.92.
 For more information, see <a href="#coprocessors">coprocessors</a></p>
@@ -8470,7 +8549,7 @@ For more information, see <a href="#coprocessors">coprocessors</a></p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="_constraints"><a class="anchor" href="#_constraints"></a>41. Constraints</h2>
+<h2 id="_constraints"><a class="anchor" href="#_constraints"></a>42. Constraints</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>HBase currently supports 'constraints' in traditional (SQL) database parlance.
@@ -8485,7 +8564,7 @@ since version 0.94.</p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="schema.casestudies"><a class="anchor" href="#schema.casestudies"></a>42. Schema Design Case Studies</h2>
+<h2 id="schema.casestudies"><a class="anchor" href="#schema.casestudies"></a>43. Schema Design Case Studies</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>The following will describe some typical data ingestion use-cases with HBase, and how the rowkey design and construction can be approached.
@@ -8518,7 +8597,7 @@ Know your data, and know your processing requirements.</p>
 </ul>
 </div>
 <div class="sect2">
-<h3 id="schema.casestudies.log_timeseries"><a class="anchor" href="#schema.casestudies.log_timeseries"></a>42.1. Case Study - Log Data and Timeseries Data</h3>
+<h3 id="schema.casestudies.log_timeseries"><a class="anchor" href="#schema.casestudies.log_timeseries"></a>43.1. Case Study - Log Data and Timeseries Data</h3>
 <div class="paragraph">
 <p>Assume that the following data elements are being collected.</p>
 </div>
@@ -8542,7 +8621,7 @@ Know your data, and know your processing requirements.</p>
 <p>We can store them in an HBase table called LOG_DATA, but what will the rowkey be? From these attributes the rowkey will be some combination of hostname, timestamp, and log-event - but what specifically?</p>
 </div>
 <div class="sect3">
-<h4 id="schema.casestudies.log_timeseries.tslead"><a class="anchor" href="#schema.casestudies.log_timeseries.tslead"></a>42.1.1. Timestamp In The Rowkey Lead Position</h4>
+<h4 id="schema.casestudies.log_timeseries.tslead"><a class="anchor" href="#schema.casestudies.log_timeseries.tslead"></a>43.1.1. Timestamp In The Rowkey Lead Position</h4>
 <div class="paragraph">
 <p>The rowkey <code>[timestamp][hostname][log-event]</code> suffers from the monotonically increasing rowkey problem described in <a href="#timeseries">Monotonically Increasing Row Keys/Timeseries Data</a>.</p>
 </div>
@@ -8570,14 +8649,14 @@ Attention must be paid to the number of buckets, because this will require the s
 </div>
 </div>
 <div class="sect3">
-<h4 id="schema.casestudies.log_timeseries.hostlead"><a class="anchor" href="#schema.casestudies.log_timeseries.hostlead"></a>42.1.2. Host In The Rowkey Lead Position</h4>
+<h4 id="schema.casestudies.log_timeseries.hostlead"><a class="anchor" href="#schema.casestudies.log_timeseries.hostlead"></a>43.1.2. Host In The Rowkey Lead Position</h4>
 <div class="paragraph">
 <p>The rowkey <code>[hostname][log-event][timestamp]</code> is a candidate if there is a large-ish number of hosts to spread the writes and reads across the keyspace.
 This approach would be useful if scanning by hostname was a priority.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="schema.casestudies.log_timeseries.revts"><a class="anchor" href="#schema.casestudies.log_timeseries.revts"></a>42.1.3. Timestamp, or Reverse Timestamp?</h4>
+<h4 id="schema.casestudies.log_timeseries.revts"><a class="anchor" href="#schema.casestudies.log_timeseries.revts"></a>43.1.3. Timestamp, or Reverse Timestamp?</h4>
 <div class="paragraph">
 <p>If the most important access path is to pull most recent events, then storing the timestamps as reverse-timestamps (e.g., <code>timestamp = Long.MAX_VALUE – timestamp</code>) will create the property of being able to do a Scan on <code>[hostname][log-event]</code> to obtain the quickly obtain the most recently captured events.</p>
 </div>
@@ -8603,7 +8682,7 @@ See <a href="https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Sca
 </div>
 </div>
 <div class="sect3">
-<h4 id="schema.casestudies.log_timeseries.varkeys"><a class="anchor" href="#schema.casestudies.log_timeseries.varkeys"></a>42.1.4. Variable Length or Fixed Length Rowkeys?</h4>
+<h4 id="schema.casestudies.log_timeseries.varkeys"><a class="anchor" href="#schema.casestudies.log_timeseries.varkeys"></a>43.1.4. Variable Length or Fixed Length Rowkeys?</h4>
 <div class="paragraph">
 <p>It is critical to remember that rowkeys are stamped on every column in HBase.
 If the hostname is <code>a</code> and the event type is <code>e1</code> then the resulting rowkey would be quite small.
@@ -8674,7 +8753,7 @@ by using an
 </div>
 </div>
 <div class="sect2">
-<h3 id="schema.casestudies.log_steroids"><a class="anchor" href="#schema.casestudies.log_steroids"></a>42.2. Case Study - Log Data and Timeseries Data on Steroids</h3>
+<h3 id="schema.casestudies.log_steroids"><a class="anchor" href="#schema.casestudies.log_steroids"></a>43.2. Case Study - Log Data and Timeseries Data on Steroids</h3>
 <div class="paragraph">
 <p>This effectively is the OpenTSDB approach.
 What OpenTSDB does is re-write data and pack rows into columns for certain time-periods.
@@ -8705,7 +8784,7 @@ from HBaseCon2012.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="schema.casestudies.custorder"><a class="anchor" href="#schema.casestudies.custorder"></a>42.3. Case Study - Customer/Order</h3>
+<h3 id="schema.casestudies.custorder"><a class="anchor" href="#schema.casestudies.custorder"></a>43.3. Case Study - Customer/Order</h3>
 <div class="paragraph">
 <p>Assume that HBase is used to store customer and order information.
 There are two core record-types being ingested: a Customer record type, and Order record type.</p>
@@ -8791,7 +8870,7 @@ What is the keyspace of the customer number, and what is the format (e.g., numer
 </ul>
 </div>
 <div class="sect3">
-<h4 id="schema.casestudies.custorder.tables"><a class="anchor" href="#schema.casestudies.custorder.tables"></a>42.3.1. Single Table? Multiple Tables?</h4>
+<h4 id="schema.casestudies.custorder.tables"><a class="anchor" href="#schema.casestudies.custorder.tables"></a>43.3.1. Single Table? Multiple Tables?</h4>
 <div class="paragraph">
 <p>A traditional design approach would have separate tables for CUSTOMER and SALES.
 Another option is to pack multiple record types into a single table (e.g., CUSTOMER++).</p>
@@ -8830,7 +8909,7 @@ Another option is to pack multiple record types into a single table (e.g., CUSTO
 </div>
 </div>
 <div class="sect3">
-<h4 id="schema.casestudies.custorder.obj"><a class="anchor" href="#schema.casestudies.custorder.obj"></a>42.3.2. Order Object Design</h4>
+<h4 id="schema.casestudies.custorder.obj"><a class="anchor" href="#schema.casestudies.custorder.obj"></a>43.3.2. Order Object Design</h4>
 <div class="paragraph">
 <p>Now we need to address how to model the Order object.
 Assume that the class structure is as follows:</p>
@@ -9036,13 +9115,13 @@ Care should be taken with this approach to ensure backward compatibility in case
 </div>
 </div>
 <div class="sect2">
-<h3 id="schema.smackdown"><a class="anchor" href="#schema.smackdown"></a>42.4. Case Study - "Tall/Wide/Middle" Schema Design Smackdown</h3>
+<h3 id="schema.smackdown"><a class="anchor" href="#schema.smackdown"></a>43.4. Case Study - "Tall/Wide/Middle" Schema Design Smackdown</h3>
 <div class="paragraph">
 <p>This section will describe additional schema design questions that appear on the dist-list, specifically about tall and wide tables.
 These are general guidelines and not laws - each application must consider its own needs.</p>
 </div>
 <div class="sect3">
-<h4 id="schema.smackdown.rowsversions"><a class="anchor" href="#schema.smackdown.rowsversions"></a>42.4.1. Rows vs. Versions</h4>
+<h4 id="schema.smackdown.rowsversions"><a class="anchor" href="#schema.smackdown.rowsversions"></a>43.4.1. Rows vs. Versions</h4>
 <div class="paragraph">
 <p>A common question is whether one should prefer rows or HBase&#8217;s built-in-versioning.
 The context is typically where there are "a lot" of versions of a row to be retained (e.g., where it is significantly above the HBase default of 1 max versions). The rows-approach would require storing a timestamp in some portion of the rowkey so that they would not overwrite with each successive update.</p>
@@ -9052,7 +9131,7 @@ The context is typically where there are "a lot" of versions of a row to be reta
 </div>
 </div>
 <div class="sect3">
-<h4 id="schema.smackdown.rowscols"><a class="anchor" href="#schema.smackdown.rowscols"></a>42.4.2. Rows vs. Columns</h4>
+<h4 id="schema.smackdown.rowscols"><a class="anchor" href="#schema.smackdown.rowscols"></a>43.4.2. Rows vs. Columns</h4>
 <div class="paragraph">
 <p>Another common question is whether one should prefer rows or columns.
 The context is typically in extreme cases of wide tables, such as having 1 row with 1 million attributes, or 1 million rows with 1 columns apiece.</p>
@@ -9063,7 +9142,7 @@ But there is also a middle path between these two options, and that is "Rows as
 </div>
 </div>
 <div class="sect3">
-<h4 id="schema.smackdown.rowsascols"><a class="anchor" href="#schema.smackdown.rowsascols"></a>42.4.3. Rows as Columns</h4>
+<h4 id="schema.smackdown.rowsascols"><a class="anchor" href="#schema.smackdown.rowsascols"></a>43.4.3. Rows as Columns</h4>
 <div class="paragraph">
 <p>The middle path between Rows vs.
 Columns is packing data that would be a separate row into columns, for certain rows.
@@ -9074,7 +9153,7 @@ For an overview of this approach, see <a href="#schema.casestudies.log_steroids"
 </div>
 </div>
 <div class="sect2">
-<h3 id="casestudies.schema.listdata"><a class="anchor" href="#casestudies.schema.listdata"></a>42.5. Case Study - List Data</h3>
+<h3 id="casestudies.schema.listdata"><a class="anchor" href="#casestudies.schema.listdata"></a>43.5. Case Study - List Data</h3>
 <div class="paragraph">
 <p>The following is an exchange from the user dist-list regarding a fairly common question: how to handle per-user list data in Apache HBase.</p>
 </div>
@@ -9189,7 +9268,7 @@ If you don&#8217;t have time to build it both ways and compare, my advice would
 </div>
 </div>
 <div class="sect1">
-<h2 id="schema.ops"><a class="anchor" href="#schema.ops"></a>43. Operational and Performance Configuration Options</h2>
+<h2 id="schema.ops"><a class="anchor" href="#schema.ops"></a>44. Operational and Performance Configuration Options</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>See the Performance section <a href="#perf.schema">perf.schema</a> for more information operational and performance schema design options, such as Bloom Filters, Table-configured regionsizes, compression, and blocksizes.</p>
@@ -9234,7 +9313,7 @@ In the notes below, we refer to o.a.h.h.mapreduce but replace with the o.a.h.h.m
 </div>
 </div>
 <div class="sect1">
-<h2 id="hbase.mapreduce.classpath"><a class="anchor" href="#hbase.mapreduce.classpath"></a>44. HBase, MapReduce, and the CLASSPATH</h2>
+<h2 id="hbase.mapreduce.classpath"><a class="anchor" href="#hbase.mapreduce.classpath"></a>45. HBase, MapReduce, and the CLASSPATH</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>By default, MapReduce jobs deployed to a MapReduce cluster do not have access to either the HBase configuration under <code>$HBASE_CONF_DIR</code> or the HBase classes.</p>
@@ -9390,7 +9469,7 @@ $ HADOOP_CLASSPATH=$(hbase classpath) hadoop jar MyJob.jar MyJobMainClass</code>
 </div>
 </div>
 <div class="sect1">
-<h2 id="_mapreduce_scan_caching"><a class="anchor" href="#_mapreduce_scan_caching"></a>45. MapReduce Scan Caching</h2>
+<h2 id="_mapreduce_scan_caching"><a class="anchor" href="#_mapreduce_scan_caching"></a>46. MapReduce Scan Caching</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>TableMapReduceUtil now restores the option to set scanner caching (the number of rows which are cached before returning the result to the client) on the Scan object that is passed in.
@@ -9425,7 +9504,7 @@ If you think of the scan as a shovel, a bigger cache setting is analogous to a b
 </div>
 </div>
 <div class="sect1">
-<h2 id="_bundled_hbase_mapreduce_jobs"><a class="anchor" href="#_bundled_hbase_mapreduce_jobs"></a>46. Bundled HBase MapReduce Jobs</h2>
+<h2 id="_bundled_hbase_mapreduce_jobs"><a class="anchor" href="#_bundled_hbase_mapreduce_jobs"></a>47. Bundled HBase MapReduce Jobs</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>The HBase JAR also serves as a Driver for some bundled MapReduce jobs.
@@ -9456,7 +9535,7 @@ To run one of the jobs, model your command after the following example.</p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="_hbase_as_a_mapreduce_job_data_source_and_data_sink"><a class="anchor" href="#_hbase_as_a_mapreduce_job_data_source_and_data_sink"></a>47. HBase as a MapReduce Job Data Source and Data Sink</h2>
+<h2 id="_hbase_as_a_mapreduce_job_data_source_and_data_sink"><a class="anchor" href="#_hbase_as_a_mapreduce_job_data_source_and_data_sink"></a>48. HBase as a MapReduce Job Data Source and Data Sink</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>HBase can be used as a data source, <a href="http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/TableInputFormat.html">TableInputFormat</a>, and data sink, <a href="http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/TableOutputFormat.html">TableOutputFormat</a> or <a href="http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/MultiTableOutputFormat.html">MultiTableOutputFormat</a>, for MapReduce jobs.
@@ -9485,7 +9564,7 @@ Otherwise use the default partitioner.</p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="_writing_hfiles_directly_during_bulk_import"><a class="anchor" href="#_writing_hfiles_directly_during_bulk_import"></a>48. Writing HFiles Directly During Bulk Import</h2>
+<h2 id="_writing_hfiles_directly_during_bulk_import"><a class="anchor" href="#_writing_hfiles_directly_during_bulk_import"></a>49. Writing HFiles Directly During Bulk Import</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>If you are importing into a new table, you can bypass the HBase API and write your content directly to the filesystem, formatted into HBase data files (HFiles). Your import will run faster, perhaps an order of magnitude faster.
@@ -9494,7 +9573,7 @@ For more on how this mechanism works, see <a href="#arch.bulk.load">Bulk Loading
 </div>
 </div>
 <div class="sect1">
-<h2 id="_rowcounter_example"><a class="anchor" href="#_rowcounter_example"></a>49. RowCounter Example</h2>
+<h2 id="_rowcounter_example"><a class="anchor" href="#_rowcounter_example"></a>50. RowCounter Example</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>The included <a href="http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/RowCounter.html">RowCounter</a> MapReduce job uses <code>TableInputFormat</code> and does a count of all rows in the specified table.
@@ -9515,17 +9594,17 @@ If you have classpath errors, see <a href="#hbase.mapreduce.classpath">HBase, Ma
 </div>
 </div>
 <div class="sect1">
-<h2 id="splitter"><a class="anchor" href="#splitter"></a>50. Map-Task Splitting</h2>
+<h2 id="splitter"><a class="anchor" href="#splitter"></a>51. Map-Task Splitting</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="splitter.default"><a class="anchor" href="#splitter.default"></a>50.1. The Default HBase MapReduce Splitter</h3>
+<h3 id="splitter.default"><a class="anchor" href="#splitter.default"></a>51.1. The Default HBase MapReduce Splitter</h3>
 <div class="paragraph">
 <p>When <a href="http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/TableInputFormat.html">TableInputFormat</a> is used to source an HBase table in a MapReduce job, its splitter will make a map task for each region of the table.
 Thus, if there are 100 regions in the table, there will be 100 map-tasks for the job - regardless of how many column families are selected in the Scan.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="splitter.custom"><a class="anchor" href="#splitter.custom"></a>50.2. Custom Splitters</h3>
+<h3 id="splitter.custom"><a class="anchor" href="#splitter.custom"></a>51.2. Custom Splitters</h3>
 <div class="paragraph">
 <p>For those interested in implementing custom splitters, see the method <code>getSplits</code> in <a href="http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html">TableInputFormatBase</a>.
 That is where the logic for map-task assignment resides.</p>
@@ -9534,10 +9613,10 @@ That is where the logic for map-task assignment resides.</p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="mapreduce.example"><a class="anchor" href="#mapreduce.example"></a>51. HBase MapReduce Examples</h2>
+<h2 id="mapreduce.example"><a class="anchor" href="#mapreduce.example"></a>52. HBase MapReduce Examples</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="mapreduce.example.read"><a class="anchor" href="#mapreduce.example.read"></a>51.1. HBase MapReduce Read Example</h3>
+<h3 id="mapreduce.example.read"><a class="anchor" href="#mapreduce.example.read"></a>52.1. HBase MapReduce Read Example</h3>
 <div class="paragraph">
 <p>The following is an example of using HBase as a MapReduce source in read-only manner.
 Specifically, there is a Mapper instance but no Reducer, and nothing is being emitted from the Mapper.
@@ -9585,7 +9664,7 @@ job.setOutputFormatClass(NullOutputFormat.class);   <span class="comment">// bec
 </div>
 </div>
 <div class="sect2">
-<h3 id="mapreduce.example.readwrite"><a class="anchor" href="#mapreduce.example.readwrite"></a>51.2. HBase MapReduce Read/Write Example</h3>
+<h3 id="mapreduce.example.readwrite"><a class="anchor" href="#mapreduce.example.readwrite"></a>52.2. HBase MapReduce Read/Write Example</h3>
 <div class="paragraph">
 <p>The following is an example of using HBase both as a source and as a sink with MapReduce.
 This example will simply copy data from one table to another.</p>
@@ -9655,13 +9734,13 @@ Note: this is what the CopyTable utility does.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="mapreduce.example.readwrite.multi"><a class="anchor" href="#mapreduce.example.readwrite.multi"></a>51.3. HBase MapReduce Read/Write Example With Multi-Table Output</h3>
+<h3 id="mapreduce.example.readwrite.multi"><a class="anchor" href="#mapreduce.example.readwrite.multi"></a>52.3. HBase MapReduce Read/Write Example With Multi-Table Output</h3>
 <div class="paragraph">
 <p>TODO: example for <code>MultiTableOutputFormat</code>.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="mapreduce.example.summary"><a class="anchor" href="#mapreduce.example.summary"></a>51.4. HBase MapReduce Summary to HBase Example</h3>
+<h3 id="mapreduce.example.summary"><a class="anchor" href="#mapreduce.example.summary"></a>52.4. HBase MapReduce Summary to HBase Example</h3>
 <div class="paragraph">
 <p>The following example uses HBase as a MapReduce source and sink with a summarization step.
 This example will count the number of distinct instances of a value in a table and write those summarized counts in another table.</p>
@@ -9741,7 +9820,7 @@ This value is used as the key to emit from the mapper, and an <code>IntWritable<
 </div>
 </div>
 <div class="sect2">
-<h3 id="mapreduce.example.summary.file"><a class="anchor" href="#mapreduce.example.summary.file"></a>51.5. HBase MapReduce Summary to File Example</h3>
+<h3 id="mapreduce.example.summary.file"><a class="anchor" href="#mapreduce.example.summary.file"></a>52.5. HBase MapReduce Summary to File Example</h3>
 <div class="paragraph">
 <p>This very similar to the summary example above, with exception that this is using HBase as a MapReduce source but HDFS as the sink.
 The differences are in the job setup and in the reducer.
@@ -9795,7 +9874,7 @@ As for the Reducer, it is a "generic" Reducer instead of extending TableMapper a
 </div>
 </div>
 <div class="sect2">
-<h3 id="mapreduce.example.summary.noreducer"><a class="anchor" href="#mapreduce.example.summary.noreducer"></a>51.6. HBase MapReduce Summary to HBase Without Reducer</h3>
+<h3 id="mapreduce.example.summary.noreducer"><a class="anchor" href="#mapreduce.example.summary.noreducer"></a>52.6. HBase MapReduce Summary to HBase Without Reducer</h3>
 <div class="paragraph">
 <p>It is also possible to perform summaries without a reducer - if you use HBase as the reducer.</p>
 </div>
@@ -9810,7 +9889,7 @@ However, your mileage may vary depending on the number of rows to be processed a
 </div>
 </div>
 <div class="sect2">
-<h3 id="mapreduce.example.summary.rdbms"><a class="anchor" href="#mapreduce.example.summary.rdbms"></a>51.7. HBase MapReduce Summary to RDBMS</h3>
+<h3 id="mapreduce.example.summary.rdbms"><a class="anchor" href="#mapreduce.example.summary.rdbms"></a>52.7. HBase MapReduce Summary to RDBMS</h3>
 <div class="paragraph">
 <p>Sometimes it is more appropriate to generate summaries to an RDBMS.
 For these cases, it is possible to generate summaries directly to an RDBMS via a custom reducer.
@@ -9851,7 +9930,7 @@ Recognize that the more reducers that are assigned to the job, the more simultan
 </div>
 </div>
 <div class="sect1">
-<h2 id="mapreduce.htable.access"><a class="anchor" href="#mapreduce.htable.access"></a>52. Accessing Other HBase Tables in a MapReduce Job</h2>
+<h2 id="mapreduce.htable.access"><a class="anchor" href="#mapreduce.htable.access"></a>53. Accessing Other HBase Tables in a MapReduce Job</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>Although the framework currently allows one HBase table as input to a MapReduce job, other HBase tables can be accessed as lookup tables, etc., in a MapReduce job via creating an Table instance in the setup method of the Mapper.</p>
@@ -9876,7 +9955,7 @@ Recognize that the more reducers that are assigned to the job, the more simultan
 </div>
 </div>
 <div class="sect1">
-<h2 id="mapreduce.specex"><a class="anchor" href="#mapreduce.specex"></a>53. Speculative Execution</h2>
+<h2 id="mapreduce.specex"><a class="anchor" href="#mapreduce.specex"></a>54. Speculative Execution</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>It is generally advisable to turn off speculative execution for MapReduce jobs that use HBase as a source.
@@ -9889,7 +9968,7 @@ Especially for longer running jobs, speculative execution will create duplicate
 </div>
 </div>
 <div class="sect1">
-<h2 id="cascading"><a class="anchor" href="#cascading"></a>54. Cascading</h2>
+<h2 id="cascading"><a class="anchor" href="#cascading"></a>55. Cascading</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p><a href="http://www.cascading.org/">Cascading</a> is an alternative API for MapReduce, which
@@ -9978,7 +10057,7 @@ To protect existing HBase installations from exploitation, please <strong>do not
 </div>
 </div>
 <div class="sect1">
-<h2 id="_using_secure_http_https_for_the_web_ui"><a class="anchor" href="#_using_secure_http_https_for_the_web_ui"></a>55. Using Secure HTTP (HTTPS) for the Web UI</h2>
+<h2 id="_using_secure_http_https_for_the_web_ui"><a class="anchor" href="#_using_secure_http_https_for_the_web_ui"></a>56. Using Secure HTTP (HTTPS) for the Web UI</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>A default HBase install uses insecure HTTP connections for Web UIs for the master and region servers.
@@ -10031,7 +10110,7 @@ If you know how to fix this without opening a second port for HTTPS, patches are
 </div>
 </div>
 <div class="sect1">
-<h2 id="hbase.secure.configuration"><a class="anchor" href="#hbase.secure.configuration"></a>56. Secure Client Access to Apache HBase</h2>
+<h2 id="hbase.secure.configuration"><a class="anchor" href="#hbase.secure.configuration"></a>57. Secure Client Access to Apache HBase</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>Newer releases of Apache HBase (&gt;= 0.92) support optional SASL authentication of clients.
@@ -10041,7 +10120,7 @@ See also Matteo Bertozzi&#8217;s article on <a href="http://www.cloudera.com/blo
 <p>This describes how to set up Apache HBase and clients for connection to secure HBase resources.</p>
 </div>
 <div class="sect2">
-<h3 id="security.prerequisites"><a class="anchor" href="#security.prerequisites"></a>56.1. Prerequisites</h3>
+<h3 id="security.prerequisites"><a class="anchor" href="#security.prerequisites"></a>57.1. Prerequisites</h3>
 <div class="dlist">
 <dl>
 <dt class="hdlist1">Hadoop Authentication Configuration</dt>
@@ -10058,7 +10137,7 @@ Otherwise, you would be using strong authentication for HBase but not for the un
 </div>
 </div>
 <div class="sect2">
-<h3 id="_server_side_configuration_for_secure_operation"><a class="anchor" href="#_server_side_configuration_for_secure_operation"></a>56.2. Server-side Configuration for Secure Operation</h3>
+<h3 id="_server_side_configuration_for_secure_operation"><a class="anchor" href="#_server_side_configuration_for_secure_operation"></a>57.2. Server-side Configuration for Secure Operation</h3>
 <div class="paragraph">
 <p>First, refer to <a href="#security.prerequisites">security.prerequisites</a> and ensure that your underlying HDFS configuration is secure.</p>
 </div>
@@ -10086,7 +10165,7 @@ Otherwise, you would be using strong authentication for HBase but not for the un
 </div>
 </div>
 <div class="sect2">
-<h3 id="_client_side_configuration_for_secure_operation"><a class="anchor" href="#_client_side_configuration_for_secure_operation"></a>56.3. Client-side Configuration for Secure Operation</h3>
+<h3 id="_client_side_configuration_for_secure_operation"><a class="anchor" href="#_client_side_configuration_for_secure_operation"></a>57.3. Client-side Configuration for Secure Operation</h3>
 <div class="paragraph">
 <p>First, refer to <a href="#security.prerequisites">Prerequisites</a> and ensure that your underlying HDFS configuration is secure.</p>
 </div>
@@ -10140,7 +10219,7 @@ conf.set(<span class="string"><span class="delimiter">&quot;</span><span class="
 </div>
 </div>
 <div class="sect2">
-<h3 id="security.client.thrift"><a class="anchor" href="#security.client.thrift"></a>56.4. Client-side Configuration for Secure Operation - Thrift Gateway</h3>
+<h3 id="security.client.thrift"><a class="anchor" href="#security.client.thrift"></a>57.4. Client-side Configuration for Secure Operation - Thrift Gateway</h3>
 <div class="paragraph">
 <p>Add the following to the <code>hbase-site.xml</code> file for every Thrift gateway:</p>
 </div>
@@ -10190,7 +10269,7 @@ All client access via the Thrift gateway will use the Thrift gateway&#8217;s cre
 </div>
 </div>
 <div class="sect2">
-<h3 id="security.gateway.thrift"><a class="anchor" href="#security.gateway.thrift"></a>56.5. Configure the Thrift Gateway to Authenticate on Behalf of the Client</h3>
+<h3 id="security.gateway.thrift"><a class="anchor" href="#security.gateway.thrift"></a>57.5. Configure the Thrift Gateway to Authenticate on Behalf of the Client</h3>
 <div class="paragraph">
 <p><a href="#security.client.thrift">Client-side Configuration for Secure Operation - Thrift Gateway</a> describes how to authenticate a Thrift client to HBase using a fixed user.
 As an alternative, you can configure the Thrift gateway to authenticate to HBase on the client&#8217;s behalf, and to access HBase using a proxy user.
@@ -10248,7 +10327,7 @@ To start Thrift on a node, run the command <code>bin/hbase-daemon.sh start thrif
 </div>
 </div>
 <div class="sect2">
-<h3 id="security.gateway.thrift.doas"><a class="anchor" href="#security.gateway.thrift.doas"></a>56.6. Configure the Thrift Gateway to Use the <code>doAs</code> Feature</h3>
+<h3 id="security.gateway.thrift.doas"><a class="anchor" href="#security.gateway.thrift.doas"></a>57.6. Configure the Thrift Gateway to Use the <code>doAs</code> Feature</h3>
 <div class="paragraph">
 <p><a href="#security.gateway.thrift">Configure the Thrift Gateway to Authenticate on Behalf of the Client</a> describes how to configure the Thrift gateway to authenticate to HBase on the client&#8217;s behalf, and to access HBase using a proxy user. The limitation of this approach is that after the client is initialized with a particular set of credentials, it cannot change these credentials during the session. The <code>doAs</code> feature provides a flexible way to impersonate multiple principals using the same client. This feature was implemented in <a href="https://issues.apache.org/jira/browse/HBASE-12640">HBASE-12640</a> for Thrift 1, but is currently not available for Thrift 2.</p>
 </div>
@@ -10293,7 +10372,7 @@ to get an overall idea of how to use this feature in your client.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_client_side_configuration_for_secure_operation_rest_gateway"><a class="anchor" href="#_client_side_configuration_for_secure_operation_rest_gateway"></a>56.7. Client-side Configuration for Secure Operation - REST Gateway</h3>
+<h3 id="_client_side_configuration_for_secure_operation_rest_gateway"><a class="anchor" href="#_client_side_configuration_for_secure_operation_rest_gateway"></a>57.7. Client-side Configuration for Secure Operation - REST Gateway</h3>
 <div class="paragraph">
 <p>Add the following to the <code>hbase-site.xml</code> file for every REST gateway:</p>
 </div>
@@ -10370,7 +10449,7 @@ For more information, refer to <a href="http://hadoop.apache.org/docs/stable/had
 </div>
 </div>
 <div class="sect2">
-<h3 id="security.rest.gateway"><a class="anchor" href="#security.rest.gateway"></a>56.8. REST Gateway Impersonation Configuration</h3>
+<h3 id="security.rest.gateway"><a class="anchor" href="#security.rest.gateway"></a>57.8. REST Gateway Impersonation Configuration</h3>
 <div class="paragraph">
 <p>By default, the REST gateway doesn&#8217;t support impersonation.
 It accesses the HBase on behalf of clients as the user configured as in the previous section.
@@ -10432,7 +10511,7 @@ So it can apply proper authorizations.</p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="hbase.secure.simpleconfiguration"><a class="anchor" href="#hbase.secure.simpleconfiguration"></a>57. Simple User Access to Apache HBase</h2>
+<h2 id="hbase.secure.simpleconfiguration"><a class="anchor" href="#hbase.secure.simpleconfiguration"></a>58. Simple User Access to Apache HBase</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>Newer releases of Apache HBase (&gt;= 0.92) support optional SASL authentication of clients.
@@ -10442,7 +10521,7 @@ See also Matteo Bertozzi&#8217;s article on <a href="http://www.cloudera.com/blo
 <p>This describes how to set up Apache HBase and clients for simple user access to HBase resources.</p>
 </div>
 <div class="sect2">
-<h3 id="_simple_versus_secure_access"><a class="anchor" href="#_simple_versus_secure_access"></a>57.1. Simple versus Secure Access</h3>
+<h3 id="_simple_versus_secure_access"><a class="anchor" href="#_simple_versus_secure_access"></a>58.1. Simple versus Secure Access</h3>
 <div class="paragraph">
 <p>The following section shows how to set up simple user access.
 Simple user access is not a secure method of operating HBase.
@@ -10456,13 +10535,13 @@ Refer to the section <a href="#hbase.secure.configuration">Secure Client Access
 </div>
 </div>
 <div class="sect2">
-<h3 id="_prerequisites"><a class="anchor" href="#_prerequisites"></a>57.2. Prerequisites</h3>
+<h3 id="_prerequisites"><a class="anchor" href="#_prerequisites"></a>58.2. Prerequisites</h3>
 <div class="paragraph">
 <p>None</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_server_side_configuration_for_simple_user_access_operation"><a class="anchor" href="#_server_side_configuration_for_simple_user_access_operation"></a>57.3. Server-side Configuration for Simple User Access Operation</h3>
+<h3 id="_server_side_configuration_for_simple_user_access_operation"><a class="anchor" href="#_server_side_configuration_for_simple_user_access_operation"></a>58.3. Server-side Configuration for Simple User Access Operation</h3>
 <div class="paragraph">
 <p>Add the following to the <code>hbase-site.xml</code> file on every server machine in the cluster:</p>
 </div>
@@ -10514,7 +10593,7 @@ Refer to the section <a href="#hbase.secure.configuration">Secure Client Access
 </div>
 </div>
 <div class="sect2">
-<h3 id="_client_side_configuration_for_simple_user_access_operation"><a class="anchor" href="#_client_side_configuration_for_simple_user_access_operation"></a>57.4. Client-side Configuration for Simple User Access Operation</h3>
+<h3 id="_client_side_configuration_for_simple_user_access_operation"><a class="anchor" href="#_client_side_configuration_for_simple_user_access_operation"></a>58.4. Client-side Configuration for Simple User Access Operation</h3>
 <div class="paragraph">
 <p>Add the following to the <code>hbase-site.xml</code> file on every client:</p>
 </div>
@@ -10541,7 +10620,7 @@ Refer to the section <a href="#hbase.secure.configuration">Secure Client Access
 <p>Be advised that if the <code>hbase.security.authentication</code> in the client- and server-side site files do not match, the client will not be able to communicate with the cluster.</p>
 </div>
 <div class="sect3">
-<h4 id="_client_side_configuration_for_simple_user_access_operation_thrift_gateway"><a class="anchor" href="#_client_side_configuration_for_simple_user_access_operation_thrift_gateway"></a>57.4.1. Client-side Configuration for Simple User Access Operation - Thrift Gateway</h4>
+<h4 id="_client_side_configuration_for_simple_user_access_operation_thrift_gateway"><a class="anchor" href="#_client_side_configuration_for_simple_user_access_operation_thrift_gateway"></a>58.4.1. Client-side Configuration for Simple User Access Operation - Thrift Gateway</h4>
 <div class="paragraph">
 <p>The Thrift gateway user will need access.
 For example, to give the Thrift API user, <code>thrift_server</code>, administrative access, a command such as this one will suffice:</p>
@@ -10561,7 +10640,7 @@ All client access via the Thrift gateway will use the Thrift gateway&#8217;s cre
 </div>
 </div>
 <div class="sect3">
-<h4 id="_client_side_configuration_for_simple_user_access_operation_rest_gateway"><a class="anchor" href="#_client_side_configuration_for_simple_user_access_operation_rest_gateway"></a>57.4.2. Client-side Configuration for Simple User Access Operation - REST Gateway</h4>
+<h4 id="_client_side_configuration_for_simple_user_access_operation_rest_gateway"><a class="anchor" href="#_client_side_configuration_for_simple_user_access_operation_rest_gateway"></a>58.4.2. Client-side Configuration for Simple User Access Operation - REST Gateway</h4>
 <div class="paragraph">
 <p>The REST gateway will authenticate with HBase using the supplied credential.
 No authentication will be performed by the REST gateway itself.
@@ -10588,13 +10667,13 @@ This is future work.</p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="_securing_access_to_hdfs_and_zookeeper"><a class="anchor" href="#_securing_access_to_hdfs_and_zookeeper"></a>58. Securing Access to HDFS and ZooKeeper</h2>
+<h2 id="_securing_access_to_hdfs_and_zookeeper"><a class="anchor" href="#_securing_access_to_hdfs_and_zookeeper"></a>59. Securing Access to HDFS and ZooKeeper</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>Secure HBase requires secure ZooKeeper and HDFS so that users cannot access and/or modify the metadata and data from under HBase. HBase uses HDFS (or configured file system) to keep its data files as well as write ahead logs (WALs) and other data. HBase uses ZooKeeper to store some metadata for operations (master address, table locks, recovery state, etc).</p>
 </div>
 <div class="sect2">
-<h3 id="_securing_zookeeper_data"><a class="anchor" href="#_securing_zookeeper_data"></a>58.1. Securing ZooKeeper Data</h3>
+<h3 id="_securing_zookeeper_data"><a class="anchor" href="#_securing_zookeeper_data"></a>59.1. Securing ZooKeeper Data</h3>
 <div class="paragraph">
 <p>ZooKeeper has a pluggable authentication mechanism to enable access from clients using different methods. ZooKeeper even allows authenticated and un-authenticated clients at the same time. The access to znodes can be restricted by providing Access Control Lists (ACLs) per znode. An ACL contains two components, the authentication method and the principal. ACLs are NOT enforced hierarchically. See <a href="https://zookeeper.apache.org/doc/r3.3.6/zookeeperProgrammers.html#sc_ZooKeeperPluggableAuthentication">ZooKeeper Programmers Guide</a> for details.</p>
 </div>
@@ -10603,7 +10682,7 @@ This is future work.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_securing_file_system_hdfs_data"><a class="anchor" href="#_securing_file_system_hdfs_data"></a>58.2. Securing File System (HDFS) Data</h3>
+<h3 id="_securing_file_system_hdfs_data"><a class="anchor" href="#_securing_file_system_hdfs_data"></a>59.2. Securing File System (HDFS) Data</h3>
 <div class="paragraph">
 <p>All of the data under management is kept under the root directory in the file system (<code>hbase.rootdir</code>). Access to the data and WAL files in the filesystem should be restricted so that users cannot bypass the HBase layer, and peek at the underlying data files from the file system. HBase assumes the filesystem used (HDFS or other) enforces permissions hierarchically. If sufficient protection from the file system (both authorization and authentication) is not provided, HBase level authorization control (ACLs, visibility labels, etc) is meaningless since the user can always access the data from the file system.</p>
 </div>
@@ -10625,7 +10704,7 @@ This is future work.</p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="_securing_access_to_your_data"><a class="anchor" href="#_securing_access_to_your_data"></a>59. Securing Access To Your Data</h2>
+<h2 id="_securing_access_to_your_data"><a class="anchor" href="#_securing_access_to_your_data"></a>60. Securing Access To Your Data</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>After you have configured secure authentication between HBase client and server processes and gateways, you need to consider the security of your data itself.
@@ -10704,7 +10783,7 @@ This is the default for HBase 1.0 and newer.</p>
 </ol>
 </div>
 <div class="sect2">
-<h3 id="hbase.tags"><a class="anchor" href="#hbase.tags"></a>59.1. Tags</h3>
+<h3 id="hbase.tags"><a class="anchor" href="#hbase.tags"></a>60.1. Tags</h3>
 <div class="paragraph">
 <p><em class="firstterm">Tags</em> are a feature of HFile v3.
 A tag is a piece of metadata which is part of a cell, separate from the key, value, and version.
@@ -10714,7 +10793,7 @@ It is possible that in the future, tags will be used to implement other HBase fe
 You don&#8217;t need to know a lot about tags in order to use the security features they enable.</p>
 </div>
 <div class="sect3">
-<h4 id="_implementation_details"><a class="anchor" href="#_implementation_details"></a>59.1.1. Implementation Details</h4>
+<h4 id="_implementation_details"><a class="anchor" href="#_implementation_details"></a>60.1.1. Implementation Details</h4>
 <div class="paragraph">
 <p>Every cell can have zero or more tags.
 Every tag has a type and the actual tag byte array.</p>
@@ -10735,9 +10814,9 @@ Tag compression uses dictionary encoding.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="hbase.accesscontrol.configuration"><a class="anchor" href="#hbase.accesscontrol.configuration"></a>59.2. Access Control Labels (ACLs)</h3>
+<h3 id="hbase.accesscontrol.configuration"><a class="anchor" href="#hbase.accesscontrol.configuration"></a>60.2. Access Control Labels (ACLs)</h3>
 <div class="sect3">
-<h4 id="_how_it_works"><a class="anchor" href="#_how_it_works"></a>59.2.1. How It Works</h4>
+<h4 id="_how_it_works"><a class="anchor" href="#_how_it_works"></a>60.2.1. How It Works</h4>
 <div class="paragraph">
 <p>ACLs in HBase are based upon a user&#8217;s membership in or exclusion from groups, and a given group&#8217;s permissions to access a given resource.
 ACLs are implemented as a coprocessor called AccessController.</p>
@@ -11402,7 +11481,7 @@ hbase&gt; user_permission JAVA_REGEX</pre>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_visibility_labels"><a class="anchor" href="#_visibility_labels"></a>59.3. Visibility Labels</h3>
+<h3 id="_visibility_labels"><a class="anchor" href="#_visibility_labels"></a>60.3. Visibility Labels</h3>
 <div class="paragraph">
 <p>Visibility labels control can be used to only permit users or principals associated with a given label to read or access cells with that label.
 For instance, you might label a cell <code>top-secret</code>, and only grant access to that label to the <code>managers</code> group.
@@ -11515,7 +11594,7 @@ Visibility labels are not currently applied for superusers.
 </tbody>
 </table>
 <div class="sect3">
-<h4 id="_server_side_configuration_2"><a class="anchor" href="#_server_side_configuration_2"></a>59.3.1. Server-Side Configuration</h4>
+<h4 id="_server_side_configuration_2"><a class="anchor" href="#_server_side_configuration_2"></a>60.3.1. Server-Side Configuration</h4>
 <div class="olist arabic">
 <ol class="arabic">
 <li>
@@ -11565,7 +11644,7 @@ In that case, the mutation will fail if it makes use of labels the user is not a
 </div>
 </div>
 <div class="sect3">
-<h4 id="_administration_2"><a class="anchor" href="#_administration_2"></a>59.3.2. Administration</h4>
+<h4 id="_administration_2"><a class="anchor" href="#_administration_2"></a>60.3.2. Administration</h4>
 <div class="paragraph">
 <p>Administration tasks can be performed using the HBase Shell or the Java API.
 For defining the list of visibility labels and associating labels with users, the HBase Shell is probably simpler.</p>
@@ -11799,7 +11878,7 @@ The correct way to apply cell level labels is to do so in the application code w
 </div>
 </div>
 <div class="sect3">
-<h4 id="reading_cells_with_labels"><a class="anchor" href="#reading_cells_with_labels"></a>59.3.3. Reading Cells with Labels</h4>
+<h4 id="reading_cells_with_labels"><a class="anchor" href="#reading_cells_with_labels"></a>60.3.3. Reading Cells with Labels</h4>
 <div class="paragraph">
 <p>When you issue a Scan or Get, HBase uses your default set of authorizations to
 filter out cells that you do not have access to. A superuser can set the default
@@ -11860,7 +11939,7 @@ public <span class="predefined-type">Void</span> run() <span class="directive">t
 </div>
 </div>
 <div class="sect3">
-<h4 id="_implementing_your_own_visibility_label_algorithm"><a class="anchor" href="#_implementing_your_own_visibility_label_algorithm"></a>59.3.4. Implementing Your Own Visibility Label Algorithm</h4>
+<h4 id="_implementing_your_own_visibility_label_algorithm"><a class="anchor" href="#_implementing_your_own_visibility_label_algorithm"></a>60.3.4. Implementing Your Own Visibility Label Algorithm</h4>
 <div class="paragraph">
 <p>Interpreting the labels authenticated for a given get/scan request is a pluggable algorithm.</p>
 </div>
@@ -11872,7 +11951,7 @@ public <span class="predefined-type">Void</span> run() <span class="directive">t
 </div>
 </div>
 <div class="sect3">
-<h4 id="_replicating_visibility_tags_as_strings"><a class="anchor" href="#_replicating_visibility_tags_as_strings"></a>59.3.5. Replicating Visibility Tags as Strings</h4>
+<h4 id="_replicating_visibility_tags_as_strings"><a class="anchor" href="#_replicating_visibility_tags_as_strings"></a>60.3.5. Replicating Visibility Tags as Strings</h4>
 <div class="paragraph">
 <p>As mentioned in the above sections, the interface <code>VisibilityLabelService</code> could be used to implement a different way of storing the visibility expressions in the cells. Clusters with replication enabled also must replicate the visibility expressions to the peer cluster. If <code>DefaultVisibilityLabelServiceImpl</code> is used as the implementation for <code>VisibilityLabelService</code>, all the visibility expression are converted to the corresponding expression based on the ordinals for each visibility label stored in the labels table. During replication, visible cells are also replicated with the ordinal-based expression intact. The peer cluster may not have the same <code>labels</code> table with the same ordinal mapping for the visibility labels. In that case, replicating the ordinals makes no sense. It would be better if the replication occurred with the visibility expressions transmitted as strings. To replicate the visibility expression as strings to the peer 
 cluster, create a <code>RegionServerObserver</code> configuration which works based on the implementation of the <code>VisibilityLabelService</code> interface. The configuration below enables replication of visibility expressions to peer clusters as strings. See <a href="https://issues.apache.org/jira/browse/HBASE-11639">HBASE-11639</a> for more details.</p>
 </div>
@@ -11887,7 +11966,7 @@ public <span class="predefined-type">Void</span> run() <span class="directive">t
 </div>
 </div>
 <div class="sect2">
-<h3 id="hbase.encryption.server"><a class="anchor" href="#hbase.encryption.server"></a>59.4. Transparent Encryption of Data At Rest</h3>
+<h3 id="hbase.encryption.server"><a class="anchor" href="#hbase.encryption.server"></a>60.4. Transparent Encryption of Data At Rest</h3>
 <div class="paragraph">
 <p>HBase provides a mechanism for protecting your data at rest, in HFiles and the WAL, which reside within HDFS or another distributed filesystem.
 A two-tier architecture is used for flexible and non-intrusive key rotation.
@@ -11896,7 +11975,7 @@ When data is written, it is encrypted.
 When it is read, it is decrypted on demand.</p>
 </div>
 <div class="sect3">
-<h4 id="_how_it_works_2"><a class="anchor" href="#_how_it_works_2"></a>59.4.1. How It Works</h4>
+<h4 id="_how_it_works_2"><a class="anchor" href="#_how_it_works_2"></a>60.4.1. How It Works</h4>
 <div class="paragraph">
 <p>The administrator provisions a master key for the cluster, which is stored in a key provider accessible to every trusted HBase process, including the HMaster, RegionServers, and clients (such as HBase Shell) on administrative workstations.
 The default key provider is integrated with the Java KeyStore API and any key management systems with support for it.
@@ -11927,7 +12006,7 @@ When WAL encryption is enabled, all WALs are encrypted, regardless of whether th
 </div>
 </div>
 <div class="sect3">
-<h4 id="_server_side_configuration_3"><a class="anchor" href="#_server_side_configuration_3"></a>59.4.2. Server-Side Configuration</h4>
+<h4 id="_server_side_configuration_3"><a class="anchor" href="#_server_side_configuration_3"></a>60.4.2. Server-Side Configuration</h4>
 <div class="paragraph">
 <p>This procedure assumes you are using the default Java keystore implementation.
 If you are using a custom implementation, check its documentation and adjust accordingly.</p>
@@ -12082,7 +12161,7 @@ You can include these in the HMaster&#8217;s <em>hbase-site.xml</em> as well, bu
 </div>
 </div>
 <div class="sect3">
-<h4 id="_administration_3"><a class="anchor" href="#_administration_3"></a>59.4.3. Administration</h4>
+<h4 id="_administration_3"><a class="anchor" href="#_administration_3"></a>60.4.3. Administration</h4>
 <div class="paragraph">
 <p>Administrative tasks can be performed in HBase Shell or the Java API.</p>
 </div>
@@ -12136,7 +12215,7 @@ Next, configure fallback to the old master key in the <em>hbase-site.xml</em> fi
 </div>
 </div>
 <div class="sect2">
-<h3 id="hbase.secure.bulkload"><a class="anchor" href="#hbase.secure.bulkload"></a>59.5. Secure Bulk Load</h3>
+<h3 id="hbase.secure.bulkload"><a class="anchor" href="#hbase.secure.bulkload"></a>60.5. Secure Bulk Load</h3>
 <div class="paragraph">
 <p>Bulk loading in secure mode is a bit more involved than normal setup, since the client has to transfer the ownership of the files generated from the MapReduce job to HBase.
 Secure bulk loading is implemented by a coprocessor, named
@@ -12193,7 +12272,7 @@ HBase manages creation and deletion of this directory.</p>
 </div>
 </div>
 <div class="sect1">
-<h2 id="security.example.config"><a class="anchor" href="#security.example.config"></a>60. Security Configuration Example</h2>
+<h2 id="security.example.config"><a class="anchor" href="#security.example.config"></a>61. Security Configuration Example</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>This configuration example includes support for HFile v3, ACLs, Visibility Labels, and transparent encryption of data at rest and the WAL.
@@ -12343,10 +12422,10 @@ All options have been discussed separately in the sections above.</p>
 </div>
 <h1 id="_architecture" class="sect0"><a class="anchor" href="#_architecture"></a>Architecture</h1>
 <div class="sect1">
-<h2 id="arch.overview"><a class="anchor" href="#arch.overview"></a>61. Overview</h2>
+<h2 id="arch.overview"><a class="anchor" href="#arch.overview"></a>62. Overview</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="arch.overview.nosql"><a class="anchor" href="#arch.overview.nosql"></a>61.1. NoSQL?</h3>
+<h3 id="arch.overview.nosql"><a class="anchor" href="#arch.overview.nosql"></a>62.1. NoSQL?</h3>
 <div class="paragraph">
 <p>HBase is a type of "NoSQL" database.
 "NoSQL" is a general term meaning that the database isn&#8217;t an RDBMS which supports SQL as its primary access language, but there are many types of NoSQL databases: BerkeleyDB is an example of a local NoSQL database, whereas HBase is very much a distributed database.
@@ -12394,7 +12473,7 @@ This makes it very suitable for tasks such as high-speed counter aggregation.</p
 </div>
 </div>
 <div class="sect

<TRUNCATED>

[29/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
index abb8a15..be615ae 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
@@ -2525,318 +2525,325 @@
 <span class="sourceLineNo">2517</span>        ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2517"></a>
 <span class="sourceLineNo">2518</span>      }<a name="line.2518"></a>
 <span class="sourceLineNo">2519</span>      assert scanner != null;<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>      RpcCallContext context = RpcServer.getCurrentCall();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>      Object lastBlock = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span><a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      quota = getQuotaManager().checkQuota(region, OperationQuota.OperationType.SCAN);<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      long maxQuotaResultSize = Math.min(maxScannerResultSize, quota.getReadAvailable());<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span><a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>      if (rows &gt; 0) {<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>        // if nextCallSeq does not match throw Exception straight away. This needs to be<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        // performed even before checking of Lease.<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>        // See HBASE-5974<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>        if (request.hasNextCallSeq()) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>          if (rsh != null) {<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>            if (request.getNextCallSeq() != rsh.getNextCallSeq()) {<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>              throw new OutOfOrderScannerNextException(<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>                "Expected nextCallSeq: " + rsh.getNextCallSeq()<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>                + " But the nextCallSeq got from client: " + request.getNextCallSeq() +<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>                "; request=" + TextFormat.shortDebugString(request));<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>            }<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>            // Increment the nextCallSeq value which is the next expected from client.<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>            rsh.incNextCallSeq();<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>          }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>        }<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        try {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>          // Remove lease while its being processed in server; protects against case<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>          // where processing of request takes &gt; lease expiration time.<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>          lease = regionServer.leases.removeLease(scannerName);<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>          List&lt;Result&gt; results = new ArrayList&lt;Result&gt;();<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span><a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>          boolean done = false;<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>          // Call coprocessor. Get region info from scanner.<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>            Boolean bypass = region.getCoprocessorHost().preScannerNext(<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>              scanner, results, rows);<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>            if (!results.isEmpty()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>              for (Result r : results) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>                lastBlock = addSize(context, r, lastBlock);<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>              }<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>            }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>            if (bypass != null &amp;&amp; bypass.booleanValue()) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>              done = true;<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>            }<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          }<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span><a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>          if (!done) {<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>            long maxResultSize = Math.min(scanner.getMaxResultSize(), maxQuotaResultSize);<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>            if (maxResultSize &lt;= 0) {<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>              maxResultSize = maxQuotaResultSize;<a name="line.2566"></a>
+<span class="sourceLineNo">2520</span>      if (request.hasRenew() &amp;&amp; request.getRenew()) {<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>        lease = regionServer.leases.removeLease(scannerName);<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>        if (lease != null &amp;&amp; scanners.containsKey(scannerName)) {<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>          regionServer.leases.addLease(lease);<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>        }<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>        return builder.build();<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>      }<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>      RpcCallContext context = RpcServer.getCurrentCall();<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>      Object lastBlock = null;<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span><a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>      quota = getQuotaManager().checkQuota(region, OperationQuota.OperationType.SCAN);<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>      long maxQuotaResultSize = Math.min(maxScannerResultSize, quota.getReadAvailable());<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span><a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>      if (rows &gt; 0) {<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>        // if nextCallSeq does not match throw Exception straight away. This needs to be<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>        // performed even before checking of Lease.<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>        // See HBASE-5974<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>        if (request.hasNextCallSeq()) {<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>          if (rsh != null) {<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>            if (request.getNextCallSeq() != rsh.getNextCallSeq()) {<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>              throw new OutOfOrderScannerNextException(<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>                "Expected nextCallSeq: " + rsh.getNextCallSeq()<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>                + " But the nextCallSeq got from client: " + request.getNextCallSeq() +<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>                "; request=" + TextFormat.shortDebugString(request));<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>            }<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>            // Increment the nextCallSeq value which is the next expected from client.<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>            rsh.incNextCallSeq();<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>          }<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>        }<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>        try {<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>          // Remove lease while its being processed in server; protects against case<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>          // where processing of request takes &gt; lease expiration time.<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>          lease = regionServer.leases.removeLease(scannerName);<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>          List&lt;Result&gt; results = new ArrayList&lt;Result&gt;();<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span><a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>          boolean done = false;<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>          // Call coprocessor. Get region info from scanner.<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span>            Boolean bypass = region.getCoprocessorHost().preScannerNext(<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>              scanner, results, rows);<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>            if (!results.isEmpty()) {<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>              for (Result r : results) {<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>                lastBlock = addSize(context, r, lastBlock);<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>              }<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>            }<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>            if (bypass != null &amp;&amp; bypass.booleanValue()) {<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span>              done = true;<a name="line.2566"></a>
 <span class="sourceLineNo">2567</span>            }<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>            // This is cells inside a row. Default size is 10 so if many versions or many cfs,<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>            // then we'll resize. Resizings show in profiler. Set it higher than 10. For now<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>            // arbitrary 32. TODO: keep record of general size of results being returned.<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>            List&lt;Cell&gt; values = new ArrayList&lt;Cell&gt;(32);<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>            region.startRegionOperation(Operation.SCAN);<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>            try {<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>              int i = 0;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>              synchronized(scanner) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>                boolean stale = (region.getRegionInfo().getReplicaId() != 0);<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>                boolean clientHandlesPartials =<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>                    request.hasClientHandlesPartials() &amp;&amp; request.getClientHandlesPartials();<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>                boolean clientHandlesHeartbeats =<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>                    request.hasClientHandlesHeartbeats() &amp;&amp; request.getClientHandlesHeartbeats();<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span><a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>                // On the server side we must ensure that the correct ordering of partial results is<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>                // returned to the client to allow them to properly reconstruct the partial results.<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>                // If the coprocessor host is adding to the result list, we cannot guarantee the<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>                // correct ordering of partial results and so we prevent partial results from being<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>                // formed.<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>                boolean serverGuaranteesOrderOfPartials = results.isEmpty();<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>                boolean allowPartialResults =<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>                    clientHandlesPartials &amp;&amp; serverGuaranteesOrderOfPartials &amp;&amp; !isSmallScan;<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>                boolean moreRows = false;<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span><a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>                // Heartbeat messages occur when the processing of the ScanRequest is exceeds a<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>                // certain time threshold on the server. When the time threshold is exceeded, the<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>                // server stops the scan and sends back whatever Results it has accumulated within<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>                // that time period (may be empty). Since heartbeat messages have the potential to<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>                // create partial Results (in the event that the timeout occurs in the middle of a<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>                // row), we must only generate heartbeat messages when the client can handle both<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>                // heartbeats AND partials<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>                boolean allowHeartbeatMessages = clientHandlesHeartbeats &amp;&amp; allowPartialResults;<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>                // Default value of timeLimit is negative to indicate no timeLimit should be<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>                // enforced.<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>                long timeLimit = -1;<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span><a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>                // Set the time limit to be half of the more restrictive timeout value (one of the<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>                // timeout values must be positive). In the event that both values are positive, the<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>                // more restrictive of the two is used to calculate the limit.<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>                if (allowHeartbeatMessages &amp;&amp; (scannerLeaseTimeoutPeriod &gt; 0 || rpcTimeout &gt; 0)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>                  long timeLimitDelta;<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>                  if (scannerLeaseTimeoutPeriod &gt; 0 &amp;&amp; rpcTimeout &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>                    timeLimitDelta = Math.min(scannerLeaseTimeoutPeriod, rpcTimeout);<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>                  } else {<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>                    timeLimitDelta =<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>                        scannerLeaseTimeoutPeriod &gt; 0 ? scannerLeaseTimeoutPeriod : rpcTimeout;<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>                  }<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>                  // Use half of whichever timeout value was more restrictive... But don't allow<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>                  // the time limit to be less than the allowable minimum (could cause an<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>                  // immediatate timeout before scanning any data).<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>                  timeLimitDelta = Math.max(timeLimitDelta / 2, minimumScanTimeLimitDelta);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>                  timeLimit = System.currentTimeMillis() + timeLimitDelta;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>                }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span><a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>                final LimitScope sizeScope =<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>                    allowPartialResults ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>                final LimitScope timeScope =<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>                    allowHeartbeatMessages ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span><a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>                boolean trackMetrics =<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>                    request.hasTrackScanMetrics() &amp;&amp; request.getTrackScanMetrics();<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span><a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>                // Configure with limits for this RPC. Set keep progress true since size progress<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>                // towards size limit should be kept between calls to nextRaw<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>                ScannerContext.Builder contextBuilder = ScannerContext.newBuilder(true);<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>                contextBuilder.setSizeLimit(sizeScope, maxResultSize);<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>                contextBuilder.setBatchLimit(scanner.getBatch());<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>                contextBuilder.setTimeLimit(timeScope, timeLimit);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>                contextBuilder.setTrackMetrics(trackMetrics);<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>                ScannerContext scannerContext = contextBuilder.build();<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>                boolean limitReached = false;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>                while (i &lt; rows) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>                  // Reset the batch progress to 0 before every call to RegionScanner#nextRaw. The<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>                  // batch limit is a limit on the number of cells per Result. Thus, if progress is<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>                  // being tracked (i.e. scannerContext.keepProgress() is true) then we need to<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>                  // reset the batch progress between nextRaw invocations since we don't want the<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>                  // batch progress from previous calls to affect future calls<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>                  scannerContext.setBatchProgress(0);<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>                  // Collect values to be returned here<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>                  moreRows = scanner.nextRaw(values, scannerContext);<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>                  if (!values.isEmpty()) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>                    final boolean partial = scannerContext.partialResultFormed();<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>                    Result r = Result.create(values, null, stale, partial);<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>                    lastBlock = addSize(context, r, lastBlock);<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>                    results.add(r);<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>                    i++;<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>                  }<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span><a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>                  boolean sizeLimitReached = scannerContext.checkSizeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>                  boolean timeLimitReached = scannerContext.checkTimeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>                  boolean rowLimitReached = i &gt;= rows;<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>                  limitReached = sizeLimitReached || timeLimitReached || rowLimitReached;<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span><a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>                  if (limitReached || !moreRows) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>                    if (LOG.isTraceEnabled()) {<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>                      LOG.trace("Done scanning. limitReached: " + limitReached + " moreRows: "<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>                          + moreRows + " scannerContext: " + scannerContext);<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>                    }<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>                    // We only want to mark a ScanResponse as a heartbeat message in the event that<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>                    // there are more values to be read server side. If there aren't more values,<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>                    // marking it as a heartbeat is wasteful because the client will need to issue<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>                    // another ScanRequest only to realize that they already have all the values<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>                    if (moreRows) {<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>                      // Heartbeat messages occur when the time limit has been reached.<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>                      builder.setHeartbeatMessage(timeLimitReached);<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>                    }<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>                    break;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>                  }<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>                  values.clear();<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>                }<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span><a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>                if (limitReached || moreRows) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>                  // We stopped prematurely<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>                  builder.setMoreResultsInRegion(true);<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>                } else {<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>                  // We didn't get a single batch<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>                  builder.setMoreResultsInRegion(false);<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>                }<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span><a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>                // Check to see if the client requested that we track metrics server side. If the<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>                // client requested metrics, retrieve the metrics from the scanner context.<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>                if (trackMetrics) {<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>                  Map&lt;String, Long&gt; metrics = scannerContext.getMetrics().getMetricsMap();<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>                  ScanMetrics.Builder metricBuilder = ScanMetrics.newBuilder();<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>                  NameInt64Pair.Builder pairBuilder = NameInt64Pair.newBuilder();<a name="line.2695"></a>
+<span class="sourceLineNo">2568</span>          }<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span><a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>          if (!done) {<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>            long maxResultSize = Math.min(scanner.getMaxResultSize(), maxQuotaResultSize);<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>            if (maxResultSize &lt;= 0) {<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>              maxResultSize = maxQuotaResultSize;<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span>            }<a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>            // This is cells inside a row. Default size is 10 so if many versions or many cfs,<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>            // then we'll resize. Resizings show in profiler. Set it higher than 10. For now<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>            // arbitrary 32. TODO: keep record of general size of results being returned.<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>            List&lt;Cell&gt; values = new ArrayList&lt;Cell&gt;(32);<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span>            region.startRegionOperation(Operation.SCAN);<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>            try {<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>              int i = 0;<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>              synchronized(scanner) {<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>                boolean stale = (region.getRegionInfo().getReplicaId() != 0);<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>                boolean clientHandlesPartials =<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>                    request.hasClientHandlesPartials() &amp;&amp; request.getClientHandlesPartials();<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>                boolean clientHandlesHeartbeats =<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>                    request.hasClientHandlesHeartbeats() &amp;&amp; request.getClientHandlesHeartbeats();<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span><a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>                // On the server side we must ensure that the correct ordering of partial results is<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>                // returned to the client to allow them to properly reconstruct the partial results.<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>                // If the coprocessor host is adding to the result list, we cannot guarantee the<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>                // correct ordering of partial results and so we prevent partial results from being<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>                // formed.<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>                boolean serverGuaranteesOrderOfPartials = results.isEmpty();<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>                boolean allowPartialResults =<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>                    clientHandlesPartials &amp;&amp; serverGuaranteesOrderOfPartials &amp;&amp; !isSmallScan;<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>                boolean moreRows = false;<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span><a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>                // Heartbeat messages occur when the processing of the ScanRequest is exceeds a<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>                // certain time threshold on the server. When the time threshold is exceeded, the<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>                // server stops the scan and sends back whatever Results it has accumulated within<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>                // that time period (may be empty). Since heartbeat messages have the potential to<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>                // create partial Results (in the event that the timeout occurs in the middle of a<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>                // row), we must only generate heartbeat messages when the client can handle both<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>                // heartbeats AND partials<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>                boolean allowHeartbeatMessages = clientHandlesHeartbeats &amp;&amp; allowPartialResults;<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span><a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>                // Default value of timeLimit is negative to indicate no timeLimit should be<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>                // enforced.<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span>                long timeLimit = -1;<a name="line.2610"></a>
+<span class="sourceLineNo">2611</span><a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>                // Set the time limit to be half of the more restrictive timeout value (one of the<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>                // timeout values must be positive). In the event that both values are positive, the<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>                // more restrictive of the two is used to calculate the limit.<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>                if (allowHeartbeatMessages &amp;&amp; (scannerLeaseTimeoutPeriod &gt; 0 || rpcTimeout &gt; 0)) {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>                  long timeLimitDelta;<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>                  if (scannerLeaseTimeoutPeriod &gt; 0 &amp;&amp; rpcTimeout &gt; 0) {<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>                    timeLimitDelta = Math.min(scannerLeaseTimeoutPeriod, rpcTimeout);<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>                  } else {<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>                    timeLimitDelta =<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>                        scannerLeaseTimeoutPeriod &gt; 0 ? scannerLeaseTimeoutPeriod : rpcTimeout;<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>                  }<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>                  // Use half of whichever timeout value was more restrictive... But don't allow<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>                  // the time limit to be less than the allowable minimum (could cause an<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>                  // immediatate timeout before scanning any data).<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>                  timeLimitDelta = Math.max(timeLimitDelta / 2, minimumScanTimeLimitDelta);<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>                  timeLimit = System.currentTimeMillis() + timeLimitDelta;<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>                }<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span><a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>                final LimitScope sizeScope =<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>                    allowPartialResults ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>                final LimitScope timeScope =<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span>                    allowHeartbeatMessages ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2633"></a>
+<span class="sourceLineNo">2634</span><a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>                boolean trackMetrics =<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>                    request.hasTrackScanMetrics() &amp;&amp; request.getTrackScanMetrics();<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span><a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>                // Configure with limits for this RPC. Set keep progress true since size progress<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>                // towards size limit should be kept between calls to nextRaw<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>                ScannerContext.Builder contextBuilder = ScannerContext.newBuilder(true);<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>                contextBuilder.setSizeLimit(sizeScope, maxResultSize);<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>                contextBuilder.setBatchLimit(scanner.getBatch());<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span>                contextBuilder.setTimeLimit(timeScope, timeLimit);<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>                contextBuilder.setTrackMetrics(trackMetrics);<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>                ScannerContext scannerContext = contextBuilder.build();<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>                boolean limitReached = false;<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>                while (i &lt; rows) {<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>                  // Reset the batch progress to 0 before every call to RegionScanner#nextRaw. The<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>                  // batch limit is a limit on the number of cells per Result. Thus, if progress is<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>                  // being tracked (i.e. scannerContext.keepProgress() is true) then we need to<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>                  // reset the batch progress between nextRaw invocations since we don't want the<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>                  // batch progress from previous calls to affect future calls<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>                  scannerContext.setBatchProgress(0);<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span><a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>                  // Collect values to be returned here<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>                  moreRows = scanner.nextRaw(values, scannerContext);<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span><a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>                  if (!values.isEmpty()) {<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>                    final boolean partial = scannerContext.partialResultFormed();<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>                    Result r = Result.create(values, null, stale, partial);<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>                    lastBlock = addSize(context, r, lastBlock);<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>                    results.add(r);<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>                    i++;<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>                  }<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span><a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>                  boolean sizeLimitReached = scannerContext.checkSizeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>                  boolean timeLimitReached = scannerContext.checkTimeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>                  boolean rowLimitReached = i &gt;= rows;<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>                  limitReached = sizeLimitReached || timeLimitReached || rowLimitReached;<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span><a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>                  if (limitReached || !moreRows) {<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>                    if (LOG.isTraceEnabled()) {<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span>                      LOG.trace("Done scanning. limitReached: " + limitReached + " moreRows: "<a name="line.2673"></a>
+<span class="sourceLineNo">2674</span>                          + moreRows + " scannerContext: " + scannerContext);<a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>                    }<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>                    // We only want to mark a ScanResponse as a heartbeat message in the event that<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>                    // there are more values to be read server side. If there aren't more values,<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>                    // marking it as a heartbeat is wasteful because the client will need to issue<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>                    // another ScanRequest only to realize that they already have all the values<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>                    if (moreRows) {<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>                      // Heartbeat messages occur when the time limit has been reached.<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>                      builder.setHeartbeatMessage(timeLimitReached);<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>                    }<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>                    break;<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>                  }<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>                  values.clear();<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>                }<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span><a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>                if (limitReached || moreRows) {<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>                  // We stopped prematurely<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>                  builder.setMoreResultsInRegion(true);<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>                } else {<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>                  // We didn't get a single batch<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>                  builder.setMoreResultsInRegion(false);<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>                }<a name="line.2695"></a>
 <span class="sourceLineNo">2696</span><a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>                  for (Entry&lt;String, Long&gt; entry : metrics.entrySet()) {<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>                    pairBuilder.setName(entry.getKey());<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>                    pairBuilder.setValue(entry.getValue());<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>                    metricBuilder.addMetrics(pairBuilder.build());<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>                  }<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span><a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>                  builder.setScanMetrics(metricBuilder.build());<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>                }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>              }<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>              region.updateReadRequestsCount(i);<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>              long responseCellSize = context != null ? context.getResponseCellSize() : 0;<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>              region.getMetrics().updateScanNext(responseCellSize);<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>              if (regionServer.metricsRegionServer != null) {<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>                regionServer.metricsRegionServer.updateScannerNext(responseCellSize);<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>              }<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>            } finally {<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>              region.closeRegionOperation();<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>            }<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>            // coprocessor postNext hook<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>              region.getCoprocessorHost().postScannerNext(scanner, results, rows, true);<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>            }<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>          }<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span><a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>          quota.addScanResult(results);<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>          // If the scanner's filter - if any - is done with the scan<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>          // and wants to tell the client to stop the scan. This is done by passing<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>          // a null result, and setting moreResults to false.<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>          if (scanner.isFilterDone() &amp;&amp; results.isEmpty()) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>            moreResults = false;<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>            results = null;<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>          } else {<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>            addResults(builder, results, controller,<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>                RegionReplicaUtil.isDefaultReplica(region.getRegionInfo()),<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>                isClientCellBlockSupport(context));<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>          }<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        } catch (IOException e) {<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>          // if we have an exception on scanner next and we are using the callSeq<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          // we should rollback because the client will retry with the same callSeq<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>          // and get an OutOfOrderScannerNextException if we don't do so.<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>          if (rsh != null &amp;&amp; request.hasNextCallSeq()) {<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>            rsh.rollbackNextCallSeq();<a name="line.2739"></a>
+<span class="sourceLineNo">2697</span>                // Check to see if the client requested that we track metrics server side. If the<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>                // client requested metrics, retrieve the metrics from the scanner context.<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>                if (trackMetrics) {<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>                  Map&lt;String, Long&gt; metrics = scannerContext.getMetrics().getMetricsMap();<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>                  ScanMetrics.Builder metricBuilder = ScanMetrics.newBuilder();<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>                  NameInt64Pair.Builder pairBuilder = NameInt64Pair.newBuilder();<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span><a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>                  for (Entry&lt;String, Long&gt; entry : metrics.entrySet()) {<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>                    pairBuilder.setName(entry.getKey());<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>                    pairBuilder.setValue(entry.getValue());<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>                    metricBuilder.addMetrics(pairBuilder.build());<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>                  }<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span><a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>                  builder.setScanMetrics(metricBuilder.build());<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>                }<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>              }<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>              region.updateReadRequestsCount(i);<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>              long responseCellSize = context != null ? context.getResponseCellSize() : 0;<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>              region.getMetrics().updateScanNext(responseCellSize);<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>              if (regionServer.metricsRegionServer != null) {<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>                regionServer.metricsRegionServer.updateScannerNext(responseCellSize);<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>              }<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>            } finally {<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>              region.closeRegionOperation();<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>            }<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>            // coprocessor postNext hook<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>              region.getCoprocessorHost().postScannerNext(scanner, results, rows, true);<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>            }<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>          }<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span><a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>          quota.addScanResult(results);<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span><a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>          // If the scanner's filter - if any - is done with the scan<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>          // and wants to tell the client to stop the scan. This is done by passing<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>          // a null result, and setting moreResults to false.<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>          if (scanner.isFilterDone() &amp;&amp; results.isEmpty()) {<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>            moreResults = false;<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>            results = null;<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>          } else {<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>            addResults(builder, results, controller,<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>                RegionReplicaUtil.isDefaultReplica(region.getRegionInfo()),<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>                isClientCellBlockSupport(context));<a name="line.2739"></a>
 <span class="sourceLineNo">2740</span>          }<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>          throw e;<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>        } finally {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>          if (context != null) {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>            context.setCallBack(rsh.shippedCallback);<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>          }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>          // Adding resets expiration time on lease.<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>          if (scanners.containsKey(scannerName)) {<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>            ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>            // When context != null, adding back the lease will be done in callback set above.<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>            if (context == null) {<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>              if (lease != null) regionServer.leases.addLease(lease);<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>            }<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>          }<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>        }<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>      }<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span><a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>      if (!moreResults || closeScanner) {<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        ttl = 0;<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        moreResults = false;<a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>        if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>          if (region.getCoprocessorHost().preScannerClose(scanner)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>            return builder.build(); // bypass<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>          }<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>        }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>        rsh = scanners.remove(scannerName);<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>        if (rsh != null) {<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>          if (context != null) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>            context.setCallBack(rsh.closeCallBack);<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>          } else {<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>            rsh.s.close();<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>          }<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>          try {<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>          } catch (LeaseException le) {<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>            // No problem, ignore<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>            if (LOG.isTraceEnabled()) {<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>              LOG.trace("Un-able to cancel lease of scanner. It could already be closed.");<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>            }<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>          }<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>            region.getCoprocessorHost().postScannerClose(scanner);<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>          }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>        }<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      }<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span><a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>      if (ttl &gt; 0) {<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        builder.setTtl(ttl);<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>      builder.setScannerId(scannerId);<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      builder.setMoreResults(moreResults);<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      return builder.build();<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>    } catch (IOException ie) {<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>      if (scannerName != null &amp;&amp; ie instanceof NotServingRegionException) {<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        RegionScannerHolder rsh = scanners.remove(scannerName);<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>        if (rsh != null) {<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>          try {<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>            RegionScanner scanner = rsh.s;<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>            LOG.warn(scannerName + " encountered " + ie.getMessage() + ", closing ...");<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>            scanner.close();<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>          } catch (IOException e) {<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>           LOG.warn("Getting exception closing " + scannerName, e);<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>          }<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        }<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>      }<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>      throw new ServiceException(ie);<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>    } finally {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>      if (quota != null) {<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        quota.close();<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>      }<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>    }<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>  }<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span><a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>  @Override<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>  public CoprocessorServiceResponse execRegionServerService(RpcController controller,<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      CoprocessorServiceRequest request) throws ServiceException {<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>    return regionServer.execRegionServerService(controller, request);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>  }<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span><a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>  @Override<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>  public UpdateConfigurationResponse updateConfiguration(<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>      RpcController controller, UpdateConfigurationRequest request)<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>      throws ServiceException {<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>    try {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>      this.regionServer.updateConfiguration();<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    } catch (Exception e) {<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>      throw new ServiceException(e);<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    }<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>    return UpdateConfigurationResponse.getDefaultInstance();<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>  }<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>}<a name="line.2831"></a>
+<span class="sourceLineNo">2741</span>        } catch (IOException e) {<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>          // if we have an exception on scanner next and we are using the callSeq<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>          // we should rollback because the client will retry with the same callSeq<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>          // and get an OutOfOrderScannerNextException if we don't do so.<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>          if (rsh != null &amp;&amp; request.hasNextCallSeq()) {<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>            rsh.rollbackNextCallSeq();<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>          }<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>          throw e;<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>        } finally {<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>          if (context != null) {<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>            context.setCallBack(rsh.shippedCallback);<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>          }<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>          // Adding resets expiration time on lease.<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>          if (scanners.containsKey(scannerName)) {<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>            ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>            // When context != null, adding back the lease will be done in callback set above.<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>            if (context == null) {<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>              if (lease != null) regionServer.leases.addLease(lease);<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>            }<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>          }<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>        }<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>      }<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span><a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>      if (!moreResults || closeScanner) {<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>        ttl = 0;<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>        moreResults = false;<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>        if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>          if (region.getCoprocessorHost().preScannerClose(scanner)) {<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>            return builder.build(); // bypass<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>          }<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>        }<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>        rsh = scanners.remove(scannerName);<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>        if (rsh != null) {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>          if (context != null) {<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>            context.setCallBack(rsh.closeCallBack);<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>          } else {<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>            rsh.s.close();<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>          }<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>          try {<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>          } catch (LeaseException le) {<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>            // No problem, ignore<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>            if (LOG.isTraceEnabled()) {<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>              LOG.trace("Un-able to cancel lease of scanner. It could already be closed.");<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>            }<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>          }<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>            region.getCoprocessorHost().postScannerClose(scanner);<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>          }<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>        }<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>      }<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span><a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>      if (ttl &gt; 0) {<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>        builder.setTtl(ttl);<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>      builder.setScannerId(scannerId);<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>      builder.setMoreResults(moreResults);<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>      return builder.build();<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>    } catch (IOException ie) {<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>      if (scannerName != null &amp;&amp; ie instanceof NotServingRegionException) {<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>        RegionScannerHolder rsh = scanners.remove(scannerName);<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>        if (rsh != null) {<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>          try {<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>            RegionScanner scanner = rsh.s;<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>            LOG.warn(scannerName + " encountered " + ie.getMessage() + ", closing ...");<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>            scanner.close();<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>          } catch (IOException e) {<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>           LOG.warn("Getting exception closing " + scannerName, e);<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>          }<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>        }<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>      }<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>      throw new ServiceException(ie);<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>    } finally {<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>      if (quota != null) {<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>        quota.close();<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>      }<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>    }<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>  }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span><a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>  @Override<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>  public CoprocessorServiceResponse execRegionServerService(RpcController controller,<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>      CoprocessorServiceRequest request) throws ServiceException {<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>    return regionServer.execRegionServerService(controller, request);<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>  }<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span><a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>  @Override<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>  public UpdateConfigurationResponse updateConfiguration(<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>      RpcController controller, UpdateConfigurationRequest request)<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>      throws ServiceException {<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>    try {<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>      this.regionServer.updateConfiguration();<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>    } catch (Exception e) {<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>      throw new ServiceException(e);<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>    }<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>    return UpdateConfigurationResponse.getDefaultInstance();<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>  }<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>}<a name="line.2838"></a>
 
 
 


[48/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 2f064ad..e79c88c 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -280,7 +280,7 @@
 <th><img src="images/icon_warning_sml.gif" alt="" />&#160;Warnings</th>
 <th><img src="images/icon_error_sml.gif" alt="" />&#160;Errors</th></tr>
 <tr class="b">
-<td>1655</td>
+<td>1654</td>
 <td>0</td>
 <td>0</td>
 <td>13075</td></tr></table></div>
@@ -4361,7 +4361,7 @@
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSinkManager.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>1</td></tr>
+<td>2</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSource.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java</a></td>
 <td>0</td>
@@ -5308,716 +5308,711 @@
 <td>0</td>
 <td>3</td></tr>
 <tr class="a">
-<td><a href="#org.apache.hadoop.hbase.util.BoundedConcurrentLinkedQueue.java">org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>1</td></tr>
-<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.BoundedPriorityBlockingQueue.java">org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ByteBufferArray.java">org/apache/hadoop/hbase/util/ByteBufferArray.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ByteBufferUtils.java">org/apache/hadoop/hbase/util/ByteBufferUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>50</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ByteRangeUtils.java">org/apache/hadoop/hbase/util/ByteRangeUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ByteStringer.java">org/apache/hadoop/hbase/util/ByteStringer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Bytes.java">org/apache/hadoop/hbase/util/Bytes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>100</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ChecksumFactory.java">org/apache/hadoop/hbase/util/ChecksumFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ChecksumType.java">org/apache/hadoop/hbase/util/ChecksumType.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ClassLoaderBase.java">org/apache/hadoop/hbase/util/ClassLoaderBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ClassSize.java">org/apache/hadoop/hbase/util/ClassSize.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.Classes.java">org/apache/hadoop/hbase/util/Classes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.CollectionBackedScanner.java">org/apache/hadoop/hbase/util/CollectionBackedScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.CollectionUtils.java">org/apache/hadoop/hbase/util/CollectionUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.CompressionTest.java">org/apache/hadoop/hbase/util/CompressionTest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ConcatenatedLists.java">org/apache/hadoop/hbase/util/ConcatenatedLists.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ConcurrentIndex.java">org/apache/hadoop/hbase/util/ConcurrentIndex.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ConfigurationUtil.java">org/apache/hadoop/hbase/util/ConfigurationUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ConnectionCache.java">org/apache/hadoop/hbase/util/ConnectionCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.CoprocessorClassLoader.java">org/apache/hadoop/hbase/util/CoprocessorClassLoader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Counter.java">org/apache/hadoop/hbase/util/Counter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.DirectMemoryUtils.java">org/apache/hadoop/hbase/util/DirectMemoryUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.DrainBarrier.java">org/apache/hadoop/hbase/util/DrainBarrier.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.DynamicClassLoader.java">org/apache/hadoop/hbase/util/DynamicClassLoader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.EncryptionTest.java">org/apache/hadoop/hbase/util/EncryptionTest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.EnvironmentEdgeManager.java">org/apache/hadoop/hbase/util/EnvironmentEdgeManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ExceptionUtil.java">org/apache/hadoop/hbase/util/ExceptionUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.FSHDFSUtils.java">org/apache/hadoop/hbase/util/FSHDFSUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.FSMapRUtils.java">org/apache/hadoop/hbase/util/FSMapRUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.FSRegionScanner.java">org/apache/hadoop/hbase/util/FSRegionScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.FSTableDescriptors.java">org/apache/hadoop/hbase/util/FSTableDescriptors.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.FSUtils.java">org/apache/hadoop/hbase/util/FSUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>80</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.FSVisitor.java">org/apache/hadoop/hbase/util/FSVisitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.FastLongHistogram.java">org/apache/hadoop/hbase/util/FastLongHistogram.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ForeignExceptionUtil.java">org/apache/hadoop/hbase/util/ForeignExceptionUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.GetJavaProperty.java">org/apache/hadoop/hbase/util/GetJavaProperty.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.HBaseConfTool.java">org/apache/hadoop/hbase/util/HBaseConfTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.HBaseFsck.java">org/apache/hadoop/hbase/util/HBaseFsck.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>90</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.HBaseFsckRepair.java">org/apache/hadoop/hbase/util/HBaseFsckRepair.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.HFileArchiveUtil.java">org/apache/hadoop/hbase/util/HFileArchiveUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.HMerge.java">org/apache/hadoop/hbase/util/HMerge.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.Hash.java">org/apache/hadoop/hbase/util/Hash.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.HashedBytes.java">org/apache/hadoop/hbase/util/HashedBytes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.HttpServerUtil.java">org/apache/hadoop/hbase/util/HttpServerUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.IdLock.java">org/apache/hadoop/hbase/util/IdLock.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.IdReadWriteLock.java">org/apache/hadoop/hbase/util/IdReadWriteLock.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.IterableUtils.java">org/apache/hadoop/hbase/util/IterableUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.JSONBean.java">org/apache/hadoop/hbase/util/JSONBean.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.JVM.java">org/apache/hadoop/hbase/util/JVM.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.JVMClusterUtil.java">org/apache/hadoop/hbase/util/JVMClusterUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.JenkinsHash.java">org/apache/hadoop/hbase/util/JenkinsHash.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>40</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.JvmPauseMonitor.java">org/apache/hadoop/hbase/util/JvmPauseMonitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.KeyLocker.java">org/apache/hadoop/hbase/util/KeyLocker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MD5Hash.java">org/apache/hadoop/hbase/util/MD5Hash.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ManualEnvironmentEdge.java">org/apache/hadoop/hbase/util/ManualEnvironmentEdge.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MapreduceDependencyClasspathTool.java">org/apache/hadoop/hbase/util/MapreduceDependencyClasspathTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Merge.java">org/apache/hadoop/hbase/util/Merge.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MetaUtils.java">org/apache/hadoop/hbase/util/MetaUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Methods.java">org/apache/hadoop/hbase/util/Methods.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ModifyRegionUtils.java">org/apache/hadoop/hbase/util/ModifyRegionUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.MultiHConnection.java">org/apache/hadoop/hbase/util/MultiHConnection.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.MunkresAssignment.java">org/apache/hadoop/hbase/util/MunkresAssignment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.MurmurHash3.java">org/apache/hadoop/hbase/util/MurmurHash3.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.Order.java">org/apache/hadoop/hbase/util/Order.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.OrderedBytes.java">org/apache/hadoop/hbase/util/OrderedBytes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>46</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.Pair.java">org/apache/hadoop/hbase/util/Pair.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.PairOfSameType.java">org/apache/hadoop/hbase/util/PairOfSameType.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.PoolMap.java">org/apache/hadoop/hbase/util/PoolMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.PositionedByteRange.java">org/apache/hadoop/hbase/util/PositionedByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.PrettyPrinter.java">org/apache/hadoop/hbase/util/PrettyPrinter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ProtoUtil.java">org/apache/hadoop/hbase/util/ProtoUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ReflectionUtils.java">org/apache/hadoop/hbase/util/ReflectionUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.RegionMover.java">org/apache/hadoop/hbase/util/RegionMover.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>36</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.RegionSplitCalculator.java">org/apache/hadoop/hbase/util/RegionSplitCalculator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.RegionSplitter.java">org/apache/hadoop/hbase/util/RegionSplitter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.RetryCounter.java">org/apache/hadoop/hbase/util/RetryCounter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.RollingStatCalculator.java">org/apache/hadoop/hbase/util/RollingStatCalculator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ServerCommandLine.java">org/apache/hadoop/hbase/util/ServerCommandLine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.ServerRegionReplicaUtil.java">org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ShutdownHookManager.java">org/apache/hadoop/hbase/util/ShutdownHookManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.SimpleByteRange.java">org/apache/hadoop/hbase/util/SimpleByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.SimpleMutableByteRange.java">org/apache/hadoop/hbase/util/SimpleMutableByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.SimplePositionedByteRange.java">org/apache/hadoop/hbase/util/SimplePositionedByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.SimplePositionedMutableByteRange.java">org/apache/hadoop/hbase/util/SimplePositionedMutableByteRange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Sleeper.java">org/apache/hadoop/hbase/util/Sleeper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.SortedCopyOnWriteSet.java">org/apache/hadoop/hbase/util/SortedCopyOnWriteSet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.StealJobQueue.java">org/apache/hadoop/hbase/util/StealJobQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.Strings.java">org/apache/hadoop/hbase/util/Strings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Threads.java">org/apache/hadoop/hbase/util/Threads.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.Triple.java">org/apache/hadoop/hbase/util/Triple.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.UnsafeAccess.java">org/apache/hadoop/hbase/util/UnsafeAccess.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>35</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.VersionInfo.java">org/apache/hadoop/hbase/util/VersionInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.Writables.java">org/apache/hadoop/hbase/util/Writables.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.ZKDataMigrator.java">org/apache/hadoop/hbase/util/ZKDataMigrator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.byterange.ByteRangeSet.java">org/apache/hadoop/hbase/util/byterange/ByteRangeSet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker.java">org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair.java">org/apache/hadoop/hbase/util/hbck/OfflineMetaRepair.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler.java">org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.hbck.TableLockChecker.java">org/apache/hadoop/hbase/util/hbck/TableLockChecker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.test.RedundantKVGenerator.java">org/apache/hadoop/hbase/util/test/RedundantKVGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.vint.UFIntTool.java">org/apache/hadoop/hbase/util/vint/UFIntTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.vint.UVIntTool.java">org/apache/hadoop/hbase/util/vint/UVIntTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.util.vint.UVLongTool.java">org/apache/hadoop/hbase/util/vint/UVLongTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.DefaultWALProvider.java">org/apache/hadoop/hbase/wal/DefaultWALProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.DisabledWALProvider.java">org/apache/hadoop/hbase/wal/DisabledWALProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.RegionGroupingProvider.java">org/apache/hadoop/hbase/wal/RegionGroupingProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.WAL.java">org/apache/hadoop/hbase/wal/WAL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.WALFactory.java">org/apache/hadoop/hbase/wal/WALFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.WALKey.java">org/apache/hadoop/hbase/wal/WALKey.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.WALPrettyPrinter.java">org/apache/hadoop/hbase/wal/WALPrettyPrinter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.WALProvider.java">org/apache/hadoop/hbase/wal/WALProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.wal.WALSplitter.java">org/apache/hadoop/hbase/wal/WALSplitter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>70</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ClusterStatusTracker.java">org/apache/hadoop/hbase/zookeeper/ClusterStatusTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.DrainingServerTracker.java">org/apache/hadoop/hbase/zookeeper/DrainingServerTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.EmptyWatcher.java">org/apache/hadoop/hbase/zookeeper/EmptyWatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.HQuorumPeer.java">org/apache/hadoop/hbase/zookeeper/HQuorumPeer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker.java">org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.MasterAddressTracker.java">org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.MetaTableLocator.java">org/apache/hadoop/hbase/zookeeper/MetaTableLocator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>61</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.MiniZooKeeperCluster.java">org/apache/hadoop/hbase/zookeeper/MiniZooKeeperCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.java">org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker.java">org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.RegionServerTracker.java">org/apache/hadoop/hbase/zookeeper/RegionServerTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZKClusterId.java">org/apache/hadoop/hbase/zookeeper/ZKClusterId.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZKConfig.java">org/apache/hadoop/hbase/zookeeper/ZKConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZKServerTool.java">org/apache/hadoop/hbase/zookeeper/ZKServerTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZKSplitLog.java">org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZKUtil.java">org/apache/hadoop/hbase/zookeeper/ZKUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>56</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZooKeeperMainServer.java">org/apache/hadoop/hbase/zookeeper/ZooKeeperMainServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZooKeeperNodeTracker.java">org/apache/hadoop/hbase/zookeeper/ZooKeeperNodeTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.java">org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>41</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.lock.ZKInterProcessLockBase.java">org/apache/hadoop/hbase/zookeeper/lock/ZKInterProcessLockBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.lock.ZKInterProcessReadWriteLock.java">org/apache/hadoop/hbase/zookeeper/lock/ZKInterProcessReadWriteLock.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.metrics2.MetricHistogram.java">org/apache/hadoop/metrics2/MetricHistogram.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.metrics2.impl.JmxCacheBuster.java">org/apache/hadoop/metrics2/impl/JmxCacheBuster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.metrics2.lib.DefaultMetricsSystemHelper.java">org/apache/hadoop/metrics2/lib/DefaultMetricsSystemHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry.java">org/apache/hadoop/metrics2/lib/DynamicMetricsRegistry.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.metrics2.lib.MetricMutableQuantiles.java">org/apache/hadoop/metrics2/lib/MetricMutableQuantiles.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.metrics2.lib.MutableHistogram.java">org/apache/hadoop/metrics2/lib/MutableHistogram.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.metrics2.lib.MutableRangeHistogram.java">org/apache/hadoop/metrics2/lib/MutableRangeHistogram.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.metrics2.lib.MutableTimeHistogram.java">org/apache/hadoop/metrics2/lib/MutableTimeHistogram.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.metrics2.util.MetricQuantile.java">org/apache/hadoop/metrics2/util/MetricQuantile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.metrics2.util.MetricSampleQuantiles.java">org/apache/hadoop/metrics2/util/MetricSampleQuantiles.java</a></td>
 <td>0</td>
 <td>0</td>
@@ -6025,72 +6020,72 @@
 <div class="section">
 <h2><a name="Rules"></a>Rules</h2>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Category</th>
 <th>Rule</th>
 <th>Violations</th>
 <th>Severity</th></tr>
-<tr class="a">
+<tr class="b">
 <td>annotation</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_annotation.html#MissingDeprecated">MissingDeprecated</a></td>
 <td>76</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>blocks</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_blocks.html#EmptyBlock">EmptyBlock</a></td>
 <td>19</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_blocks.html#LeftCurly">LeftCurly</a></td>
 <td>224</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_blocks.html#NeedBraces">NeedBraces</a></td>
 <td>1769</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td>coding</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_coding.html#EmptyStatement">EmptyStatement</a></td>
 <td>8</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_coding.html#EqualsHashCode">EqualsHashCode</a></td>
 <td>7</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_coding.html#InnerAssignment">InnerAssignment</a></td>
-<td>53</td>
+<td>52</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_coding.html#MissingSwitchDefault">MissingSwitchDefault</a></td>
 <td>28</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_coding.html#NoFinalizer">NoFinalizer</a></td>
 <td>1</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>design</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_design.html#FinalClass">FinalClass</a></td>
 <td>46</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_design.html#HideUtilityClassConstructor">HideUtilityClassConstructor</a></td>
 <td>88</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_design.html#InterfaceIsType">InterfaceIsType</a></td>
 <td>5</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_design.html#VisibilityModifier">VisibilityModifier</a>
 <ul>
@@ -6098,32 +6093,32 @@
 <li>protectedAllowed: <tt>&quot;true&quot;</tt></li></ul></td>
 <td>116</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>imports</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_imports.html#AvoidStarImport">AvoidStarImport</a></td>
 <td>3</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_imports.html#ImportOrder">ImportOrder</a>
 <ul>
 <li>ordered: <tt>&quot;true&quot;</tt></li>
 <li>sortStaticImportsAlphabetically: <tt>&quot;true&quot;</tt></li></ul></td>
-<td>989</td>
+<td>990</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_imports.html#RedundantImport">RedundantImport</a></td>
 <td>8</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_imports.html#UnusedImports">UnusedImports</a>
 <ul>
 <li>processJavadoc: <tt>&quot;true&quot;</tt></li></ul></td>
 <td>7</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>indentation</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_indentation.html#Indentation">Indentation</a>
 <ul>
@@ -6134,27 +6129,27 @@
 <li>basicOffset: <tt>&quot;2&quot;</tt></li></ul></td>
 <td>4757</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td>javadoc</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a></td>
 <td>806</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
 <td>3498</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td>misc</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_misc.html#ArrayTypeStyle">ArrayTypeStyle</a></td>
 <td>34</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_misc.html#UpperEll">UpperEll</a></td>
 <td>47</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td>sizes</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_sizes.html#LineLength">LineLength</a>
 <ul>
@@ -6162,22 +6157,22 @@
 <li>ignorePattern: <tt>&quot;^package.*|^import.*|a href|href|http://|https://|ftp://|org.apache.thrift.|com.google.protobuf.|hbase.protobuf.generated&quot;</tt></li></ul></td>
 <td>328</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_sizes.html#MethodLength">MethodLength</a></td>
 <td>37</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td>whitespace</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_whitespace.html#FileTabCharacter">FileTabCharacter</a></td>
 <td>7</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_whitespace.html#MethodParamPad">MethodParamPad</a></td>
 <td>51</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_whitespace.html#ParenPad">ParenPad</a></td>
 <td>63</td>
@@ -6187,13 +6182,13 @@
 <div class="section">
 <h3 id="com.google.protobuf.HBaseZeroCopyByteString.java">com/google/protobuf/HBaseZeroCopyByteString.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -6202,19 +6197,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.AuthUtil.java">org/apache/hadoop/hbase/AuthUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class AuthUtil should be declared as final.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/AuthUtil.html#L37">37</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -6223,13 +6218,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.BaseConfigurable.java">org/apache/hadoop/hbase/BaseConfigurable.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -6238,25 +6233,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ByteBufferedKeyOnlyKeyValue.java">org/apache/hadoop/hbase/ByteBufferedKeyOnlyKeyValue.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/ByteBufferedKeyOnlyKeyValue.html#L54">54</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/ByteBufferedKeyOnlyKeyValue.html#L55">55</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -6265,13 +6260,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.Cell.java">org/apache/hadoop/hbase/Cell.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -6280,187 +6275,187 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CellComparator.java">org/apache/hadoop/hbase/CellComparator.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.primitives.Longs' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L33">33</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L73">73</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L74">74</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L100">100</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L110">110</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L111">111</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L113">113</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L119">119</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L122">122</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L150">150</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L157">157</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L158">158</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L194">194</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L195">195</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L313">313</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L314">314</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L390">390</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L393">393</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L426">426</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L428">428</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L432">432</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L433">433</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L502">502</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L503">503</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L516">516</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L517">517</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L531">531</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L532">532</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellComparator.html#L546">546</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -6469,13 +6464,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CellScanner.java">org/apache/hadoop/hbase/CellScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -6484,577 +6479,577 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CellUtil.java">org/apache/hadoop/hbase/CellUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.DataOutputStream' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L23">23</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L113">113</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L179">179</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L180">180</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L181">181</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L214">214</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L290">290</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L299">299</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L300">300</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L314">314</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L315">315</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L316">316</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L326">326</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L344">344</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L347">347</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L355">355</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L359">359</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L364">364</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L366">366</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L369">369</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L389">389</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L399">399</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L405">405</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L414">414</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L432">432</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L447">447</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L448">448</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L544">544</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L558">558</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L579">579</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L586">586</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L592">592</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L685">685</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L704">704</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L712">712</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L714">714</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 4, expected level should be 6.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L719">719</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L723">723</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L733">733</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L748">748</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L749">749</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L750">750</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L797">797</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L798">798</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L813">813</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L814">814</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L828">828</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L845">845</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L846">846</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L861">861</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L879">879</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L880">880</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L881">881</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L914">914</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L930">930</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L947">947</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L963">963</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L980">980</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L998">998</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1014">1014</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1026">1026</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1036">1036</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1057">1057</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1059">1059</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1062">1062</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1070">1070</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1071">1071</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1072">1072</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1073">1073</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1074">1074</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1124">1124</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1125">1125</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1238">1238</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1243">1243</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1247">1247</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1252">1252</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1254">1254</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1275">1275</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1276">1276</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1282">1282</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1306">1306</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1307">1307</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1325">1325</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1339">1339</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1353">1353</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1367">1367</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1381">1381</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1395">1395</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1425">1425</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1426">1426</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1427">1427</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1428">1428</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1450">1450</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CellUtil.html#L1470">1470</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -7063,37 +7058,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ChoreService.java">org/apache/hadoop/hbase/ChoreService.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/ChoreService.html#L30">30</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/ChoreService.html#L173">173</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/ChoreService.html#L298">298</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/ChoreService.html#L370">370</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -7102,19 +7097,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ClusterId.java">org/apache/hadoop/hbase/ClusterId.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/ClusterId.html#L60">60</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -7123,13 +7118,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ClusterStatus.java">org/apache/hadoop/hbase/ClusterStatus.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -7138,13 +7133,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CompatibilityFactory.java">org/apache/hadoop/hbase/CompatibilityFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -7153,13 +7148,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CompatibilitySingletonFactory.java">org/apache/hadoop/hbase/CompatibilitySingletonFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -7168,25 +7163,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CompoundConfiguration.java">org/apache/hadoop/hbase/CompoundConfiguration.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def modifier' have incorrect indentation level 3, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CompoundConfiguration.html#L79">79</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CompoundConfiguration.html#L183">183</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -7195,13 +7190,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CoordinatedStateManagerFactory.java">org/apache/hadoop/hbase/CoordinatedStateManagerFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -7210,19 +7205,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CoprocessorEnvironment.java">org/apache/hadoop/hbase/CoprocessorEnvironment.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/CoprocessorEnvironment.html#L55">55</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -7231,25 +7226,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.DoNotRetryIOException.java">org/apache/hadoop/hbase/DoNotRetryIOException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/DoNotRetryIOException.html#L42">42</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/DoNotRetryIOException.html#L49">49</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -7258,13 +7253,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.DroppedSnapshotException.java">org/apache/hadoop/hbase/DroppedSnapshotException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -7273,43 +7268,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.HBaseConfiguration.java">org/apache/hadoop/hbase/HBaseConfiguration.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/HBaseConfiguration.html#L69">69</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/HBaseConfiguration.html#L104">104</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child have incorrect indentation level 7, expected level should be 6.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/HBaseConfiguration.html#L168">168</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/HBaseConfiguration.html#L185">185</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/HBaseConfiguration.html#L214">214</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -7318,13 +7313,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.HBaseIOException.java">org/apache/hadoop/hbase/HBaseIOException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -7333,313 +7328,313 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.HColumnDescriptor.java">org/apache/hadoop/hbase/HColumnDescriptor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>im

<TRUNCATED>

[24/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
index 502349e..18d72fd 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
@@ -67,15 +67,15 @@
 <span class="sourceLineNo">059</span>  requiredArguments = {<a name="line.59"></a>
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.64"></a>
+<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.64"></a>
 <span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.67"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.67"></a>
 <span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.70"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
 <span class="sourceLineNo">073</span>{<a name="line.73"></a>
@@ -116,57 +116,57 @@
 <span class="sourceLineNo">108</span>      return m_master;<a name="line.108"></a>
 <span class="sourceLineNo">109</span>    }<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    private HMaster m_master;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // 22, 1<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.112"></a>
+<span class="sourceLineNo">111</span>    // 24, 1<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      // 22, 1<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      m_metaLocation = metaLocation;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      m_metaLocation__IsNotDefault = true;<a name="line.116"></a>
+<span class="sourceLineNo">114</span>      // 24, 1<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      m_deadServers = deadServers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      m_deadServers__IsNotDefault = true;<a name="line.116"></a>
 <span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public ServerName getMetaLocation()<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_metaLocation;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_deadServers;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    private ServerName m_metaLocation;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.123"></a>
+<span class="sourceLineNo">122</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    public boolean getDeadServers__IsNotDefault()<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return m_metaLocation__IsNotDefault;<a name="line.125"></a>
+<span class="sourceLineNo">125</span>      return m_deadServers__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 21, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.129"></a>
+<span class="sourceLineNo">127</span>    private boolean m_deadServers__IsNotDefault;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // 27, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setFormat(String format)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 21, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_frags = frags;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_frags__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 27, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_format = format;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_format__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public String getFormat()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_frags;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_format;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getFrags__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private String m_format;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getFormat__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_frags__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_format__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_frags__IsNotDefault;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // 29, 1<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.146"></a>
+<span class="sourceLineNo">144</span>    private boolean m_format__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 22, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      // 29, 1<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      m_assignmentManager = assignmentManager;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      m_assignmentManager__IsNotDefault = true;<a name="line.150"></a>
+<span class="sourceLineNo">148</span>      // 22, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_metaLocation = metaLocation;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_metaLocation__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public AssignmentManager getAssignmentManager()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public ServerName getMetaLocation()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_assignmentManager;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_metaLocation;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    private AssignmentManager m_assignmentManager;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.157"></a>
+<span class="sourceLineNo">156</span>    private ServerName m_metaLocation;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_assignmentManager__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_metaLocation__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    // 28, 1<a name="line.162"></a>
 <span class="sourceLineNo">163</span>    public void setServerManager(ServerManager serverManager)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></a>
@@ -184,40 +184,40 @@
 <span class="sourceLineNo">176</span>      return m_serverManager__IsNotDefault;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>    private boolean m_serverManager__IsNotDefault;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // 27, 1<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    public void setFormat(String format)<a name="line.180"></a>
+<span class="sourceLineNo">179</span>    // 21, 1<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // 27, 1<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      m_format = format;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      m_format__IsNotDefault = true;<a name="line.184"></a>
+<span class="sourceLineNo">182</span>      // 21, 1<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      m_frags = frags;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      m_frags__IsNotDefault = true;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public String getFormat()<a name="line.186"></a>
+<span class="sourceLineNo">186</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return m_format;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>      return m_frags;<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    private String m_format;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    public boolean getFormat__IsNotDefault()<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    public boolean getFrags__IsNotDefault()<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      return m_format__IsNotDefault;<a name="line.193"></a>
+<span class="sourceLineNo">193</span>      return m_frags__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    private boolean m_format__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 23, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.197"></a>
+<span class="sourceLineNo">195</span>    private boolean m_frags__IsNotDefault;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // 26, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setFilter(String filter)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 23, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_servers = servers;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_servers__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 26, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_filter = filter;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_filter__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public List&lt;ServerName&gt; getServers()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public String getFilter()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_servers;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_filter;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private List&lt;ServerName&gt; m_servers;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getServers__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private String m_filter;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getFilter__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_servers__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_filter__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_servers__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">212</span>    private boolean m_filter__IsNotDefault;<a name="line.212"></a>
 <span class="sourceLineNo">213</span>    // 25, 1<a name="line.213"></a>
 <span class="sourceLineNo">214</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
@@ -235,40 +235,40 @@
 <span class="sourceLineNo">227</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
 <span class="sourceLineNo">229</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 24, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.231"></a>
+<span class="sourceLineNo">230</span>    // 23, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 24, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_deadServers = deadServers;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_deadServers__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 23, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_servers = servers;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_servers__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public List&lt;ServerName&gt; getServers()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_deadServers;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_servers;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getDeadServers__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private List&lt;ServerName&gt; m_servers;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getServers__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_deadServers__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_servers__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_deadServers__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 26, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setFilter(String filter)<a name="line.248"></a>
+<span class="sourceLineNo">246</span>    private boolean m_servers__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // 29, 1<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      // 26, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_filter = filter;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_filter__IsNotDefault = true;<a name="line.252"></a>
+<span class="sourceLineNo">250</span>      // 29, 1<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      m_assignmentManager = assignmentManager;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      m_assignmentManager__IsNotDefault = true;<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    public String getFilter()<a name="line.254"></a>
+<span class="sourceLineNo">254</span>    public AssignmentManager getAssignmentManager()<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      return m_filter;<a name="line.256"></a>
+<span class="sourceLineNo">256</span>      return m_assignmentManager;<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    private String m_filter;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getFilter__IsNotDefault()<a name="line.259"></a>
+<span class="sourceLineNo">258</span>    private AssignmentManager m_assignmentManager;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return m_filter__IsNotDefault;<a name="line.261"></a>
+<span class="sourceLineNo">261</span>      return m_assignmentManager__IsNotDefault;<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private boolean m_filter__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>    private boolean m_assignmentManager__IsNotDefault;<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>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.266"></a>
@@ -280,24 +280,24 @@
 <span class="sourceLineNo">272</span>    return (ImplData) super.getImplData();<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>  protected ServerName metaLocation;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.276"></a>
+<span class="sourceLineNo">275</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.276"></a>
 <span class="sourceLineNo">277</span>  {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.278"></a>
+<span class="sourceLineNo">278</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.278"></a>
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected String format;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setFrags(p_frags);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setFormat(p_format);<a name="line.285"></a>
 <span class="sourceLineNo">286</span>    return this;<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>  protected AssignmentManager assignmentManager;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.290"></a>
+<span class="sourceLineNo">289</span>  protected ServerName metaLocation;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.292"></a>
 <span class="sourceLineNo">293</span>    return this;<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>
@@ -308,17 +308,17 @@
 <span class="sourceLineNo">300</span>    return this;<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>  protected String format;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.304"></a>
+<span class="sourceLineNo">303</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>  {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    (getImplData()).setFormat(p_format);<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    (getImplData()).setFrags(p_frags);<a name="line.306"></a>
 <span class="sourceLineNo">307</span>    return this;<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>  protected List&lt;ServerName&gt; servers;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected String filter;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setServers(p_servers);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setFilter(p_filter);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<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>
@@ -329,17 +329,17 @@
 <span class="sourceLineNo">321</span>    return this;<a name="line.321"></a>
 <span class="sourceLineNo">322</span>  }<a name="line.322"></a>
 <span class="sourceLineNo">323</span>  <a name="line.323"></a>
-<span class="sourceLineNo">324</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected List&lt;ServerName&gt; servers;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setServers(p_servers);<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>
-<span class="sourceLineNo">331</span>  protected String filter;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.332"></a>
+<span class="sourceLineNo">331</span>  protected AssignmentManager assignmentManager;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.332"></a>
 <span class="sourceLineNo">333</span>  {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    (getImplData()).setFilter(p_filter);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<a name="line.335"></a>
 <span class="sourceLineNo">336</span>  }<a name="line.336"></a>
 <span class="sourceLineNo">337</span>  <a name="line.337"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
index 502349e..18d72fd 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -67,15 +67,15 @@
 <span class="sourceLineNo">059</span>  requiredArguments = {<a name="line.59"></a>
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.64"></a>
+<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.64"></a>
 <span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.67"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.67"></a>
 <span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.70"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
 <span class="sourceLineNo">073</span>{<a name="line.73"></a>
@@ -116,57 +116,57 @@
 <span class="sourceLineNo">108</span>      return m_master;<a name="line.108"></a>
 <span class="sourceLineNo">109</span>    }<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    private HMaster m_master;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // 22, 1<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.112"></a>
+<span class="sourceLineNo">111</span>    // 24, 1<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      // 22, 1<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      m_metaLocation = metaLocation;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      m_metaLocation__IsNotDefault = true;<a name="line.116"></a>
+<span class="sourceLineNo">114</span>      // 24, 1<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      m_deadServers = deadServers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      m_deadServers__IsNotDefault = true;<a name="line.116"></a>
 <span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public ServerName getMetaLocation()<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_metaLocation;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_deadServers;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    private ServerName m_metaLocation;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.123"></a>
+<span class="sourceLineNo">122</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    public boolean getDeadServers__IsNotDefault()<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return m_metaLocation__IsNotDefault;<a name="line.125"></a>
+<span class="sourceLineNo">125</span>      return m_deadServers__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 21, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.129"></a>
+<span class="sourceLineNo">127</span>    private boolean m_deadServers__IsNotDefault;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // 27, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setFormat(String format)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 21, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_frags = frags;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_frags__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 27, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_format = format;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_format__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public String getFormat()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_frags;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_format;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getFrags__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private String m_format;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getFormat__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_frags__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_format__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_frags__IsNotDefault;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // 29, 1<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.146"></a>
+<span class="sourceLineNo">144</span>    private boolean m_format__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 22, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      // 29, 1<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      m_assignmentManager = assignmentManager;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      m_assignmentManager__IsNotDefault = true;<a name="line.150"></a>
+<span class="sourceLineNo">148</span>      // 22, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_metaLocation = metaLocation;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_metaLocation__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public AssignmentManager getAssignmentManager()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public ServerName getMetaLocation()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_assignmentManager;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_metaLocation;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    private AssignmentManager m_assignmentManager;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.157"></a>
+<span class="sourceLineNo">156</span>    private ServerName m_metaLocation;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_assignmentManager__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_metaLocation__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    // 28, 1<a name="line.162"></a>
 <span class="sourceLineNo">163</span>    public void setServerManager(ServerManager serverManager)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></a>
@@ -184,40 +184,40 @@
 <span class="sourceLineNo">176</span>      return m_serverManager__IsNotDefault;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>    private boolean m_serverManager__IsNotDefault;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // 27, 1<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    public void setFormat(String format)<a name="line.180"></a>
+<span class="sourceLineNo">179</span>    // 21, 1<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // 27, 1<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      m_format = format;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      m_format__IsNotDefault = true;<a name="line.184"></a>
+<span class="sourceLineNo">182</span>      // 21, 1<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      m_frags = frags;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      m_frags__IsNotDefault = true;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public String getFormat()<a name="line.186"></a>
+<span class="sourceLineNo">186</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return m_format;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>      return m_frags;<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    private String m_format;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    public boolean getFormat__IsNotDefault()<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    public boolean getFrags__IsNotDefault()<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      return m_format__IsNotDefault;<a name="line.193"></a>
+<span class="sourceLineNo">193</span>      return m_frags__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    private boolean m_format__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 23, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.197"></a>
+<span class="sourceLineNo">195</span>    private boolean m_frags__IsNotDefault;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // 26, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setFilter(String filter)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 23, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_servers = servers;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_servers__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 26, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_filter = filter;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_filter__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public List&lt;ServerName&gt; getServers()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public String getFilter()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_servers;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_filter;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private List&lt;ServerName&gt; m_servers;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getServers__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private String m_filter;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getFilter__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_servers__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_filter__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_servers__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">212</span>    private boolean m_filter__IsNotDefault;<a name="line.212"></a>
 <span class="sourceLineNo">213</span>    // 25, 1<a name="line.213"></a>
 <span class="sourceLineNo">214</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
@@ -235,40 +235,40 @@
 <span class="sourceLineNo">227</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
 <span class="sourceLineNo">229</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 24, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.231"></a>
+<span class="sourceLineNo">230</span>    // 23, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 24, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_deadServers = deadServers;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_deadServers__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 23, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_servers = servers;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_servers__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public List&lt;ServerName&gt; getServers()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_deadServers;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_servers;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getDeadServers__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private List&lt;ServerName&gt; m_servers;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getServers__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_deadServers__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_servers__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_deadServers__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 26, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setFilter(String filter)<a name="line.248"></a>
+<span class="sourceLineNo">246</span>    private boolean m_servers__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // 29, 1<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      // 26, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_filter = filter;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_filter__IsNotDefault = true;<a name="line.252"></a>
+<span class="sourceLineNo">250</span>      // 29, 1<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      m_assignmentManager = assignmentManager;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      m_assignmentManager__IsNotDefault = true;<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    public String getFilter()<a name="line.254"></a>
+<span class="sourceLineNo">254</span>    public AssignmentManager getAssignmentManager()<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      return m_filter;<a name="line.256"></a>
+<span class="sourceLineNo">256</span>      return m_assignmentManager;<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    private String m_filter;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getFilter__IsNotDefault()<a name="line.259"></a>
+<span class="sourceLineNo">258</span>    private AssignmentManager m_assignmentManager;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return m_filter__IsNotDefault;<a name="line.261"></a>
+<span class="sourceLineNo">261</span>      return m_assignmentManager__IsNotDefault;<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private boolean m_filter__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>    private boolean m_assignmentManager__IsNotDefault;<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>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.266"></a>
@@ -280,24 +280,24 @@
 <span class="sourceLineNo">272</span>    return (ImplData) super.getImplData();<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>  protected ServerName metaLocation;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.276"></a>
+<span class="sourceLineNo">275</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.276"></a>
 <span class="sourceLineNo">277</span>  {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.278"></a>
+<span class="sourceLineNo">278</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.278"></a>
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected String format;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setFrags(p_frags);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setFormat(p_format);<a name="line.285"></a>
 <span class="sourceLineNo">286</span>    return this;<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>  protected AssignmentManager assignmentManager;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.290"></a>
+<span class="sourceLineNo">289</span>  protected ServerName metaLocation;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.292"></a>
 <span class="sourceLineNo">293</span>    return this;<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>
@@ -308,17 +308,17 @@
 <span class="sourceLineNo">300</span>    return this;<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>  protected String format;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.304"></a>
+<span class="sourceLineNo">303</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>  {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    (getImplData()).setFormat(p_format);<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    (getImplData()).setFrags(p_frags);<a name="line.306"></a>
 <span class="sourceLineNo">307</span>    return this;<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>  protected List&lt;ServerName&gt; servers;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected String filter;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setServers(p_servers);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setFilter(p_filter);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<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>
@@ -329,17 +329,17 @@
 <span class="sourceLineNo">321</span>    return this;<a name="line.321"></a>
 <span class="sourceLineNo">322</span>  }<a name="line.322"></a>
 <span class="sourceLineNo">323</span>  <a name="line.323"></a>
-<span class="sourceLineNo">324</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected List&lt;ServerName&gt; servers;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setServers(p_servers);<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>
-<span class="sourceLineNo">331</span>  protected String filter;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.332"></a>
+<span class="sourceLineNo">331</span>  protected AssignmentManager assignmentManager;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.332"></a>
 <span class="sourceLineNo">333</span>  {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    (getImplData()).setFilter(p_filter);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<a name="line.335"></a>
 <span class="sourceLineNo">336</span>  }<a name="line.336"></a>
 <span class="sourceLineNo">337</span>  <a name="line.337"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
index 33a7704..f807d1d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
@@ -68,15 +68,15 @@
 <span class="sourceLineNo">060</span><a name="line.60"></a>
 <span class="sourceLineNo">061</span>{<a name="line.61"></a>
 <span class="sourceLineNo">062</span>  private final HMaster master;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private final ServerName metaLocation;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private final Map&lt;String,Integer&gt; frags;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private final AssignmentManager assignmentManager;<a name="line.65"></a>
+<span class="sourceLineNo">063</span>  private final Set&lt;ServerName&gt; deadServers;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private final String format;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private final ServerName metaLocation;<a name="line.65"></a>
 <span class="sourceLineNo">066</span>  private final ServerManager serverManager;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private final String format;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private final List&lt;ServerName&gt; servers;<a name="line.68"></a>
+<span class="sourceLineNo">067</span>  private final Map&lt;String,Integer&gt; frags;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private final String filter;<a name="line.68"></a>
 <span class="sourceLineNo">069</span>  private final boolean catalogJanitorEnabled;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private final Set&lt;ServerName&gt; deadServers;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private final String filter;<a name="line.71"></a>
+<span class="sourceLineNo">070</span>  private final List&lt;ServerName&gt; servers;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private final AssignmentManager assignmentManager;<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  // 68, 1<a name="line.72"></a>
 <span class="sourceLineNo">073</span>  <a name="line.73"></a>
 <span class="sourceLineNo">074</span>  public String formatZKString() {<a name="line.74"></a>
@@ -106,41 +106,41 @@
 <span class="sourceLineNo">098</span><a name="line.98"></a>
 <span class="sourceLineNo">099</span>  protected static org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl.ImplData p_implData)<a name="line.99"></a>
 <span class="sourceLineNo">100</span>  {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    if(! p_implData.getMetaLocation__IsNotDefault())<a name="line.101"></a>
+<span class="sourceLineNo">101</span>    if(! p_implData.getDeadServers__IsNotDefault())<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      p_implData.setMetaLocation(null);<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      p_implData.setDeadServers(null);<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    if(! p_implData.getFrags__IsNotDefault())<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      p_implData.setFrags(null);<a name="line.107"></a>
+<span class="sourceLineNo">107</span>      p_implData.setFormat("html");<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    }<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    if(! p_implData.getAssignmentManager__IsNotDefault())<a name="line.109"></a>
+<span class="sourceLineNo">109</span>    if(! p_implData.getMetaLocation__IsNotDefault())<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      p_implData.setAssignmentManager(null);<a name="line.111"></a>
+<span class="sourceLineNo">111</span>      p_implData.setMetaLocation(null);<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    }<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    if(! p_implData.getServerManager__IsNotDefault())<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    {<a name="line.114"></a>
 <span class="sourceLineNo">115</span>      p_implData.setServerManager(null);<a name="line.115"></a>
 <span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.117"></a>
+<span class="sourceLineNo">117</span>    if(! p_implData.getFrags__IsNotDefault())<a name="line.117"></a>
 <span class="sourceLineNo">118</span>    {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      p_implData.setFormat("html");<a name="line.119"></a>
+<span class="sourceLineNo">119</span>      p_implData.setFrags(null);<a name="line.119"></a>
 <span class="sourceLineNo">120</span>    }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    if(! p_implData.getServers__IsNotDefault())<a name="line.121"></a>
+<span class="sourceLineNo">121</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      p_implData.setServers(null);<a name="line.123"></a>
+<span class="sourceLineNo">123</span>      p_implData.setFilter("general");<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    }<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    if(! p_implData.getCatalogJanitorEnabled__IsNotDefault())<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    {<a name="line.126"></a>
 <span class="sourceLineNo">127</span>      p_implData.setCatalogJanitorEnabled(true);<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    if(! p_implData.getDeadServers__IsNotDefault())<a name="line.129"></a>
+<span class="sourceLineNo">129</span>    if(! p_implData.getServers__IsNotDefault())<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      p_implData.setDeadServers(null);<a name="line.131"></a>
+<span class="sourceLineNo">131</span>      p_implData.setServers(null);<a name="line.131"></a>
 <span class="sourceLineNo">132</span>    }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.133"></a>
+<span class="sourceLineNo">133</span>    if(! p_implData.getAssignmentManager__IsNotDefault())<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      p_implData.setFilter("general");<a name="line.135"></a>
+<span class="sourceLineNo">135</span>      p_implData.setAssignmentManager(null);<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    }<a name="line.136"></a>
 <span class="sourceLineNo">137</span>    return p_implData;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>  }<a name="line.138"></a>
@@ -148,15 +148,15 @@
 <span class="sourceLineNo">140</span>  {<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    super(p_templateManager, __jamon_setOptionalArguments(p_implData));<a name="line.141"></a>
 <span class="sourceLineNo">142</span>    master = p_implData.getMaster();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    metaLocation = p_implData.getMetaLocation();<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    frags = p_implData.getFrags();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    assignmentManager = p_implData.getAssignmentManager();<a name="line.145"></a>
+<span class="sourceLineNo">143</span>    deadServers = p_implData.getDeadServers();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    format = p_implData.getFormat();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    metaLocation = p_implData.getMetaLocation();<a name="line.145"></a>
 <span class="sourceLineNo">146</span>    serverManager = p_implData.getServerManager();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    format = p_implData.getFormat();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    servers = p_implData.getServers();<a name="line.148"></a>
+<span class="sourceLineNo">147</span>    frags = p_implData.getFrags();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    filter = p_implData.getFilter();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>    catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    deadServers = p_implData.getDeadServers();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    filter = p_implData.getFilter();<a name="line.151"></a>
+<span class="sourceLineNo">150</span>    servers = p_implData.getServers();<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    assignmentManager = p_implData.getAssignmentManager();<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>  @Override public void renderNoFlush(final java.io.Writer jamonWriter)<a name="line.154"></a>
@@ -170,8 +170,8 @@
 <span class="sourceLineNo">162</span>      // 60, 3<a name="line.162"></a>
 <span class="sourceLineNo">163</span>      {<a name="line.163"></a>
 <span class="sourceLineNo">164</span>        org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl __jamon__var_6 = new org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl(this.getTemplateManager());<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        __jamon__var_6.setFilter(filter);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        __jamon__var_6.setFormat("json" );<a name="line.166"></a>
+<span class="sourceLineNo">165</span>        __jamon__var_6.setFormat("json" );<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        __jamon__var_6.setFilter(filter);<a name="line.166"></a>
 <span class="sourceLineNo">167</span>        __jamon__var_6.renderNoFlush(jamonWriter);<a name="line.167"></a>
 <span class="sourceLineNo">168</span>      }<a name="line.168"></a>
 <span class="sourceLineNo">169</span>      // 60, 68<a name="line.169"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
index 0278bf1..5ca346b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
@@ -33,10 +33,10 @@
 <span class="sourceLineNo">025</span>  requiredArguments = {<a name="line.25"></a>
 <span class="sourceLineNo">026</span>    @org.jamon.annotations.Argument(name = "regionServer", type = "HRegionServer")},<a name="line.26"></a>
 <span class="sourceLineNo">027</span>  optionalArguments = {<a name="line.27"></a>
-<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.29"></a>
-<span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String"),<a name="line.30"></a>
-<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.28"></a>
+<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.30"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -77,74 +77,74 @@
 <span class="sourceLineNo">069</span>      return m_regionServer;<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    }<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    private HRegionServer m_regionServer;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    // 24, 1<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    public void setBcv(String bcv)<a name="line.73"></a>
+<span class="sourceLineNo">072</span>    // 21, 1<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    public void setFilter(String filter)<a name="line.73"></a>
 <span class="sourceLineNo">074</span>    {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      // 24, 1<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      m_bcv = bcv;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      m_bcv__IsNotDefault = true;<a name="line.77"></a>
+<span class="sourceLineNo">075</span>      // 21, 1<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      m_filter = filter;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      m_filter__IsNotDefault = true;<a name="line.77"></a>
 <span class="sourceLineNo">078</span>    }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public String getBcv()<a name="line.79"></a>
+<span class="sourceLineNo">079</span>    public String getFilter()<a name="line.79"></a>
 <span class="sourceLineNo">080</span>    {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      return m_bcv;<a name="line.81"></a>
+<span class="sourceLineNo">081</span>      return m_filter;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>    }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    private String m_bcv;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public boolean getBcv__IsNotDefault()<a name="line.84"></a>
+<span class="sourceLineNo">083</span>    private String m_filter;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public boolean getFilter__IsNotDefault()<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      return m_bcv__IsNotDefault;<a name="line.86"></a>
+<span class="sourceLineNo">086</span>      return m_filter__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    private boolean m_bcv__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 21, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setFilter(String filter)<a name="line.90"></a>
+<span class="sourceLineNo">088</span>    private boolean m_filter__IsNotDefault;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    // 24, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setBcv(String bcv)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 21, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_filter = filter;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_filter__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 24, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_bcv = bcv;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_bcv__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getFilter()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getBcv()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_filter;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_bcv;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_filter;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getFilter__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_bcv;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getBcv__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_filter__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_bcv__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_filter__IsNotDefault;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    // 23, 1<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void setBcn(String bcn)<a name="line.107"></a>
+<span class="sourceLineNo">105</span>    private boolean m_bcv__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    // 22, 1<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    public void setFormat(String format)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      // 23, 1<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      m_bcn = bcn;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      m_bcn__IsNotDefault = true;<a name="line.111"></a>
+<span class="sourceLineNo">109</span>      // 22, 1<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      m_format = format;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      m_format__IsNotDefault = true;<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    public String getBcn()<a name="line.113"></a>
+<span class="sourceLineNo">113</span>    public String getFormat()<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      return m_bcn;<a name="line.115"></a>
+<span class="sourceLineNo">115</span>      return m_format;<a name="line.115"></a>
 <span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    private String m_bcn;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public boolean getBcn__IsNotDefault()<a name="line.118"></a>
+<span class="sourceLineNo">117</span>    private String m_format;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    public boolean getFormat__IsNotDefault()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_bcn__IsNotDefault;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_format__IsNotDefault;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    private boolean m_bcn__IsNotDefault;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // 22, 1<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void setFormat(String format)<a name="line.124"></a>
+<span class="sourceLineNo">122</span>    private boolean m_format__IsNotDefault;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    // 23, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setBcn(String bcn)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 22, 1<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      m_format = format;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      m_format__IsNotDefault = true;<a name="line.128"></a>
+<span class="sourceLineNo">126</span>      // 23, 1<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      m_bcn = bcn;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      m_bcn__IsNotDefault = true;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getFormat()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getBcn()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_format;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_bcn;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    private String m_format;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getFormat__IsNotDefault()<a name="line.135"></a>
+<span class="sourceLineNo">134</span>    private String m_bcn;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    public boolean getBcn__IsNotDefault()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_format__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_bcn__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_format__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_bcn__IsNotDefault;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
 <span class="sourceLineNo">142</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.142"></a>
@@ -156,31 +156,31 @@
 <span class="sourceLineNo">148</span>    return (ImplData) super.getImplData();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>  }<a name="line.149"></a>
 <span class="sourceLineNo">150</span>  <a name="line.150"></a>
-<span class="sourceLineNo">151</span>  protected String bcv;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.152"></a>
+<span class="sourceLineNo">151</span>  protected String filter;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.152"></a>
 <span class="sourceLineNo">153</span>  {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    (getImplData()).setBcv(p_bcv);<a name="line.154"></a>
+<span class="sourceLineNo">154</span>    (getImplData()).setFilter(p_filter);<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    return this;<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>  protected String filter;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String bcv;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setFilter(p_filter);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setBcv(p_bcv);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<a name="line.162"></a>
 <span class="sourceLineNo">163</span>  }<a name="line.163"></a>
 <span class="sourceLineNo">164</span>  <a name="line.164"></a>
-<span class="sourceLineNo">165</span>  protected String bcn;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.166"></a>
+<span class="sourceLineNo">165</span>  protected String format;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.166"></a>
 <span class="sourceLineNo">167</span>  {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    (getImplData()).setBcn(p_bcn);<a name="line.168"></a>
+<span class="sourceLineNo">168</span>    (getImplData()).setFormat(p_format);<a name="line.168"></a>
 <span class="sourceLineNo">169</span>    return this;<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>  protected String format;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.173"></a>
+<span class="sourceLineNo">172</span>  protected String bcn;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setFormat(p_format);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setBcn(p_bcn);<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    return this;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>  <a name="line.178"></a>


[10/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html
index f3aed1b..0597160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html
@@ -1513,810 +1513,816 @@
 <span class="sourceLineNo">1505</span>      if (maxSeqIdInStores == null || maxSeqIdInStores.isEmpty()) {<a name="line.1505"></a>
 <span class="sourceLineNo">1506</span>        return;<a name="line.1506"></a>
 <span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        if (!CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          // or the master was crashed before and we can not get the information.<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>          if (maxSeqId != null &amp;&amp; maxSeqId.longValue() &gt;= logEntry.getKey().getLogSeqNum()) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>            skippedCells.add(cell);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>          }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      }<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (!skippedCells.isEmpty()) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        logEntry.getEdit().getCells().removeAll(skippedCells);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1508</span>      // Create the array list for the cells that aren't filtered.<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // We make the assumption that most cells will be kept.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      ArrayList&lt;Cell&gt; keptCells = new ArrayList&lt;Cell&gt;(logEntry.getEdit().getCells().size());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>          keptCells.add(cell);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        } else {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          // or the master was crashed before and we can not get the information.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>          if (maxSeqId == null || maxSeqId.longValue() &lt; logEntry.getKey().getLogSeqNum()) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>            keptCells.add(cell);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      }<a name="line.1523"></a>
 <span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    @Override<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (entries.isEmpty()) {<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        return;<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      WriterAndPath wap = null;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      long startTime = System.nanoTime();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      try {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        int editsCount = 0;<a name="line.1537"></a>
+<span class="sourceLineNo">1525</span>      // Anything in the keptCells array list is still live.<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // So rather than removing the cells from the array list<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      // which would be an O(n^2) operation, we just replace the list<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      logEntry.getEdit().setCells(keptCells);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    @Override<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      if (entries.isEmpty()) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>        return;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      }<a name="line.1537"></a>
 <span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        for (Entry logEntry : entries) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          if (wap == null) {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>            wap = getWriterAndPath(logEntry);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>            if (wap == null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>              if (LOG.isDebugEnabled()) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>              }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>              return;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          filterCellByStore(logEntry);<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            wap.w.append(logEntry);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            editsCount++;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          } else {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>            wap.incrementSkippedEdits(1);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>          }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        // Pass along summary statistics<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        wap.incrementEdits(editsCount);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      } catch (IOException e) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          e = e instanceof RemoteException ?<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>        throw e;<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    }<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span><a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    /**<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>     */<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    @Override<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      synchronized (writers) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>        }<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      return ret;<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span><a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    @Override<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    public int getNumberOfRecoveredRegions() {<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      return writers.size();<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>  }<a name="line.1587"></a>
+<span class="sourceLineNo">1539</span>      WriterAndPath wap = null;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      long startTime = System.nanoTime();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      try {<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        int editsCount = 0;<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span><a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>        for (Entry logEntry : entries) {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>          if (wap == null) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>            wap = getWriterAndPath(logEntry);<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>            if (wap == null) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>              if (LOG.isDebugEnabled()) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>              }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>              return;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>            }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          filterCellByStore(logEntry);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            wap.w.append(logEntry);<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            editsCount++;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          } else {<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>            wap.incrementSkippedEdits(1);<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>          }<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        // Pass along summary statistics<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        wap.incrementEdits(editsCount);<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      } catch (IOException e) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>          e = e instanceof RemoteException ?<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>        throw e;<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    }<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span><a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>    /**<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>     */<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    @Override<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      synchronized (writers) {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      return ret;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    }<a name="line.1587"></a>
 <span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  /**<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>   */<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  public abstract static class SinkWriter {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    /* Count of edits written to this path */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    long editsWritten = 0;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    /* Count of edits skipped to this path */<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    long editsSkipped = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    /* Number of nanos spent writing to this log */<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    long nanosSpent = 0;<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    void incrementEdits(int edits) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      editsWritten += edits;<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    void incrementSkippedEdits(int skipped) {<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      editsSkipped += skipped;<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span><a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    void incrementNanoTime(long nanos) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      nanosSpent += nanos;<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    }<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  }<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span><a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>  /**<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * data written to this output.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   */<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    final Path p;<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    final Writer w;<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      this.p = p;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      this.w = w;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>  }<a name="line.1625"></a>
+<span class="sourceLineNo">1589</span>    @Override<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    public int getNumberOfRecoveredRegions() {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      return writers.size();<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  }<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span><a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>  /**<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>   */<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>  public abstract static class SinkWriter {<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    /* Count of edits written to this path */<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    long editsWritten = 0;<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    /* Count of edits skipped to this path */<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    long editsSkipped = 0;<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    /* Number of nanos spent writing to this log */<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    long nanosSpent = 0;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span><a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    void incrementEdits(int edits) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      editsWritten += edits;<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>    void incrementSkippedEdits(int skipped) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      editsSkipped += skipped;<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span><a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    void incrementNanoTime(long nanos) {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      nanosSpent += nanos;<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span><a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>  /**<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>   * data written to this output.<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>   */<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    final Path p;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    final Writer w;<a name="line.1625"></a>
 <span class="sourceLineNo">1626</span><a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>  /**<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>   */<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    private static final String KEY_DELIMITER = "#";<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    private long waitRegionOnlineTimeOut;<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    // online encoded region name -&gt; region location map<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span><a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>    /**<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>     * Map key -&gt; value layout<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>     */<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span><a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        int numWriters) {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      super(controller, entryBuffers, numWriters);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      this.waitRegionOnlineTimeOut =<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>        entryBuffers, numWriters);<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span><a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>    @Override<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      if (entries.isEmpty()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        return;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span><a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      // check if current region in a disabling or disabled table<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        // need fall back to old way<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>        // store regions we have recovered so far<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        return;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      }<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span><a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      // group entries by region servers<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      groupEditsByServer(entries);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span><a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      // process workitems<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      String maxLocKey = null;<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      int maxSize = 0;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>            maxSize = curQueue.size();<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>            maxQueue = curQueue;<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>            maxLocKey = entry.getKey();<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>          }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        if (maxSize &lt; minBatchSize<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>          // buffer more to process<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>          return;<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        } else if (maxSize &gt; 0) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>        }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span><a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>      if (maxSize &gt; 0) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>        recoveredRegions.add(encodedRegionName);<a name="line.1721"></a>
+<span class="sourceLineNo">1627</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      this.p = p;<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      this.w = w;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>    }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>  }<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span><a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>  /**<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>   */<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    private static final String KEY_DELIMITER = "#";<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>    private long waitRegionOnlineTimeOut;<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    // online encoded region name -&gt; region location map<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span><a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>    /**<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>     * Map key -&gt; value layout<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>     */<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span><a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span><a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>        int numWriters) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      super(controller, entryBuffers, numWriters);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      this.waitRegionOnlineTimeOut =<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>        entryBuffers, numWriters);<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    @Override<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (entries.isEmpty()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        return;<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      }<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span><a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      // check if current region in a disabling or disabled table<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // need fall back to old way<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>        // store regions we have recovered so far<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        return;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span><a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      // group entries by region servers<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      groupEditsByServer(entries);<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span><a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      // process workitems<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      String maxLocKey = null;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>      int maxSize = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>            maxSize = curQueue.size();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>            maxQueue = curQueue;<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>            maxLocKey = entry.getKey();<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>          }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>        }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        if (maxSize &lt; minBatchSize<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>          // buffer more to process<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>          return;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        } else if (maxSize &gt; 0) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span><a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      if (maxSize &gt; 0) {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
 <span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
 <span class="sourceLineNo">1724</span><a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    /**<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>     * Helper function to group WALEntries to individual region servers<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>     * @throws IOException<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>     */<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      for (Entry entry : entries) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>        WALEdit edit = entry.getEdit();<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        TableName table = entry.getKey().getTablename();<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>        // clear scopes which isn't needed for recovery<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>        entry.getKey().setScopes(null);<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>        // skip edits of non-existent tables<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>          this.skippedEdits.incrementAndGet();<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>          continue;<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        }<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span><a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        boolean needSkip = false;<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        HRegionLocation loc = null;<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        String locKey = null;<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span><a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>        for (Cell cell : cells) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>          boolean isCompactionEntry = false;<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>              try {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>                  .toByteArray());<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>                row = regionName[1]; // startKey of the region<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>                isCompactionEntry = true;<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>              } catch (Exception ex) {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>                skippedCells.add(cell);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>                continue;<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>              }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>            } else {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>              skippedCells.add(cell);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>              continue;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>            }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>          try {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>            loc =<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>                  encodeRegionNameStr);<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            // skip replaying the compaction if the region is gone<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>                  + encodeRegionNameStr);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>              needSkip = true;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>            }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>          } catch (TableNotFoundException ex) {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>            // table has been deleted so skip edits of the table<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>                + encodeRegionNameStr);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>            if (nonExistentTables == null) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>            }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            nonExistentTables.add(table);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>            this.skippedEdits.incrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>            needSkip = true;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>            break;<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          }<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span><a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          cachedLastFlushedSequenceId =<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          if (cachedLastFlushedSequenceId != null<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            // skip the whole WAL entry<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            this.skippedEdits.incrementAndGet();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            needSkip = true;<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            break;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } else {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            if (maxStoreSequenceIds == null) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>              maxStoreSequenceIds =<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            }<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            if (maxStoreSequenceIds != null) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>                skippedCells.add(cell);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                continue;<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>              }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>            }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>          }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        }<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>        // skip the edit<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        if (loc == null || needSkip) continue;<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>        if (!skippedCells.isEmpty()) {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          cells.removeAll(skippedCells);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        synchronized (serverToBufferQueueMap) {<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>          if (queue == null) {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>            queue =<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>          }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>        }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        // store regions we have recovered so far<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      }<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    }<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span><a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    /**<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>     * destination region is online for replay.<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>     * @throws IOException<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>     */<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>      // fetch location from cache<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      if(loc != null) return loc;<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      if (loc == null) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>            + " of table:" + table);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      // check if current row moves to a different region due to region merge/split<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        // originalEncodedRegionName should have already flushed<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      }<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span><a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      Long lastFlushedSequenceId = -1l;<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      if (!isRecovering.get()) {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>        // been moved to somewhere before hosting RS fails<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>            + " because it's not in recovering.");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      } else {<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>        Long cachedLastFlushedSequenceId =<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span><a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        // update the value for the region<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>        RegionStoreSequenceIds ids =<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>              loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        if (ids != null) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>          }<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        }<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        if (cachedLastFlushedSequenceId == null<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>            || lastFlushedSequenceId &gt; cachedLastFlushedSequenceId) {<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>          lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), lastFlushedSequenceId);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        }<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      }<a name="line.1903"></a>
+<span class="sourceLineNo">1725</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>        recoveredRegions.add(encodedRegionName);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    }<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span><a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>    /**<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>     * Helper function to group WALEntries to individual region servers<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>     * @throws IOException<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>     */<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      for (Entry entry : entries) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        WALEdit edit = entry.getEdit();<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>        TableName table = entry.getKey().getTablename();<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        // clear scopes which isn't needed for recovery<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        entry.getKey().setScopes(null);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // skip edits of non-existent tables<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>          this.skippedEdits.incrementAndGet();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>          continue;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        boolean needSkip = false;<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        HRegionLocation loc = null;<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        String locKey = null;<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span><a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        for (Cell cell : cells) {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>          boolean isCompactionEntry = false;<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>              try {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>                  .toByteArray());<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>                row = regionName[1]; // startKey of the region<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>                isCompactionEntry = true;<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>              } catch (Exception ex) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>                skippedCells.add(cell);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>                continue;<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>              }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            } else {<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>              skippedCells.add(cell);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>              continue;<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>            }<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          }<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span><a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          try {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>            loc =<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>                  encodeRegionNameStr);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>            // skip replaying the compaction if the region is gone<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>                  + encodeRegionNameStr);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>              needSkip = true;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>            }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>          } catch (TableNotFoundException ex) {<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>            // table has been deleted so skip edits of the table<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>                + encodeRegionNameStr);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>            if (nonExistentTables == null) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>            }<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>            nonExistentTables.add(table);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>            this.skippedEdits.incrementAndGet();<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>            needSkip = true;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>            break;<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          }<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span><a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>          cachedLastFlushedSequenceId =<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>          if (cachedLastFlushedSequenceId != null<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            // skip the whole WAL entry<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>            this.skippedEdits.incrementAndGet();<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>            needSkip = true;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            break;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>          } else {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>            if (maxStoreSequenceIds == null) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>              maxStoreSequenceIds =<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>            }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            if (maxStoreSequenceIds != null) {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>                skippedCells.add(cell);<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                continue;<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              }<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>            }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>          }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        }<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>        // skip the edit<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        if (loc == null || needSkip) continue;<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span><a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (!skippedCells.isEmpty()) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          cells.removeAll(skippedCells);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>        synchronized (serverToBufferQueueMap) {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>          if (queue == null) {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            queue =<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>        }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>        // store regions we have recovered so far<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span><a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    /**<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>     * destination region is online for replay.<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>     * @throws IOException<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>     */<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      // fetch location from cache<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      if(loc != null) return loc;<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      if (loc == null) {<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>            + " of table:" + table);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      }<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      // check if current row moves to a different region due to region merge/split<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        // originalEncodedRegionName should have already flushed<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      Long lastFlushedSequenceId = -1l;<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      if (!isRecovering.get()) {<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>        // been moved to somewhere before hosting RS fails<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>            + " because it's not in recovering.");<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      } else {<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        Long cachedLastFlushedSequenceId =<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        // update the value for the region<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>        RegionStoreSequenceIds ids =<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>              loc.getRegionInfo().getEncodedName());<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>        if (ids != null) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>          }<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        }<a name="line.1903"></a>
 <span class="sourceLineNo">1904</span><a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      onlineRegions.put(loc.getRegionInfo().getEncodedName(), loc);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      return loc;<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span><a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>    private void processWorkItems(String key, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; actions)<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>        throws IOException {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>      RegionServerWriter rsw = null;<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span><a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long startTime = System.nanoTime();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      try {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        rsw = getRegionServerWriter(key);<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>        rsw.sink.replayEntries(actions);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>        // Pass along summary statistics<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        rsw.incrementEdits(actions.size());<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>        rsw.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      } catch (IOException e) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        throw e;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    /**<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>     * Wait until region is online on the destination region server<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>     * @param loc<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>     * @param row<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>     * @param timeout How long to wait<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>     * @param isRecovering Recovering state of the region interested on destination region server.<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>     * @return True when region is online on the destination region server<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>     * @throws InterruptedException<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>     */<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    private HRegionLocation waitUntilRegionOnline(HRegionLocation loc, byte[] row,<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>        final long timeout, AtomicBoolean isRecovering)<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>        throws IOException {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      final long endTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      final long pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      boolean reloadLocation = false;<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      TableName tableName = loc.getRegionInfo().getTable();<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      int tries = 0;<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      Throwable cause = null;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>      while (endTime &gt; EnvironmentEdgeManager.currentTime()) {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>        try {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          // Try and get regioninfo from the hosting server.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          HConnection hconn = getConnectionByTableName(tableName);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          if(reloadLocation) {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            loc = hconn.getRegionLocation(tableName, row, true);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          }<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          BlockingInterface remoteSvr = hconn.getAdmin(loc.getServerName());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          HRegionInfo region = loc.getRegionInfo();<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>          try {<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>            GetRegionInfoRequest request =<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>                RequestConverter.buildGetRegionInfoRequest(region.getRegionName());<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            GetRegionInfoResponse response = remoteSvr.getRegionInfo(null, request);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>            if (HRegionInfo.convert(response.getRegionInfo()) != null) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>              isRecovering.set((response.hasIsRecovering()) ? response.getIsRecovering() : true);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>              return loc;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            }<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          } catch (ServiceException se) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>          }<a name="line.1966"></a>
-<s

<TRUNCATED>

[36/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/client/ScannerCallable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/ScannerCallable.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/ScannerCallable.html
index 29cd355..1a7a6d9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/ScannerCallable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/ScannerCallable.html
@@ -79,410 +79,420 @@
 <span class="sourceLineNo">071</span>  protected long scannerId = -1L;<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  protected boolean instantiated = false;<a name="line.72"></a>
 <span class="sourceLineNo">073</span>  protected boolean closed = false;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private Scan scan;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private int caching = 1;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  protected final ClusterConnection cConnection;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  protected ScanMetrics scanMetrics;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private boolean logScannerActivity = false;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private int logCutOffLatency = 1000;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private static String myAddress;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  protected final int id;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  protected boolean serverHasMoreResultsContext;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  protected boolean serverHasMoreResults;<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>   * Saves whether or not the most recent response from the server was a heartbeat message.<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * Heartbeat messages are identified by the flag {@link ScanResponse#getHeartbeatMessage()}<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   */<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  protected boolean heartbeatMessage = false;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  static {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    try {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      myAddress = DNS.getDefaultHost("default", "default");<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    } catch (UnknownHostException uhe) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      LOG.error("cannot determine my address", uhe);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  // indicate if it is a remote server call<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected boolean isRegionServerRemote = true;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  private long nextCallSeq = 0;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  protected RpcControllerFactory controllerFactory;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  protected PayloadCarryingRpcController controller;<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>   * @param connection which connection<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * @param tableName table callable is on<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * @param scan the scan to execute<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * @param scanMetrics the ScanMetrics to used, if it is null, ScannerCallable won't collect<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   *          metrics<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @param rpcControllerFactory factory to use when creating <a name="line.110"></a>
-<span class="sourceLineNo">111</span>   *        {@link com.google.protobuf.RpcController}<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public ScannerCallable(ClusterConnection connection, TableName tableName, Scan scan,<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      ScanMetrics scanMetrics, RpcControllerFactory rpcControllerFactory) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    this(connection, tableName, scan, scanMetrics, rpcControllerFactory, 0);<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>   *<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @param connection<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param tableName<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * @param scan<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * @param scanMetrics<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * @param id the replicaId<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   */<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  public ScannerCallable(ClusterConnection connection, TableName tableName, Scan scan,<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      ScanMetrics scanMetrics, RpcControllerFactory rpcControllerFactory, int id) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    super(connection, tableName, scan.getStartRow());<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    this.id = id;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    this.cConnection = connection;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    this.scan = scan;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    this.scanMetrics = scanMetrics;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    Configuration conf = connection.getConfiguration();<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    logScannerActivity = conf.getBoolean(LOG_SCANNER_ACTIVITY, false);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    logCutOffLatency = conf.getInt(LOG_SCANNER_LATENCY_CUTOFF, 1000);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    this.controllerFactory = rpcControllerFactory;<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>  PayloadCarryingRpcController getController() {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    return controller;<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>   * @param reload force reload of server location<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * @throws IOException<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   */<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  @Override<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  public void prepare(boolean reload) throws IOException {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    if (Thread.interrupted()) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      throw new InterruptedIOException();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    RegionLocations rl = RpcRetryingCallerWithReadReplicas.getRegionLocations(!reload,<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        id, getConnection(), getTableName(), getRow());<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    location = id &lt; rl.size() ? rl.getRegionLocation(id) : null;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    if (location == null || location.getServerName() == null) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      // With this exception, there will be a retry. The location can be null for a replica<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      //  when the table is created or after a split.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      throw new HBaseIOException("There is no location for replica id #" + id);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    ServerName dest = location.getServerName();<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    setStub(super.getConnection().getClient(dest));<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    if (!instantiated || reload) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      checkIfRegionServerIsRemote();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      instantiated = true;<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>    // check how often we retry.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    if (reload &amp;&amp; this.scanMetrics != null) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      this.scanMetrics.countOfRPCRetries.incrementAndGet();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      if (isRegionServerRemote) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        this.scanMetrics.countOfRemoteRPCRetries.incrementAndGet();<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>  }<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>   * compare the local machine hostname with region server's hostname<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * to decide if hbase client connects to a remote region server<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  protected void checkIfRegionServerIsRemote() {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    if (getLocation().getHostname().equalsIgnoreCase(myAddress)) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      isRegionServerRemote = false;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    } else {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      isRegionServerRemote = true;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">074</span>  protected boolean renew = false;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  private Scan scan;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private int caching = 1;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  protected final ClusterConnection cConnection;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  protected ScanMetrics scanMetrics;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private boolean logScannerActivity = false;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private int logCutOffLatency = 1000;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private static String myAddress;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  protected final int id;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  protected boolean serverHasMoreResultsContext;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  protected boolean serverHasMoreResults;<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>   * Saves whether or not the most recent response from the server was a heartbeat message.<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   * Heartbeat messages are identified by the flag {@link ScanResponse#getHeartbeatMessage()}<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   */<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  protected boolean heartbeatMessage = false;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  static {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    try {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      myAddress = DNS.getDefaultHost("default", "default");<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    } catch (UnknownHostException uhe) {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      LOG.error("cannot determine my address", uhe);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    }<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  }<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  // indicate if it is a remote server call<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected boolean isRegionServerRemote = true;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  private long nextCallSeq = 0;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected RpcControllerFactory controllerFactory;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected PayloadCarryingRpcController controller;<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>   * @param connection which connection<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * @param tableName table callable is on<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * @param scan the scan to execute<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * @param scanMetrics the ScanMetrics to used, if it is null, ScannerCallable won't collect<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   *          metrics<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @param rpcControllerFactory factory to use when creating <a name="line.111"></a>
+<span class="sourceLineNo">112</span>   *        {@link com.google.protobuf.RpcController}<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public ScannerCallable(ClusterConnection connection, TableName tableName, Scan scan,<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      ScanMetrics scanMetrics, RpcControllerFactory rpcControllerFactory) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    this(connection, tableName, scan, scanMetrics, rpcControllerFactory, 0);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  /**<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   *<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @param connection<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param tableName<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * @param scan<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * @param scanMetrics<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * @param id the replicaId<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  public ScannerCallable(ClusterConnection connection, TableName tableName, Scan scan,<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      ScanMetrics scanMetrics, RpcControllerFactory rpcControllerFactory, int id) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    super(connection, tableName, scan.getStartRow());<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    this.id = id;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    this.cConnection = connection;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    this.scan = scan;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    this.scanMetrics = scanMetrics;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    Configuration conf = connection.getConfiguration();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    logScannerActivity = conf.getBoolean(LOG_SCANNER_ACTIVITY, false);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    logCutOffLatency = conf.getInt(LOG_SCANNER_LATENCY_CUTOFF, 1000);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    this.controllerFactory = rpcControllerFactory;<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>  PayloadCarryingRpcController getController() {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    return controller;<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>  /**<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * @param reload force reload of server location<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * @throws IOException<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   */<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  @Override<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  public void prepare(boolean reload) throws IOException {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    if (Thread.interrupted()) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      throw new InterruptedIOException();<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    }<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    RegionLocations rl = RpcRetryingCallerWithReadReplicas.getRegionLocations(!reload,<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        id, getConnection(), getTableName(), getRow());<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    location = id &lt; rl.size() ? rl.getRegionLocation(id) : null;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    if (location == null || location.getServerName() == null) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // With this exception, there will be a retry. The location can be null for a replica<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      //  when the table is created or after a split.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      throw new HBaseIOException("There is no location for replica id #" + id);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    ServerName dest = location.getServerName();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    setStub(super.getConnection().getClient(dest));<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    if (!instantiated || reload) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      checkIfRegionServerIsRemote();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      instantiated = true;<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>    // check how often we retry.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    if (reload &amp;&amp; this.scanMetrics != null) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      this.scanMetrics.countOfRPCRetries.incrementAndGet();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      if (isRegionServerRemote) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>        this.scanMetrics.countOfRemoteRPCRetries.incrementAndGet();<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>  }<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>   * compare the local machine hostname with region server's hostname<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   * to decide if hbase client connects to a remote region server<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   */<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  protected void checkIfRegionServerIsRemote() {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    if (getLocation().getHostname().equalsIgnoreCase(myAddress)) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      isRegionServerRemote = false;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    } else {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      isRegionServerRemote = true;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  }<a name="line.186"></a>
 <span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>  @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  public Result [] call(int callTimeout) throws IOException {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    if (Thread.interrupted()) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      throw new InterruptedIOException();<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    if (closed) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      if (scannerId != -1) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        close();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    } else {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      if (scannerId == -1L) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        this.scannerId = openScanner();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      } else {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        Result [] rrs = null;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        ScanRequest request = null;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        // Reset the heartbeat flag prior to each RPC in case an exception is thrown by the server<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        setHeartbeatMessage(false);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        try {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>          incRPCcallsMetrics();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>          request =<a name="line.207"></a>
-<span class="sourceLineNo">208</span>              RequestConverter.buildScanRequest(scannerId, caching, false, nextCallSeq,<a name="line.208"></a>
-<span class="sourceLineNo">209</span>                this.scanMetrics != null);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          ScanResponse response = null;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>          controller = controllerFactory.newController();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          controller.setPriority(getTableName());<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          controller.setCallTimeout(callTimeout);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          try {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>            response = getStub().scan(controller, request);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>            // Client and RS maintain a nextCallSeq number during the scan. Every next() call<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            // from client to server will increment this number in both sides. Client passes this<a name="line.217"></a>
-<span class="sourceLineNo">218</span>            // number along with the request and at RS side both the incoming nextCallSeq and its<a name="line.218"></a>
-<span class="sourceLineNo">219</span>            // nextCallSeq will be matched. In case of a timeout this increment at the client side<a name="line.219"></a>
-<span class="sourceLineNo">220</span>            // should not happen. If at the server side fetching of next batch of data was over,<a name="line.220"></a>
-<span class="sourceLineNo">221</span>            // there will be mismatch in the nextCallSeq number. Server will throw<a name="line.221"></a>
-<span class="sourceLineNo">222</span>            // OutOfOrderScannerNextException and then client will reopen the scanner with startrow<a name="line.222"></a>
-<span class="sourceLineNo">223</span>            // as the last successfully retrieved row.<a name="line.223"></a>
-<span class="sourceLineNo">224</span>            // See HBASE-5974<a name="line.224"></a>
-<span class="sourceLineNo">225</span>            nextCallSeq++;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>            long timestamp = System.currentTimeMillis();<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            setHeartbeatMessage(response.hasHeartbeatMessage() &amp;&amp; response.getHeartbeatMessage());<a name="line.227"></a>
-<span class="sourceLineNo">228</span>            // Results are returned via controller<a name="line.228"></a>
-<span class="sourceLineNo">229</span>            CellScanner cellScanner = controller.cellScanner();<a name="line.229"></a>
-<span class="sourceLineNo">230</span>            rrs = ResponseConverter.getResults(cellScanner, response);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>            if (logScannerActivity) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>              long now = System.currentTimeMillis();<a name="line.232"></a>
-<span class="sourceLineNo">233</span>              if (now - timestamp &gt; logCutOffLatency) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>                int rows = rrs == null ? 0 : rrs.length;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>                LOG.info("Took " + (now-timestamp) + "ms to fetch "<a name="line.235"></a>
-<span class="sourceLineNo">236</span>                  + rows + " rows from scanner=" + scannerId);<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>            updateServerSideMetrics(response);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>            // moreResults is only used for the case where a filter exhausts all elements<a name="line.240"></a>
-<span class="sourceLineNo">241</span>            if (response.hasMoreResults() &amp;&amp; !response.getMoreResults()) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>              scannerId = -1L;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>              closed = true;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>              // Implied that no results were returned back, either.<a name="line.244"></a>
-<span class="sourceLineNo">245</span>              return null;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>            }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>            // moreResultsInRegion explicitly defines when a RS may choose to terminate a batch due<a name="line.247"></a>
-<span class="sourceLineNo">248</span>            // to size or quantity of results in the response.<a name="line.248"></a>
-<span class="sourceLineNo">249</span>            if (response.hasMoreResultsInRegion()) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>              // Set what the RS said<a name="line.250"></a>
-<span class="sourceLineNo">251</span>              setHasMoreResultsContext(true);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>              setServerHasMoreResults(response.getMoreResultsInRegion());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            } else {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>              // Server didn't respond whether it has more results or not.<a name="line.254"></a>
-<span class="sourceLineNo">255</span>              setHasMoreResultsContext(false);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>            }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          } catch (ServiceException se) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          updateResultsMetrics(rrs);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        } catch (IOException e) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>          if (logScannerActivity) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>            LOG.info("Got exception making request " + TextFormat.shortDebugString(request)<a name="line.263"></a>
-<span class="sourceLineNo">264</span>              + " to " + getLocation(), e);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          IOException ioe = e;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>          if (e instanceof RemoteException) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>            ioe = ((RemoteException) e).unwrapRemoteException();<a name="line.268"></a>
-<span class="sourceLineNo">269</span>          }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>          if (logScannerActivity &amp;&amp; (ioe instanceof UnknownScannerException)) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>            try {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>              HRegionLocation location =<a name="line.272"></a>
-<span class="sourceLineNo">273</span>                getConnection().relocateRegion(getTableName(), scan.getStartRow());<a name="line.273"></a>
-<span class="sourceLineNo">274</span>              LOG.info("Scanner=" + scannerId<a name="line.274"></a>
-<span class="sourceLineNo">275</span>                + " expired, current region location is " + location.toString());<a name="line.275"></a>
-<span class="sourceLineNo">276</span>            } catch (Throwable t) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>              LOG.info("Failed to relocate region", t);<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>          // The below convertion of exceptions into DoNotRetryExceptions is a little strange.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>          // Why not just have these exceptions implment DNRIOE you ask?  Well, usually we want<a name="line.281"></a>
-<span class="sourceLineNo">282</span>          // ServerCallable#withRetries to just retry when it gets these exceptions.  In here in<a name="line.282"></a>
-<span class="sourceLineNo">283</span>          // a scan when doing a next in particular, we want to break out and get the scanner to<a name="line.283"></a>
-<span class="sourceLineNo">284</span>          // reset itself up again.  Throwing a DNRIOE is how we signal this to happen (its ugly,<a name="line.284"></a>
-<span class="sourceLineNo">285</span>          // yeah and hard to follow and in need of a refactor).<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          if (ioe instanceof NotServingRegionException) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>            // Throw a DNRE so that we break out of cycle of calling NSRE<a name="line.287"></a>
-<span class="sourceLineNo">288</span>            // when what we need is to open scanner against new location.<a name="line.288"></a>
-<span class="sourceLineNo">289</span>            // Attach NSRE to signal client that it needs to re-setup scanner.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>            if (this.scanMetrics != null) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>              this.scanMetrics.countOfNSRE.incrementAndGet();<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>            throw new DoNotRetryIOException("Resetting the scanner -- see exception cause", ioe);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>          } else if (ioe instanceof RegionServerStoppedException) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>            // Throw a DNRE so that we break out of cycle of the retries and instead go and<a name="line.295"></a>
-<span class="sourceLineNo">296</span>            // open scanner against new location.<a name="line.296"></a>
-<span class="sourceLineNo">297</span>            throw new DoNotRetryIOException("Resetting the scanner -- see exception cause", ioe);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>          } else {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>            // The outer layers will retry<a name="line.299"></a>
-<span class="sourceLineNo">300</span>            throw ioe;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>          }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        return rrs;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    return null;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>  /**<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * @return true when the most recent RPC response indicated that the response was a heartbeat<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   *         message. Heartbeat messages are sent back from the server when the processing of the<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   *         scan request exceeds a certain time threshold. Heartbeats allow the server to avoid<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   *         timeouts during long running scan operations.<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  protected boolean isHeartbeatMessage() {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    return heartbeatMessage;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  protected void setHeartbeatMessage(boolean heartbeatMessage) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    this.heartbeatMessage = heartbeatMessage;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>  private void incRPCcallsMetrics() {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    if (this.scanMetrics == null) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      return;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    this.scanMetrics.countOfRPCcalls.incrementAndGet();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    if (isRegionServerRemote) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.scanMetrics.countOfRemoteRPCcalls.incrementAndGet();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
-<span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>  protected void updateResultsMetrics(Result[] rrs) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    if (this.scanMetrics == null || rrs == null || rrs.length == 0) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      return;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    long resultSize = 0;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    for (Result rr : rrs) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      for (Cell cell : rr.rawCells()) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>        resultSize += CellUtil.estimatedSerializedSizeOf(cell);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    this.scanMetrics.countOfBytesInResults.addAndGet(resultSize);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    if (isRegionServerRemote) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      this.scanMetrics.countOfBytesInRemoteResults.addAndGet(resultSize);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>  /**<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * Use the scan metrics returned by the server to add to the identically named counters in the<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * client side metrics. If a counter does not exist with the same name as the server side metric,<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * the attempt to increase the counter will fail.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * @param response<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  private void updateServerSideMetrics(ScanResponse response) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    if (this.scanMetrics == null || response == null || !response.hasScanMetrics()) return;<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>    Map&lt;String, Long&gt; serverMetrics = ResponseConverter.getScanMetrics(response);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    for (Entry&lt;String, Long&gt; entry : serverMetrics.entrySet()) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      this.scanMetrics.addToCounter(entry.getKey(), entry.getValue());<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>  private void close() {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    if (this.scannerId == -1L) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return;<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    try {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      incRPCcallsMetrics();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      ScanRequest request =<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          RequestConverter.buildScanRequest(this.scannerId, 0, true, this.scanMetrics != null);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      try {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        getStub().scan(null, request);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      } catch (ServiceException se) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        throw ProtobufUtil.getRemoteException(se);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    } catch (IOException e) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      LOG.warn("Ignore, probably already closed", e);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    this.scannerId = -1L;<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>  protected long openScanner() throws IOException {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    incRPCcallsMetrics();<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    ScanRequest request =<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      RequestConverter.buildScanRequest(<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        getLocation().getRegionInfo().getRegionName(),<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        this.scan, 0, false);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    try {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      ScanResponse response = getStub().scan(null, request);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      long id = response.getScannerId();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      if (logScannerActivity) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        LOG.info("Open scanner=" + id + " for scan=" + scan.toString()<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          + " on region " + getLocation().toString());<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      return id;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    } catch (ServiceException se) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>  protected Scan getScan() {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    return scan;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>  /**<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   * Call this when the next invocation of call should close the scanner<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   */<a name="line.408"></a>
-<span class="sourceLineNo">409</span>  public void setClose() {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    this.closed = true;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  /**<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return the HRegionInfo for the current region<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 HRegionInfo getHRegionInfo() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    if (!instantiated) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      return null;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    return getLocation().getRegionInfo();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  }<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>  /**<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * Get the number of rows that will be fetched on next<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   * @return the number of rows for caching<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   */<a name="line.427"></a>
-<span class="sourceLineNo">428</span>  public int getCaching() {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    return caching;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  @Override<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  public ClusterConnection getConnection() {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    return cConnection;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  }<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>   * Set the number of rows that will be fetched on next<a name="line.438"></a>
-<span class="sourceLineNo">439</span>   * @param caching the number of rows for caching<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   */<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  public void setCaching(int caching) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    this.caching = caching;<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>  public ScannerCallable getScannerCallableForReplica(int id) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    ScannerCallable s = new ScannerCallable(this.getConnection(), this.tableName,<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        this.getScan(), this.scanMetrics, controllerFactory, id);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    s.setCaching(this.caching);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    return s;<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>   * Should the client attempt to fetch more results from this region<a name="line.453"></a>
-<span class="sourceLineNo">454</span>   * @return True if the client should attempt to fetch more results, false otherwise.<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   */<a name="line.455"></a>
-<span class="sourceLineNo">456</span>  protected boolean getServerHasMoreResults() {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    assert serverHasMoreResultsContext;<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    return this.serverHasMoreResults;<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>  protected void setServerHasMoreResults(boolean serverHasMoreResults) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    this.serverHasMoreResults = serverHasMoreResults;<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>   * Did the server respond with information about whether more results might exist.<a name="line.466"></a>
-<span class="sourceLineNo">467</span>   * Not guaranteed to respond with older server versions<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * @return True if the server responded with information about more results.<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   */<a name="line.469"></a>
-<span class="sourceLineNo">470</span>  protected boolean hasMoreResultsContext() {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    return serverHasMoreResultsContext;<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>  protected void setHasMoreResultsContext(boolean serverHasMoreResultsContext) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    this.serverHasMoreResultsContext = serverHasMoreResultsContext;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>}<a name="line.477"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  @Override<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  public Result [] call(int callTimeout) throws IOException {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    if (Thread.interrupted()) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      throw new InterruptedIOException();<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    }<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    if (closed) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      if (scannerId != -1) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        close();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    } else {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      if (scannerId == -1L) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        this.scannerId = openScanner();<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      } else {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        Result [] rrs = null;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        ScanRequest request = null;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        // Reset the heartbeat flag prior to each RPC in case an exception is thrown by the server<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        setHeartbeatMessage(false);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        try {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          incRPCcallsMetrics();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>          request =<a name="line.208"></a>
+<span class="sourceLineNo">209</span>              RequestConverter.buildScanRequest(scannerId, caching, false, nextCallSeq,<a name="line.209"></a>
+<span class="sourceLineNo">210</span>                this.scanMetrics != null, renew);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          ScanResponse response = null;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          controller = controllerFactory.newController();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>          controller.setPriority(getTableName());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>          controller.setCallTimeout(callTimeout);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          try {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>            response = getStub().scan(controller, request);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>            // Client and RS maintain a nextCallSeq number during the scan. Every next() call<a name="line.217"></a>
+<span class="sourceLineNo">218</span>            // from client to server will increment this number in both sides. Client passes this<a name="line.218"></a>
+<span class="sourceLineNo">219</span>            // number along with the request and at RS side both the incoming nextCallSeq and its<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            // nextCallSeq will be matched. In case of a timeout this increment at the client side<a name="line.220"></a>
+<span class="sourceLineNo">221</span>            // should not happen. If at the server side fetching of next batch of data was over,<a name="line.221"></a>
+<span class="sourceLineNo">222</span>            // there will be mismatch in the nextCallSeq number. Server will throw<a name="line.222"></a>
+<span class="sourceLineNo">223</span>            // OutOfOrderScannerNextException and then client will reopen the scanner with startrow<a name="line.223"></a>
+<span class="sourceLineNo">224</span>            // as the last successfully retrieved row.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>            // See HBASE-5974<a name="line.225"></a>
+<span class="sourceLineNo">226</span>            nextCallSeq++;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            long timestamp = System.currentTimeMillis();<a name="line.227"></a>
+<span class="sourceLineNo">228</span>            setHeartbeatMessage(response.hasHeartbeatMessage() &amp;&amp; response.getHeartbeatMessage());<a name="line.228"></a>
+<span class="sourceLineNo">229</span>            // Results are returned via controller<a name="line.229"></a>
+<span class="sourceLineNo">230</span>            CellScanner cellScanner = controller.cellScanner();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>            rrs = ResponseConverter.getResults(cellScanner, response);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>            if (logScannerActivity) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>              long now = System.currentTimeMillis();<a name="line.233"></a>
+<span class="sourceLineNo">234</span>              if (now - timestamp &gt; logCutOffLatency) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>                int rows = rrs == null ? 0 : rrs.length;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>                LOG.info("Took " + (now-timestamp) + "ms to fetch "<a name="line.236"></a>
+<span class="sourceLineNo">237</span>                  + rows + " rows from scanner=" + scannerId);<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>            updateServerSideMetrics(response);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>            // moreResults is only used for the case where a filter exhausts all elements<a name="line.241"></a>
+<span class="sourceLineNo">242</span>            if (response.hasMoreResults() &amp;&amp; !response.getMoreResults()) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>              scannerId = -1L;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>              closed = true;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>              // Implied that no results were returned back, either.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>              return null;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>            }<a name="line.247"></a>
+<span class="sourceLineNo">248</span>            // moreResultsInRegion explicitly defines when a RS may choose to terminate a batch due<a name="line.248"></a>
+<span class="sourceLineNo">249</span>            // to size or quantity of results in the response.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>            if (response.hasMoreResultsInRegion()) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>              // Set what the RS said<a name="line.251"></a>
+<span class="sourceLineNo">252</span>              setHasMoreResultsContext(true);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>              setServerHasMoreResults(response.getMoreResultsInRegion());<a name="line.253"></a>
+<span class="sourceLineNo">254</span>            } else {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>              // Server didn't respond whether it has more results or not.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>              setHasMoreResultsContext(false);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>            }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          } catch (ServiceException se) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          updateResultsMetrics(rrs);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        } catch (IOException e) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          if (logScannerActivity) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>            LOG.info("Got exception making request " + TextFormat.shortDebugString(request)<a name="line.264"></a>
+<span class="sourceLineNo">265</span>              + " to " + getLocation(), e);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>          IOException ioe = e;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>          if (e instanceof RemoteException) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>            ioe = ((RemoteException) e).unwrapRemoteException();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          }<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          if (logScannerActivity &amp;&amp; (ioe instanceof UnknownScannerException)) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>            try {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>              HRegionLocation location =<a name="line.273"></a>
+<span class="sourceLineNo">274</span>                getConnection().relocateRegion(getTableName(), scan.getStartRow());<a name="line.274"></a>
+<span class="sourceLineNo">275</span>              LOG.info("Scanner=" + scannerId<a name="line.275"></a>
+<span class="sourceLineNo">276</span>                + " expired, current region location is " + location.toString());<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            } catch (Throwable t) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>              LOG.info("Failed to relocate region", t);<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>          // The below convertion of exceptions into DoNotRetryExceptions is a little strange.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          // Why not just have these exceptions implment DNRIOE you ask?  Well, usually we want<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          // ServerCallable#withRetries to just retry when it gets these exceptions.  In here in<a name="line.283"></a>
+<span class="sourceLineNo">284</span>          // a scan when doing a next in particular, we want to break out and get the scanner to<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          // reset itself up again.  Throwing a DNRIOE is how we signal this to happen (its ugly,<a name="line.285"></a>
+<span class="sourceLineNo">286</span>          // yeah and hard to follow and in need of a refactor).<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          if (ioe instanceof NotServingRegionException) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            // Throw a DNRE so that we break out of cycle of calling NSRE<a name="line.288"></a>
+<span class="sourceLineNo">289</span>            // when what we need is to open scanner against new location.<a name="line.289"></a>
+<span class="sourceLineNo">290</span>            // Attach NSRE to signal client that it needs to re-setup scanner.<a name="line.290"></a>
+<span class="sourceLineNo">291</span>            if (this.scanMetrics != null) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>              this.scanMetrics.countOfNSRE.incrementAndGet();<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>            throw new DoNotRetryIOException("Resetting the scanner -- see exception cause", ioe);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>          } else if (ioe instanceof RegionServerStoppedException) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>            // Throw a DNRE so that we break out of cycle of the retries and instead go and<a name="line.296"></a>
+<span class="sourceLineNo">297</span>            // open scanner against new location.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>            throw new DoNotRetryIOException("Resetting the scanner -- see exception cause", ioe);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>          } else {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>            // The outer layers will retry<a name="line.300"></a>
+<span class="sourceLineNo">301</span>            throw ioe;<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>        return rrs;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return null;<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>  /**<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * @return true when the most recent RPC response indicated that the response was a heartbeat<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   *         message. Heartbeat messages are sent back from the server when the processing of the<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   *         scan request exceeds a certain time threshold. Heartbeats allow the server to avoid<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   *         timeouts during long running scan operations.<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   */<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  protected boolean isHeartbeatMessage() {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    return heartbeatMessage;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  protected void setHeartbeatMessage(boolean heartbeatMessage) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    this.heartbeatMessage = heartbeatMessage;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>  }<a name="line.322"></a>
+<span class="sourceLineNo">323</span><a name="line.323"></a>
+<span class="sourceLineNo">324</span>  private void incRPCcallsMetrics() {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    if (this.scanMetrics == null) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      return;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    this.scanMetrics.countOfRPCcalls.incrementAndGet();<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    if (isRegionServerRemote) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.scanMetrics.countOfRemoteRPCcalls.incrementAndGet();<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><a name="line.333"></a>
+<span class="sourceLineNo">334</span>  protected void updateResultsMetrics(Result[] rrs) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    if (this.scanMetrics == null || rrs == null || rrs.length == 0) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      return;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    long resultSize = 0;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    for (Result rr : rrs) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      for (Cell cell : rr.rawCells()) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        resultSize += CellUtil.estimatedSerializedSizeOf(cell);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    this.scanMetrics.countOfBytesInResults.addAndGet(resultSize);<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    if (isRegionServerRemote) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      this.scanMetrics.countOfBytesInRemoteResults.addAndGet(resultSize);<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>  /**<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   * Use the scan metrics returned by the server to add to the identically named counters in the<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   * client side metrics. If a counter does not exist with the same name as the server side metric,<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   * the attempt to increase the counter will fail.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   * @param response<a name="line.354"></a>
+<span class="sourceLineNo">355</span>   */<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  private void updateServerSideMetrics(ScanResponse response) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    if (this.scanMetrics == null || response == null || !response.hasScanMetrics()) return;<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>    Map&lt;String, Long&gt; serverMetrics = ResponseConverter.getScanMetrics(response);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    for (Entry&lt;String, Long&gt; entry : serverMetrics.entrySet()) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      this.scanMetrics.addToCounter(entry.getKey(), entry.getValue());<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>  private void close() {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    if (this.scannerId == -1L) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      return;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    try {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      incRPCcallsMetrics();<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      ScanRequest request =<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          RequestConverter.buildScanRequest(this.scannerId, 0, true, this.scanMetrics != null);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      try {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        getStub().scan(null, request);<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      } catch (ServiceException se) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        throw ProtobufUtil.getRemoteException(se);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      }<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    } catch (IOException e) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      LOG.warn("Ignore, probably already closed", e);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    }<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    this.scannerId = -1L;<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>  protected long openScanner() throws IOException {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    incRPCcallsMetrics();<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    ScanRequest request =<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      RequestConverter.buildScanRequest(<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        getLocation().getRegionInfo().getRegionName(),<a name="line.388"></a>
+<span class="sourceLineNo">389</span>        this.scan, 0, false);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    try {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      ScanResponse response = getStub().scan(null, request);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      long id = response.getScannerId();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      if (logScannerActivity) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        LOG.info("Open scanner=" + id + " for scan=" + scan.toString()<a name="line.394"></a>
+<span class="sourceLineNo">395</span>          + " on region " + getLocation().toString());<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      }<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      return id;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    } catch (ServiceException se) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>  protected Scan getScan() {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    return scan;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>  /**<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   * Call this when the next invocation of call should close the scanner<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   */<a name="line.409"></a>
+<span class="sourceLineNo">410</span>  public void setClose() {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    this.closed = true;<a name="line.411"></a>
+<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * Indicate whether we make a call only to renew the lease, but without affected the scanner in<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * any other way.<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * @param val true if only the lease should be renewed<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   */<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  public void setRenew(boolean val) {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    this.renew = val;<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>  /**<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * @return the HRegionInfo for the current region<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   */<a name="line.425"></a>
+<span class="sourceLineNo">426</span>  @Override<a name="line.426"></a>
+<span class="sourceLineNo">427</span>  public HRegionInfo getHRegionInfo() {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    if (!instantiated) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      return null;<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    return getLocation().getRegionInfo();<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">434</span>  /**<a name="line.434"></a>
+<span class="sourceLineNo">435</span>   * Get the number of rows that will be fetched on next<a name="line.435"></a>
+<span class="sourceLineNo">436</span>   * @return the number of rows for caching<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   */<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  public int getCaching() {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    return caching;<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 ClusterConnection getConnection() {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    return cConnection;<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>  /**<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   * Set the number of rows that will be fetched on next<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   * @param caching the number of rows for caching<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   */<a name="line.450"></a>
+<span class="sourceLineNo">451</span>  public void setCaching(int caching) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    this.caching = caching;<a name="line.452"></a>
+<span class="sourceLineNo">453</span>  }<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  public ScannerCallable getScannerCallableForReplica(int id) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    ScannerCallable s = new ScannerCallable(this.getConnection(), this.tableName,<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        this.getScan(), this.scanMetrics, controllerFactory, id);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    s.setCaching(this.caching);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    return s;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>  }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>  /**<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * Should the client attempt to fetch more results from this region<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   * @return True if the client should attempt to fetch more results, false otherwise.<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
+<span class="sourceLineNo">466</span>  protected boolean getServerHasMoreResults() {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>    assert serverHasMoreResultsContext;<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    return this.serverHasMoreResults;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
+<span class="sourceLineNo">470</span><a name="line.470"></a>
+<span class="sourceLineNo">471</span>  protected void setServerHasMoreResults(boolean serverHasMoreResults) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    this.serverHasMoreResults = serverHasMoreResults;<a name="line.472"></a>
+<span class="sourceLineNo">473</span>  }<a name="line.473"></a>
+<span class="sourceLineNo">474</span><a name="line.474"></a>
+<span class="sourceLineNo">475</span>  /**<a name="line.475"></a>
+<span class="sourceLineNo">476</span>   * Did the server respond with information about whether more results might exist.<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * Not guaranteed to respond with older server versions<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * @return True if the server responded with information about more results.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   */<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  protected boolean hasMoreResultsContext() {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return serverHasMoreResultsContext;<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>  protected void setHasMoreResultsContext(boolean serverHasMoreResultsContext) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    this.serverHasMoreResultsContext = serverHasMoreResultsContext;<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>
 
 
 


[43/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/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 eaf019a..232fca7 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -283,12 +283,12 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">CacheConfig.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">BlockType</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="strong">Cacheable.MemoryType</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="strong">HFileBlock.Writer.State</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="strong">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="strong">CacheConfig.ExternalBlockCaches</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">BlockPriority</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">BlockType.BlockCategory</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="strong">BlockPriority</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html b/devapidocs/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html
index e19e546..ef9829c 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html
@@ -117,6 +117,10 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#serverWrapper">serverWrapper</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSource.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerSource</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#source">source</a></strong></code>&nbsp;</td>
 </tr>
@@ -182,30 +186,34 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#exception(java.lang.Throwable)">exception</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;throwable)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#getHBaseServerWrapper()">getHBaseServerWrapper</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSource.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerSource</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#getMetricsSource()">getMetricsSource</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#processedCall(int)">processedCall</a></strong>(int&nbsp;processingTime)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#receivedBytes(int)">receivedBytes</a></strong>(int&nbsp;count)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#receivedRequest(long)">receivedRequest</a></strong>(long&nbsp;count)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#sentBytes(long)">sentBytes</a></strong>(long&nbsp;count)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#sentResponse(long)">sentResponse</a></strong>(long&nbsp;count)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#totalCall(int)">totalCall</a></strong>(int&nbsp;totalTime)</code>&nbsp;</td>
 </tr>
@@ -234,12 +242,21 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <a name="source">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>source</h4>
 <pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSource.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerSource</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.34">source</a></pre>
 </li>
 </ul>
+<a name="serverWrapper">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>serverWrapper</h4>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.35">serverWrapper</a></pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -254,7 +271,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MetricsHBaseServer</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.36">MetricsHBaseServer</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;serverName,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.37">MetricsHBaseServer</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;serverName,
                   <a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;wrapper)</pre>
 </li>
 </ul>
@@ -272,7 +289,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>authorizationSuccess</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.41">authorizationSuccess</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.43">authorizationSuccess</a>()</pre>
 </li>
 </ul>
 <a name="authorizationFailure()">
@@ -281,7 +298,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>authorizationFailure</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.45">authorizationFailure</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.47">authorizationFailure</a>()</pre>
 </li>
 </ul>
 <a name="authenticationFailure()">
@@ -290,7 +307,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>authenticationFailure</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.49">authenticationFailure</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.51">authenticationFailure</a>()</pre>
 </li>
 </ul>
 <a name="authenticationSuccess()">
@@ -299,7 +316,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>authenticationSuccess</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.53">authenticationSuccess</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.55">authenticationSuccess</a>()</pre>
 </li>
 </ul>
 <a name="authenticationFallback()">
@@ -308,7 +325,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>authenticationFallback</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.57">authenticationFallback</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.59">authenticationFallback</a>()</pre>
 </li>
 </ul>
 <a name="sentBytes(long)">
@@ -317,7 +334,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>sentBytes</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.61">sentBytes</a>(long&nbsp;count)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.63">sentBytes</a>(long&nbsp;count)</pre>
 </li>
 </ul>
 <a name="receivedBytes(int)">
@@ -326,7 +343,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>receivedBytes</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.65">receivedBytes</a>(int&nbsp;count)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.67">receivedBytes</a>(int&nbsp;count)</pre>
 </li>
 </ul>
 <a name="sentResponse(long)">
@@ -335,7 +352,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>sentResponse</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.69">sentResponse</a>(long&nbsp;count)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.71">sentResponse</a>(long&nbsp;count)</pre>
 </li>
 </ul>
 <a name="receivedRequest(long)">
@@ -344,7 +361,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>receivedRequest</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.71">receivedRequest</a>(long&nbsp;count)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.73">receivedRequest</a>(long&nbsp;count)</pre>
 </li>
 </ul>
 <a name="dequeuedCall(int)">
@@ -353,7 +370,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>dequeuedCall</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.73">dequeuedCall</a>(int&nbsp;qTime)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.75">dequeuedCall</a>(int&nbsp;qTime)</pre>
 </li>
 </ul>
 <a name="processedCall(int)">
@@ -362,7 +379,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>processedCall</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.77">processedCall</a>(int&nbsp;processingTime)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.79">processedCall</a>(int&nbsp;processingTime)</pre>
 </li>
 </ul>
 <a name="totalCall(int)">
@@ -371,7 +388,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>totalCall</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.81">totalCall</a>(int&nbsp;totalTime)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.83">totalCall</a>(int&nbsp;totalTime)</pre>
 </li>
 </ul>
 <a name="exception(java.lang.Throwable)">
@@ -380,16 +397,25 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>exception</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.85">exception</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;throwable)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.87">exception</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;throwable)</pre>
 </li>
 </ul>
 <a name="getMetricsSource()">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>getMetricsSource</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSource.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerSource</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.115">getMetricsSource</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSource.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerSource</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.117">getMetricsSource</a>()</pre>
+</li>
+</ul>
+<a name="getHBaseServerWrapper()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getHBaseServerWrapper</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#line.121">getHBaseServerWrapper</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/ipc/class-use/MetricsHBaseServerWrapper.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/class-use/MetricsHBaseServerWrapper.html b/devapidocs/org/apache/hadoop/hbase/ipc/class-use/MetricsHBaseServerWrapper.html
index 08ed573..2d350f3 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/class-use/MetricsHBaseServerWrapper.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/class-use/MetricsHBaseServerWrapper.html
@@ -80,6 +80,10 @@
 <div class="block">Tools to help define network clients and servers.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.tmpl.regionserver">org.apache.hadoop.hbase.tmpl.regionserver</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -111,11 +115,28 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a></code></td>
+<td class="colLast"><span class="strong">MetricsHBaseServer.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#serverWrapper">serverWrapper</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a></code></td>
 <td class="colLast"><span class="strong">MetricsHBaseServerSourceImpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceImpl.html#wrapper">wrapper</a></strong></code>&nbsp;</td>
 </tr>
 </tbody>
 </table>
 <table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a> that return <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a></code></td>
+<td class="colLast"><span class="strong">MetricsHBaseServer.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#getHBaseServerWrapper()">getHBaseServerWrapper</a></strong>()</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
 <caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
@@ -159,6 +180,77 @@
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.tmpl.regionserver">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a> in <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/package-summary.html">org.apache.hadoop.hbase.tmpl.regionserver</a></h3>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/package-summary.html">org.apache.hadoop.hbase.tmpl.regionserver</a> declared as <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a></code></td>
+<td class="colLast"><span class="strong">ServerMetricsTmpl.ImplData.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#m_mServerWrap">m_mServerWrap</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a></code></td>
+<td class="colLast"><span class="strong">ServerMetricsTmplImpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#mServerWrap">mServerWrap</a></strong></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/package-summary.html">org.apache.hadoop.hbase.tmpl.regionserver</a> that return <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a></code></td>
+<td class="colLast"><span class="strong">ServerMetricsTmpl.ImplData.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#getMServerWrap()">getMServerWrap</a></strong>()</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/package-summary.html">org.apache.hadoop.hbase.tmpl.regionserver</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="strong">ServerMetricsTmplImpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#__jamon_innerUnit__queueStats(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper,%20org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">__jamon_innerUnit__queueStats</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+                                                          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap,
+                                                          <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>org.jamon.Renderer</code></td>
+<td class="colLast"><span class="strong">ServerMetricsTmpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#makeRenderer(org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper,%20org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">makeRenderer</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap,
+                        <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="strong">ServerMetricsTmpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#render(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper,%20org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">render</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+            <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap,
+            <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="strong">ServerMetricsTmpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#renderNoFlush(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper,%20org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">renderNoFlush</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+                          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap,
+                          <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="strong">ServerMetricsTmpl.ImplData.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#setMServerWrap(org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">setMServerWrap</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/ipc/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-use.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-use.html
index e4be0ed..a4fb1e8 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-use.html
@@ -118,6 +118,10 @@
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.security">org.apache.hadoop.hbase.security</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.tmpl.regionserver">org.apache.hadoop.hbase.tmpl.regionserver</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -567,6 +571,21 @@
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.tmpl.regionserver">
+<!--   -->
+</a>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
+<caption><span>Classes in <a href="../../../../../org/apache/hadoop/hbase/ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a> used by <a href="../../../../../org/apache/hadoop/hbase/tmpl/regionserver/package-summary.html">org.apache.hadoop.hbase.tmpl.regionserver</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/ipc/class-use/MetricsHBaseServerWrapper.html#org.apache.hadoop.hbase.tmpl.regionserver">MetricsHBaseServerWrapper</a>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 </ul>
 </div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/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 cedb005..cc11b08 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -267,10 +267,10 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">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="strong">RowCounter.RowCounterMapper.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">CellCounter.CellCounterMapper.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="strong">SyncTable.SyncMapper.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">TableSplit.Version</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">CellCounter.CellCounterMapper.Counters</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/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 def6fa4..0f7138f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -290,11 +290,11 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">SplitLogManager.TerminationStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">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="strong">RegionState.State</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="strong">SplitLogManager.ResubmitDirective</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">SplitLogManager.TerminationStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">RegionState.State</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/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 cb18608..002346d 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -354,14 +354,14 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HConstants.OperationStatusCode</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="strong">HealthChecker.HealthCheckerExitStatus</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="strong">KeepDeletedCells</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.Modify.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HConstants.Modify</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="strong">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="strong">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="strong">CompatibilitySingletonFactory.SingletonStorage</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="strong">Coprocessor.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.Modify.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HConstants.Modify</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="strong">HConstants.OperationStatusCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="strong">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="strong">KeepDeletedCells</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="strong">HealthChecker.HealthCheckerExitStatus</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/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 b9c9db4..249d826 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -175,8 +175,8 @@
 <ul>
 <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="strong">ThrottleType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">ThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">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="strong">QuotaScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">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="strong">QuotaType</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
index a81fa38..8d25ba5 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
@@ -1801,7 +1801,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>execRegionServerService</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2815">execRegionServerService</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2822">execRegionServerService</a>(com.google.protobuf.RpcController&nbsp;controller,
                                                                                                          org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest&nbsp;request)
                                                                                                            throws com.google.protobuf.ServiceException</pre>
 <dl>
@@ -1817,7 +1817,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockListLast">
 <li class="blockList">
 <h4>updateConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2821">updateConfiguration</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2828">updateConfiguration</a>(com.google.protobuf.RpcController&nbsp;controller,
                                                                                                      org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest&nbsp;request)
                                                                                                        throws com.google.protobuf.ServiceException</pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/MetricsRegionServerWrapper.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/MetricsRegionServerWrapper.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/MetricsRegionServerWrapper.html
index 6e673a3..4c40c99 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/MetricsRegionServerWrapper.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/MetricsRegionServerWrapper.html
@@ -234,8 +234,9 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="strong">ServerMetricsTmplImpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#__jamon_innerUnit__queueStats(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">__jamon_innerUnit__queueStats</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
-                                                          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)</code>&nbsp;</td>
+<td class="colLast"><span class="strong">ServerMetricsTmplImpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#__jamon_innerUnit__queueStats(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper,%20org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">__jamon_innerUnit__queueStats</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+                                                          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap,
+                                                          <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
@@ -254,17 +255,20 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>org.jamon.Renderer</code></td>
-<td class="colLast"><span class="strong">ServerMetricsTmpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#makeRenderer(org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">makeRenderer</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)</code>&nbsp;</td>
+<td class="colLast"><span class="strong">ServerMetricsTmpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#makeRenderer(org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper,%20org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">makeRenderer</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap,
+                        <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="strong">ServerMetricsTmpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#render(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">render</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
-            <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)</code>&nbsp;</td>
+<td class="colLast"><span class="strong">ServerMetricsTmpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#render(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper,%20org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">render</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+            <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap,
+            <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="strong">ServerMetricsTmpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#renderNoFlush(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">renderNoFlush</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
-                          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)</code>&nbsp;</td>
+<td class="colLast"><span class="strong">ServerMetricsTmpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#renderNoFlush(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper,%20org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">renderNoFlush</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+                          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap,
+                          <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/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 011051a..ffcfb65 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -599,23 +599,23 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScannerContext.NextState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionOpeningState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">RegionOpeningState</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="strong">Region.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScannerContext.LimitScope</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="strong">DefaultHeapMemoryTuner.StepDirection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">StoreScanner.StoreScannerCompactionRace</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DeleteTracker.DeleteResult</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="strong">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">Region.FlushResult.Result</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="strong">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScannerContext.NextState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">FlushType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.RegionMergeTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">RegionMergeTransaction.RegionMergeTransactionPhase</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="strong">DefaultHeapMemoryTuner.StepDirection</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="strong">SplitLogWorker.TaskExecutor.Status</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitTransaction.SplitTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">SplitTransaction.SplitTransactionPhase</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="strong">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScannerContext.LimitScope</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="strong">SplitLogWorker.TaskExecutor.Status</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DeleteTracker.DeleteCompare.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DeleteTracker.DeleteCompare</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">Region.FlushResult.Result</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">Region.Operation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScanQueryMatcher.MatchCode</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="strong">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitTransaction.SplitTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">SplitTransaction.SplitTransactionPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DeleteTracker.DeleteResult</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionOpeningState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">RegionOpeningState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.RegionMergeTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">RegionMergeTransaction.RegionMergeTransactionPhase</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="strong">ScanType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html
index 3572a08..e534daa 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html
@@ -340,17 +340,23 @@ implements org.apache.hadoop.io.Writable, <a href="../../../../../../org/apache/
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#setCompressionContext(org.apache.hadoop.hbase.regionserver.wal.CompressionContext)">setCompressionContext</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a>&nbsp;compressionContext)</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#setCells(java.util.ArrayList)">setCells</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells)</code>
+<div class="block">This is not thread safe.</div>
+</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#setCompressionContext(org.apache.hadoop.hbase.regionserver.wal.CompressionContext)">setCompressionContext</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a>&nbsp;compressionContext)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#size()">size</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#toString()">toString</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#write(java.io.DataOutput)">write</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out)</code>&nbsp;</td>
 </tr>
@@ -464,7 +470,7 @@ implements org.apache.hadoop.io.Writable, <a href="../../../../../../org/apache/
 <ul class="blockList">
 <li class="blockList">
 <h4>cells</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.102">cells</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.102">cells</a></pre>
 </li>
 </ul>
 <a name="EMPTY_WALEDIT">
@@ -615,13 +621,27 @@ private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Navigab
 <pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.169">getCells</a>()</pre>
 </li>
 </ul>
+<a name="setCells(java.util.ArrayList)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setCells</h4>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
+public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.181">setCells</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells)</pre>
+<div class="block">This is not thread safe.
+ This will change the WALEdit and shouldn't be used unless you are sure that nothing
+ else depends on the contents being immutable.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>cells</code> - the list of cells that this WALEdit now contains.</dd></dl>
+</li>
+</ul>
 <a name="getAndRemoveScopes()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getAndRemoveScopes</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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/regionserver/wal/WALEdit.html#line.173">getAndRemoveScopes</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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/regionserver/wal/WALEdit.html#line.185">getAndRemoveScopes</a>()</pre>
 </li>
 </ul>
 <a name="readFields(java.io.DataInput)">
@@ -630,7 +650,7 @@ private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Navigab
 <ul class="blockList">
 <li class="blockList">
 <h4>readFields</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.180">readFields</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.192">readFields</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in)
                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -645,7 +665,7 @@ private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Navigab
 <ul class="blockList">
 <li class="blockList">
 <h4>write</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.216">write</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.228">write</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out)
            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -660,7 +680,7 @@ private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Navigab
 <ul class="blockList">
 <li class="blockList">
 <h4>readFromCells</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.247">readFromCells</a>(<a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.Decoder.html" title="interface in org.apache.hadoop.hbase.codec">Codec.Decoder</a>&nbsp;cellDecoder,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.259">readFromCells</a>(<a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.Decoder.html" title="interface in org.apache.hadoop.hbase.codec">Codec.Decoder</a>&nbsp;cellDecoder,
                 int&nbsp;expectedCount)
                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Reads WALEdit from cells.</div>
@@ -676,7 +696,7 @@ private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Navigab
 <ul class="blockList">
 <li class="blockList">
 <h4>heapSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.257">heapSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.269">heapSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html#heapSize()">heapSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a></code></dd>
@@ -690,7 +710,7 @@ private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Navigab
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.271">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.283">toString</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -703,7 +723,7 @@ private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Navigab
 <ul class="blockList">
 <li class="blockList">
 <h4>createFlushWALEdit</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.286">createFlushWALEdit</a>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri,
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.298">createFlushWALEdit</a>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri,
                          org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor&nbsp;f)</pre>
 </li>
 </ul>
@@ -713,7 +733,7 @@ private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Navigab
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushDescriptor</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.292">getFlushDescriptor</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.304">getFlushDescriptor</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
                                                                                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -725,7 +745,7 @@ private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Navigab
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionEventWALEdit</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.299">createRegionEventWALEdit</a>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri,
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.311">createRegionEventWALEdit</a>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri,
                                org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor&nbsp;regionEventDesc)</pre>
 </li>
 </ul>
@@ -735,7 +755,7 @@ private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Navigab
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionEventDescriptor</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.306">getRegionEventDescriptor</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.318">getRegionEventDescriptor</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
                                                                                                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -747,7 +767,7 @@ private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Navigab
 <ul class="blockList">
 <li class="blockList">
 <h4>createCompaction</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.318">createCompaction</a>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri,
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.330">createCompaction</a>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri,
                        org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor&nbsp;c)</pre>
 <div class="block">Create a compaction WALEdit</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>c</code> - </dd>
@@ -760,7 +780,7 @@ private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Navigab
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowForRegion</h4>
-<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.325">getRowForRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri)</pre>
+<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.337">getRowForRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri)</pre>
 </li>
 </ul>
 <a name="getCompaction(org.apache.hadoop.hbase.Cell)">
@@ -769,7 +789,7 @@ private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Navigab
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompaction</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.340">getCompaction</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)
+<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.352">getCompaction</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)
                                                                                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Deserialized and returns a CompactionDescriptor is the KeyValue contains one.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>kv</code> - the key value</dd>
@@ -784,7 +804,7 @@ private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Navigab
 <ul class="blockList">
 <li class="blockList">
 <h4>createBulkLoadEvent</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.354">createBulkLoadEvent</a>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri,
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.366">createBulkLoadEvent</a>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri,
                           org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor&nbsp;bulkLoadDescriptor)</pre>
 <div class="block">Create a bulk loader WALEdit</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>hri</code> - The HRegionInfo for the region in which we are bulk loading</dd><dd><code>bulkLoadDescriptor</code> - The descriptor for the Bulk Loader</dd>
@@ -797,7 +817,7 @@ private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Navigab
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getBulkLoadDescriptor</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.369">getBulkLoadDescriptor</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#line.381">getBulkLoadDescriptor</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
                                                                                                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Deserialized and returns a BulkLoadDescriptor from the passed in Cell</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>cell</code> - the key value</dd>


[17/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html
index f3aed1b..0597160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html
@@ -1513,810 +1513,816 @@
 <span class="sourceLineNo">1505</span>      if (maxSeqIdInStores == null || maxSeqIdInStores.isEmpty()) {<a name="line.1505"></a>
 <span class="sourceLineNo">1506</span>        return;<a name="line.1506"></a>
 <span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        if (!CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          // or the master was crashed before and we can not get the information.<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>          if (maxSeqId != null &amp;&amp; maxSeqId.longValue() &gt;= logEntry.getKey().getLogSeqNum()) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>            skippedCells.add(cell);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>          }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      }<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (!skippedCells.isEmpty()) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        logEntry.getEdit().getCells().removeAll(skippedCells);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1508</span>      // Create the array list for the cells that aren't filtered.<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // We make the assumption that most cells will be kept.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      ArrayList&lt;Cell&gt; keptCells = new ArrayList&lt;Cell&gt;(logEntry.getEdit().getCells().size());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>          keptCells.add(cell);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        } else {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          // or the master was crashed before and we can not get the information.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>          if (maxSeqId == null || maxSeqId.longValue() &lt; logEntry.getKey().getLogSeqNum()) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>            keptCells.add(cell);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      }<a name="line.1523"></a>
 <span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    @Override<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (entries.isEmpty()) {<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        return;<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      WriterAndPath wap = null;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      long startTime = System.nanoTime();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      try {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        int editsCount = 0;<a name="line.1537"></a>
+<span class="sourceLineNo">1525</span>      // Anything in the keptCells array list is still live.<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // So rather than removing the cells from the array list<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      // which would be an O(n^2) operation, we just replace the list<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      logEntry.getEdit().setCells(keptCells);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    @Override<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      if (entries.isEmpty()) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>        return;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      }<a name="line.1537"></a>
 <span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        for (Entry logEntry : entries) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          if (wap == null) {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>            wap = getWriterAndPath(logEntry);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>            if (wap == null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>              if (LOG.isDebugEnabled()) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>              }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>              return;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          filterCellByStore(logEntry);<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            wap.w.append(logEntry);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            editsCount++;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          } else {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>            wap.incrementSkippedEdits(1);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>          }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        // Pass along summary statistics<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        wap.incrementEdits(editsCount);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      } catch (IOException e) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          e = e instanceof RemoteException ?<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>        throw e;<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    }<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span><a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    /**<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>     */<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    @Override<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      synchronized (writers) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>        }<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      return ret;<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span><a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    @Override<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    public int getNumberOfRecoveredRegions() {<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      return writers.size();<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>  }<a name="line.1587"></a>
+<span class="sourceLineNo">1539</span>      WriterAndPath wap = null;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      long startTime = System.nanoTime();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      try {<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        int editsCount = 0;<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span><a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>        for (Entry logEntry : entries) {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>          if (wap == null) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>            wap = getWriterAndPath(logEntry);<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>            if (wap == null) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>              if (LOG.isDebugEnabled()) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>              }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>              return;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>            }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          filterCellByStore(logEntry);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            wap.w.append(logEntry);<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            editsCount++;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          } else {<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>            wap.incrementSkippedEdits(1);<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>          }<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        // Pass along summary statistics<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        wap.incrementEdits(editsCount);<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      } catch (IOException e) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>          e = e instanceof RemoteException ?<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>        throw e;<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    }<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span><a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>    /**<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>     */<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    @Override<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      synchronized (writers) {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      return ret;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    }<a name="line.1587"></a>
 <span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  /**<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>   */<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  public abstract static class SinkWriter {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    /* Count of edits written to this path */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    long editsWritten = 0;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    /* Count of edits skipped to this path */<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    long editsSkipped = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    /* Number of nanos spent writing to this log */<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    long nanosSpent = 0;<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    void incrementEdits(int edits) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      editsWritten += edits;<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    void incrementSkippedEdits(int skipped) {<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      editsSkipped += skipped;<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span><a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    void incrementNanoTime(long nanos) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      nanosSpent += nanos;<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    }<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  }<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span><a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>  /**<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * data written to this output.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   */<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    final Path p;<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    final Writer w;<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      this.p = p;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      this.w = w;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>  }<a name="line.1625"></a>
+<span class="sourceLineNo">1589</span>    @Override<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    public int getNumberOfRecoveredRegions() {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      return writers.size();<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  }<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span><a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>  /**<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>   */<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>  public abstract static class SinkWriter {<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    /* Count of edits written to this path */<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    long editsWritten = 0;<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    /* Count of edits skipped to this path */<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    long editsSkipped = 0;<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    /* Number of nanos spent writing to this log */<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    long nanosSpent = 0;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span><a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    void incrementEdits(int edits) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      editsWritten += edits;<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>    void incrementSkippedEdits(int skipped) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      editsSkipped += skipped;<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span><a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    void incrementNanoTime(long nanos) {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      nanosSpent += nanos;<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span><a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>  /**<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>   * data written to this output.<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>   */<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    final Path p;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    final Writer w;<a name="line.1625"></a>
 <span class="sourceLineNo">1626</span><a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>  /**<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>   */<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    private static final String KEY_DELIMITER = "#";<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    private long waitRegionOnlineTimeOut;<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    // online encoded region name -&gt; region location map<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span><a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>    /**<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>     * Map key -&gt; value layout<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>     */<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span><a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        int numWriters) {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      super(controller, entryBuffers, numWriters);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      this.waitRegionOnlineTimeOut =<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>        entryBuffers, numWriters);<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span><a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>    @Override<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      if (entries.isEmpty()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        return;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span><a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      // check if current region in a disabling or disabled table<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        // need fall back to old way<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>        // store regions we have recovered so far<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        return;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      }<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span><a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      // group entries by region servers<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      groupEditsByServer(entries);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span><a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      // process workitems<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      String maxLocKey = null;<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      int maxSize = 0;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>            maxSize = curQueue.size();<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>            maxQueue = curQueue;<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>            maxLocKey = entry.getKey();<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>          }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        if (maxSize &lt; minBatchSize<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>          // buffer more to process<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>          return;<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        } else if (maxSize &gt; 0) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>        }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span><a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>      if (maxSize &gt; 0) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>        recoveredRegions.add(encodedRegionName);<a name="line.1721"></a>
+<span class="sourceLineNo">1627</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      this.p = p;<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      this.w = w;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>    }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>  }<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span><a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>  /**<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>   */<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    private static final String KEY_DELIMITER = "#";<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>    private long waitRegionOnlineTimeOut;<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    // online encoded region name -&gt; region location map<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span><a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>    /**<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>     * Map key -&gt; value layout<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>     */<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span><a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span><a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>        int numWriters) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      super(controller, entryBuffers, numWriters);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      this.waitRegionOnlineTimeOut =<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>        entryBuffers, numWriters);<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    @Override<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (entries.isEmpty()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        return;<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      }<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span><a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      // check if current region in a disabling or disabled table<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // need fall back to old way<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>        // store regions we have recovered so far<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        return;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span><a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      // group entries by region servers<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      groupEditsByServer(entries);<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span><a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      // process workitems<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      String maxLocKey = null;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>      int maxSize = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>            maxSize = curQueue.size();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>            maxQueue = curQueue;<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>            maxLocKey = entry.getKey();<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>          }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>        }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        if (maxSize &lt; minBatchSize<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>          // buffer more to process<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>          return;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        } else if (maxSize &gt; 0) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span><a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      if (maxSize &gt; 0) {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
 <span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
 <span class="sourceLineNo">1724</span><a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    /**<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>     * Helper function to group WALEntries to individual region servers<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>     * @throws IOException<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>     */<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      for (Entry entry : entries) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>        WALEdit edit = entry.getEdit();<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        TableName table = entry.getKey().getTablename();<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>        // clear scopes which isn't needed for recovery<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>        entry.getKey().setScopes(null);<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>        // skip edits of non-existent tables<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>          this.skippedEdits.incrementAndGet();<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>          continue;<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        }<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span><a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        boolean needSkip = false;<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        HRegionLocation loc = null;<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        String locKey = null;<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span><a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>        for (Cell cell : cells) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>          boolean isCompactionEntry = false;<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>              try {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>                  .toByteArray());<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>                row = regionName[1]; // startKey of the region<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>                isCompactionEntry = true;<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>              } catch (Exception ex) {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>                skippedCells.add(cell);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>                continue;<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>              }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>            } else {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>              skippedCells.add(cell);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>              continue;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>            }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>          try {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>            loc =<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>                  encodeRegionNameStr);<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            // skip replaying the compaction if the region is gone<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>                  + encodeRegionNameStr);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>              needSkip = true;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>            }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>          } catch (TableNotFoundException ex) {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>            // table has been deleted so skip edits of the table<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>                + encodeRegionNameStr);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>            if (nonExistentTables == null) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>            }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            nonExistentTables.add(table);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>            this.skippedEdits.incrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>            needSkip = true;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>            break;<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          }<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span><a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          cachedLastFlushedSequenceId =<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          if (cachedLastFlushedSequenceId != null<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            // skip the whole WAL entry<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            this.skippedEdits.incrementAndGet();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            needSkip = true;<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            break;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } else {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            if (maxStoreSequenceIds == null) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>              maxStoreSequenceIds =<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            }<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            if (maxStoreSequenceIds != null) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>                skippedCells.add(cell);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                continue;<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>              }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>            }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>          }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        }<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>        // skip the edit<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        if (loc == null || needSkip) continue;<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>        if (!skippedCells.isEmpty()) {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          cells.removeAll(skippedCells);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        synchronized (serverToBufferQueueMap) {<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>          if (queue == null) {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>            queue =<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>          }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>        }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        // store regions we have recovered so far<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      }<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    }<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span><a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    /**<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>     * destination region is online for replay.<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>     * @throws IOException<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>     */<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>      // fetch location from cache<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      if(loc != null) return loc;<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      if (loc == null) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>            + " of table:" + table);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      // check if current row moves to a different region due to region merge/split<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        // originalEncodedRegionName should have already flushed<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      }<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span><a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      Long lastFlushedSequenceId = -1l;<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      if (!isRecovering.get()) {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>        // been moved to somewhere before hosting RS fails<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>            + " because it's not in recovering.");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      } else {<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>        Long cachedLastFlushedSequenceId =<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span><a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        // update the value for the region<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>        RegionStoreSequenceIds ids =<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>              loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        if (ids != null) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>          }<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        }<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        if (cachedLastFlushedSequenceId == null<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>            || lastFlushedSequenceId &gt; cachedLastFlushedSequenceId) {<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>          lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), lastFlushedSequenceId);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        }<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      }<a name="line.1903"></a>
+<span class="sourceLineNo">1725</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>        recoveredRegions.add(encodedRegionName);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    }<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span><a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>    /**<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>     * Helper function to group WALEntries to individual region servers<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>     * @throws IOException<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>     */<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      for (Entry entry : entries) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        WALEdit edit = entry.getEdit();<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>        TableName table = entry.getKey().getTablename();<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        // clear scopes which isn't needed for recovery<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        entry.getKey().setScopes(null);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // skip edits of non-existent tables<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>          this.skippedEdits.incrementAndGet();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>          continue;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        boolean needSkip = false;<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        HRegionLocation loc = null;<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        String locKey = null;<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span><a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        for (Cell cell : cells) {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>          boolean isCompactionEntry = false;<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>              try {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>                  .toByteArray());<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>                row = regionName[1]; // startKey of the region<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>                isCompactionEntry = true;<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>              } catch (Exception ex) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>                skippedCells.add(cell);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>                continue;<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>              }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            } else {<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>              skippedCells.add(cell);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>              continue;<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>            }<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          }<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span><a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          try {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>            loc =<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>                  encodeRegionNameStr);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>            // skip replaying the compaction if the region is gone<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>                  + encodeRegionNameStr);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>              needSkip = true;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>            }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>          } catch (TableNotFoundException ex) {<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>            // table has been deleted so skip edits of the table<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>                + encodeRegionNameStr);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>            if (nonExistentTables == null) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>            }<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>            nonExistentTables.add(table);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>            this.skippedEdits.incrementAndGet();<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>            needSkip = true;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>            break;<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          }<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span><a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>          cachedLastFlushedSequenceId =<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>          if (cachedLastFlushedSequenceId != null<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            // skip the whole WAL entry<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>            this.skippedEdits.incrementAndGet();<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>            needSkip = true;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            break;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>          } else {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>            if (maxStoreSequenceIds == null) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>              maxStoreSequenceIds =<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>            }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            if (maxStoreSequenceIds != null) {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>                skippedCells.add(cell);<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                continue;<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              }<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>            }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>          }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        }<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>        // skip the edit<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        if (loc == null || needSkip) continue;<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span><a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (!skippedCells.isEmpty()) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          cells.removeAll(skippedCells);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>        synchronized (serverToBufferQueueMap) {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>          if (queue == null) {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            queue =<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>        }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>        // store regions we have recovered so far<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span><a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    /**<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>     * destination region is online for replay.<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>     * @throws IOException<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>     */<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      // fetch location from cache<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      if(loc != null) return loc;<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      if (loc == null) {<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>            + " of table:" + table);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      }<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      // check if current row moves to a different region due to region merge/split<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        // originalEncodedRegionName should have already flushed<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      Long lastFlushedSequenceId = -1l;<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      if (!isRecovering.get()) {<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>        // been moved to somewhere before hosting RS fails<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>            + " because it's not in recovering.");<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      } else {<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        Long cachedLastFlushedSequenceId =<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        // update the value for the region<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>        RegionStoreSequenceIds ids =<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>              loc.getRegionInfo().getEncodedName());<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>        if (ids != null) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>          }<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        }<a name="line.1903"></a>
 <span class="sourceLineNo">1904</span><a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      onlineRegions.put(loc.getRegionInfo().getEncodedName(), loc);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      return loc;<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span><a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>    private void processWorkItems(String key, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; actions)<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>        throws IOException {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>      RegionServerWriter rsw = null;<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span><a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long startTime = System.nanoTime();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      try {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        rsw = getRegionServerWriter(key);<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>        rsw.sink.replayEntries(actions);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>        // Pass along summary statistics<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        rsw.incrementEdits(actions.size());<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>        rsw.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      } catch (IOException e) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        throw e;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    /**<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>     * Wait until region is online on the destination region server<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>     * @param loc<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>     * @param row<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>     * @param timeout How long to wait<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>     * @param isRecovering Recovering state of the region interested on destination region server.<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>     * @return True when region is online on the destination region server<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>     * @throws InterruptedException<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>     */<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    private HRegionLocation waitUntilRegionOnline(HRegionLocation loc, byte[] row,<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>        final long timeout, AtomicBoolean isRecovering)<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>        throws IOException {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      final long endTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      final long pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      boolean reloadLocation = false;<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      TableName tableName = loc.getRegionInfo().getTable();<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      int tries = 0;<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      Throwable cause = null;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>      while (endTime &gt; EnvironmentEdgeManager.currentTime()) {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>        try {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          // Try and get regioninfo from the hosting server.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          HConnection hconn = getConnectionByTableName(tableName);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          if(reloadLocation) {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            loc = hconn.getRegionLocation(tableName, row, true);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          }<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          BlockingInterface remoteSvr = hconn.getAdmin(loc.getServerName());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          HRegionInfo region = loc.getRegionInfo();<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>          try {<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>            GetRegionInfoRequest request =<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>                RequestConverter.buildGetRegionInfoRequest(region.getRegionName());<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            GetRegionInfoResponse response = remoteSvr.getRegionInfo(null, request);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>            if (HRegionInfo.convert(response.getRegionInfo()) != null) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>              isRecovering.set((response.hasIsRecovering()) ? response.getIsRecovering() : true);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>              return loc;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            }<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          } catch (ServiceException se) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>         

<TRUNCATED>

[37/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/client/HTable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HTable.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HTable.html
index fa3eec2..0fc2c34 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HTable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HTable.html
@@ -136,1195 +136,1196 @@
 <span class="sourceLineNo">128</span>    if (maxThreads == 0) {<a name="line.128"></a>
 <span class="sourceLineNo">129</span>      maxThreads = 1; // is there a better default?<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    }<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    long keepAliveTime = conf.getLong("hbase.htable.threads.keepalivetime", 60);<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>    // Using the "direct handoff" approach, new threads will only be created<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    // if it is necessary and will grow unbounded. This could be bad but in HCM<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    // we only create as many Runnables as there are region servers. It means<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    // it also scales when new region servers are added.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    ThreadPoolExecutor pool = new ThreadPoolExecutor(1, maxThreads, keepAliveTime, TimeUnit.SECONDS,<a name="line.137"></a>
-<span class="sourceLineNo">138</span>        new SynchronousQueue&lt;Runnable&gt;(), Threads.newDaemonThreadFactory("htable"));<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    pool.allowCoreThreadTimeOut(true);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    return pool;<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>  /**<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * Creates an object to access a HBase table.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * Used by HBase internally.  DO NOT USE. See {@link ConnectionFactory} class comment for how to<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * get a {@link Table} instance (use {@link Table} instead of {@link HTable}).<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * @param tableName Name of the table.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * @param connection HConnection to be used.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @param pool ExecutorService to be used.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @throws IOException if a remote or network exception occurs<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   */<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  @InterfaceAudience.Private<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  protected HTable(TableName tableName, final ClusterConnection connection,<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      final TableConfiguration tableConfig,<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      final RpcRetryingCallerFactory rpcCallerFactory,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      final RpcControllerFactory rpcControllerFactory,<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      final ExecutorService pool) throws IOException {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    if (connection == null || connection.isClosed()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      throw new IllegalArgumentException("Connection is null or closed.");<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    this.tableName = tableName;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    this.cleanupConnectionOnClose = false;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    this.connection = connection;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    this.configuration = connection.getConfiguration();<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    this.tableConfiguration = tableConfig;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    this.pool = pool;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    if (pool == null) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      this.pool = getDefaultExecutor(this.configuration);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      this.cleanupPoolOnClose = true;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    } else {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      this.cleanupPoolOnClose = false;<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>    this.rpcCallerFactory = rpcCallerFactory;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    this.rpcControllerFactory = rpcControllerFactory;<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>    this.finishSetup();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>  /**<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * For internal testing. Uses Connection provided in {@code params}.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * @throws IOException<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  @VisibleForTesting<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  protected HTable(ClusterConnection conn, BufferedMutatorParams params) throws IOException {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    connection = conn;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    tableName = params.getTableName();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    tableConfiguration = new TableConfiguration(connection.getConfiguration());<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    cleanupPoolOnClose = false;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    cleanupConnectionOnClose = false;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    // used from tests, don't trust the connection is real<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    this.mutator = new BufferedMutatorImpl(conn, null, null, params);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>  /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * @return maxKeyValueSize from configuration.<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   */<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  public static int getMaxKeyValueSize(Configuration conf) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    return conf.getInt("hbase.client.keyvalue.maxsize", -1);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  /**<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * setup this HTable's parameter based on the passed configuration<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  private void finishSetup() throws IOException {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    if (tableConfiguration == null) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      tableConfiguration = new TableConfiguration(configuration);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    this.operationTimeout = tableName.isSystemTable() ?<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        tableConfiguration.getMetaOperationTimeout() : tableConfiguration.getOperationTimeout();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    this.scannerCaching = tableConfiguration.getScannerCaching();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    this.scannerMaxResultSize = tableConfiguration.getScannerMaxResultSize();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    if (this.rpcCallerFactory == null) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      this.rpcCallerFactory = connection.getNewRpcRetryingCallerFactory(configuration);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    if (this.rpcControllerFactory == null) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      this.rpcControllerFactory = RpcControllerFactory.instantiate(configuration);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // puts need to track errors globally due to how the APIs currently work.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    multiAp = this.connection.getAsyncProcess();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    this.locator = new HRegionLocator(getName(), connection);<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>   * {@inheritDoc}<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 Configuration getConfiguration() {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    return configuration;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>  /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * {@inheritDoc}<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  @Override<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  public byte [] getTableName() {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return this.tableName.getName();<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 TableName getName() {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return tableName;<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>   * &lt;em&gt;INTERNAL&lt;/em&gt; Used by unit tests and tools to do low-level<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * manipulations.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * @return An HConnection instance.<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @deprecated This method will be changed from public to package protected.<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  // TODO(tsuna): Remove this.  Unit tests shouldn't require public helpers.<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  @Deprecated<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  @VisibleForTesting<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  public HConnection getConnection() {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    return this.connection;<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>   * {@inheritDoc}<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 HTableDescriptor getTableDescriptor() throws IOException {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    HTableDescriptor htd = HBaseAdmin.getTableDescriptor(tableName, connection, rpcCallerFactory, operationTimeout);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    if (htd != null) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      return new UnmodifyableHTableDescriptor(htd);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    return null;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private &lt;V&gt; V executeMasterCallable(MasterCallable&lt;V&gt; callable) throws IOException {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    RpcRetryingCaller&lt;V&gt; caller = rpcCallerFactory.newCaller();<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    try {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      return caller.callWithRetries(callable, operationTimeout);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    } finally {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      callable.close();<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  /**<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * Get the corresponding start keys and regions for an arbitrary range of<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * keys.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * &lt;p&gt;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * @param startKey Starting row in range, inclusive<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * @param endKey Ending row in range<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * @param includeEndKey true if endRow is inclusive, false if exclusive<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * @return A pair of list of start keys and list of HRegionLocations that<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   *         contain the specified range<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * @throws IOException if a remote or network exception occurs<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  private Pair&lt;List&lt;byte[]&gt;, List&lt;HRegionLocation&gt;&gt; getKeysAndRegionsInRange(<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      final byte[] startKey, final byte[] endKey, final boolean includeEndKey)<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      throws IOException {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return getKeysAndRegionsInRange(startKey, endKey, includeEndKey, false);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  /**<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * Get the corresponding start keys and regions for an arbitrary range of<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   * keys.<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * &lt;p&gt;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * @param startKey Starting row in range, inclusive<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * @param endKey Ending row in range<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * @param includeEndKey true if endRow is inclusive, false if exclusive<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   * @param reload true to reload information or false to use cached information<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   * @return A pair of list of start keys and list of HRegionLocations that<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   *         contain the specified range<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * @throws IOException if a remote or network exception occurs<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   */<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  private Pair&lt;List&lt;byte[]&gt;, List&lt;HRegionLocation&gt;&gt; getKeysAndRegionsInRange(<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      final byte[] startKey, final byte[] endKey, final boolean includeEndKey,<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      final boolean reload) throws IOException {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    final boolean endKeyIsEndOfTable = Bytes.equals(endKey,HConstants.EMPTY_END_ROW);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    if ((Bytes.compareTo(startKey, endKey) &gt; 0) &amp;&amp; !endKeyIsEndOfTable) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      throw new IllegalArgumentException(<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        "Invalid range: " + Bytes.toStringBinary(startKey) +<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        " &gt; " + Bytes.toStringBinary(endKey));<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    List&lt;byte[]&gt; keysInRange = new ArrayList&lt;byte[]&gt;();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    List&lt;HRegionLocation&gt; regionsInRange = new ArrayList&lt;HRegionLocation&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    byte[] currentKey = startKey;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    do {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      HRegionLocation regionLocation = getRegionLocator().getRegionLocation(currentKey, reload);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      keysInRange.add(currentKey);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      regionsInRange.add(regionLocation);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      currentKey = regionLocation.getRegionInfo().getEndKey();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    } while (!Bytes.equals(currentKey, HConstants.EMPTY_END_ROW)<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        &amp;&amp; (endKeyIsEndOfTable || Bytes.compareTo(currentKey, endKey) &lt; 0<a name="line.328"></a>
-<span class="sourceLineNo">329</span>            || (includeEndKey &amp;&amp; Bytes.compareTo(currentKey, endKey) == 0)));<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    return new Pair&lt;List&lt;byte[]&gt;, List&lt;HRegionLocation&gt;&gt;(keysInRange,<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        regionsInRange);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  /**<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * The underlying {@link HTable} must not be closed.<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * {@link HTableInterface#getScanner(Scan)} has other usage details.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  @Override<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  public ResultScanner getScanner(final Scan scan) throws IOException {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    if (scan.getBatch() &gt; 0 &amp;&amp; scan.isSmall()) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      throw new IllegalArgumentException("Small scan should not be used with batching");<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    if (scan.getCaching() &lt;= 0) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      scan.setCaching(scannerCaching);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    if (scan.getMaxResultSize() &lt;= 0) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      scan.setMaxResultSize(scannerMaxResultSize);<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>    Boolean async = scan.isAsyncPrefetch();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    if (async == null) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      async = tableConfiguration.isClientScannerAsyncPrefetch();<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>    if (scan.isReversed()) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      if (scan.isSmall()) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        return new ClientSmallReversedScanner(getConfiguration(), scan, getName(),<a name="line.358"></a>
-<span class="sourceLineNo">359</span>            this.connection, this.rpcCallerFactory, this.rpcControllerFactory,<a name="line.359"></a>
-<span class="sourceLineNo">360</span>            pool, tableConfiguration.getReplicaCallTimeoutMicroSecondScan());<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      } else {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        return new ReversedClientScanner(getConfiguration(), scan, getName(),<a name="line.362"></a>
-<span class="sourceLineNo">363</span>            this.connection, this.rpcCallerFactory, this.rpcControllerFactory,<a name="line.363"></a>
-<span class="sourceLineNo">364</span>            pool, tableConfiguration.getReplicaCallTimeoutMicroSecondScan());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>    if (scan.isSmall()) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      return new ClientSmallScanner(getConfiguration(), scan, getName(),<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          this.connection, this.rpcCallerFactory, this.rpcControllerFactory,<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          pool, tableConfiguration.getReplicaCallTimeoutMicroSecondScan());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    } else {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      if (async) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        return new ClientAsyncPrefetchScanner(getConfiguration(), scan, getName(), this.connection,<a name="line.374"></a>
-<span class="sourceLineNo">375</span>            this.rpcCallerFactory, this.rpcControllerFactory,<a name="line.375"></a>
-<span class="sourceLineNo">376</span>            pool, tableConfiguration.getReplicaCallTimeoutMicroSecondScan());<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      } else {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        return new ClientSimpleScanner(getConfiguration(), scan, getName(), this.connection,<a name="line.378"></a>
-<span class="sourceLineNo">379</span>            this.rpcCallerFactory, this.rpcControllerFactory,<a name="line.379"></a>
-<span class="sourceLineNo">380</span>            pool, tableConfiguration.getReplicaCallTimeoutMicroSecondScan());<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><a name="line.384"></a>
-<span class="sourceLineNo">385</span>  /**<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * The underlying {@link HTable} must not be closed.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * {@link HTableInterface#getScanner(byte[])} has other usage details.<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 ResultScanner getScanner(byte [] family) throws IOException {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    Scan scan = new Scan();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    scan.addFamily(family);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    return getScanner(scan);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
-<span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span>  /**<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * The underlying {@link HTable} must not be closed.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * {@link HTableInterface#getScanner(byte[], byte[])} has other usage details.<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 ResultScanner getScanner(byte [] family, byte [] qualifier)<a name="line.401"></a>
-<span class="sourceLineNo">402</span>  throws IOException {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    Scan scan = new Scan();<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    scan.addColumn(family, qualifier);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    return getScanner(scan);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>  }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>  /**<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   * {@inheritDoc}<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 Result get(final Get get) throws IOException {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    return get(get, get.isCheckExistenceOnly());<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>  private Result get(Get get, final boolean checkExistenceOnly) throws IOException {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    // if we are changing settings to the get, clone it.<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    if (get.isCheckExistenceOnly() != checkExistenceOnly || get.getConsistency() == null) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      get = ReflectionUtils.newInstance(get.getClass(), get);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      get.setCheckExistenceOnly(checkExistenceOnly);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      if (get.getConsistency() == null){<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        get.setConsistency(defaultConsistency);<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      }<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    if (get.getConsistency() == Consistency.STRONG) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      // Good old call.<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      final Get getReq = get;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      RegionServerCallable&lt;Result&gt; callable = new RegionServerCallable&lt;Result&gt;(this.connection,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          getName(), get.getRow()) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        @Override<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        public Result call(int callTimeout) throws IOException {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>          ClientProtos.GetRequest request =<a name="line.433"></a>
-<span class="sourceLineNo">434</span>            RequestConverter.buildGetRequest(getLocation().getRegionInfo().getRegionName(), getReq);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          PayloadCarryingRpcController controller = rpcControllerFactory.newController();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>          controller.setPriority(tableName);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>          controller.setCallTimeout(callTimeout);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>          try {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>            ClientProtos.GetResponse response = getStub().get(controller, request);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>            if (response == null) return null;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>            return ProtobufUtil.toResult(response.getResult(), controller.cellScanner());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>          } catch (ServiceException se) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      };<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      return rpcCallerFactory.&lt;Result&gt;newCaller().callWithRetries(callable, this.operationTimeout);<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>    // Call that takes into account the replica<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    RpcRetryingCallerWithReadReplicas callable = new RpcRetryingCallerWithReadReplicas(<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      rpcControllerFactory, tableName, this.connection, get, pool,<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      tableConfiguration.getRetriesNumber(),<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      operationTimeout,<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      tableConfiguration.getPrimaryCallTimeoutMicroSecond());<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    return callable.call();<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">131</span>    int corePoolSize = conf.getInt("hbase.htable.threads.coresize", 1);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    long keepAliveTime = conf.getLong("hbase.htable.threads.keepalivetime", 60);<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>    // Using the "direct handoff" approach, new threads will only be created<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // if it is necessary and will grow unbounded. This could be bad but in HCM<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    // we only create as many Runnables as there are region servers. It means<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    // it also scales when new region servers are added.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    ThreadPoolExecutor pool = new ThreadPoolExecutor(corePoolSize, maxThreads, keepAliveTime,<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      TimeUnit.SECONDS, new SynchronousQueue&lt;Runnable&gt;(), Threads.newDaemonThreadFactory("htable"));<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    pool.allowCoreThreadTimeOut(true);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    return pool;<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>   * Creates an object to access a HBase table.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * Used by HBase internally.  DO NOT USE. See {@link ConnectionFactory} class comment for how to<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * get a {@link Table} instance (use {@link Table} instead of {@link HTable}).<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * @param tableName Name of the table.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * @param connection HConnection to be used.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * @param pool ExecutorService to be used.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * @throws IOException if a remote or network exception occurs<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  @InterfaceAudience.Private<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  protected HTable(TableName tableName, final ClusterConnection connection,<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      final TableConfiguration tableConfig,<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      final RpcRetryingCallerFactory rpcCallerFactory,<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      final RpcControllerFactory rpcControllerFactory,<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      final ExecutorService pool) throws IOException {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    if (connection == null || connection.isClosed()) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      throw new IllegalArgumentException("Connection is null or closed.");<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    this.tableName = tableName;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    this.cleanupConnectionOnClose = false;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    this.connection = connection;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    this.configuration = connection.getConfiguration();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    this.tableConfiguration = tableConfig;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    this.pool = pool;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    if (pool == null) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      this.pool = getDefaultExecutor(this.configuration);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      this.cleanupPoolOnClose = true;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    } else {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      this.cleanupPoolOnClose = false;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    this.rpcCallerFactory = rpcCallerFactory;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    this.rpcControllerFactory = rpcControllerFactory;<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    this.finishSetup();<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>   * For internal testing. Uses Connection provided in {@code params}.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @throws IOException<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  @VisibleForTesting<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  protected HTable(ClusterConnection conn, BufferedMutatorParams params) throws IOException {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    connection = conn;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    tableName = params.getTableName();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    tableConfiguration = new TableConfiguration(connection.getConfiguration());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    cleanupPoolOnClose = false;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    cleanupConnectionOnClose = false;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    // used from tests, don't trust the connection is real<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    this.mutator = new BufferedMutatorImpl(conn, null, null, params);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  }<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span>  /**<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * @return maxKeyValueSize from configuration.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   */<a name="line.198"></a>
+<span class="sourceLineNo">199</span>  public static int getMaxKeyValueSize(Configuration conf) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    return conf.getInt("hbase.client.keyvalue.maxsize", -1);<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>  /**<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   * setup this HTable's parameter based on the passed configuration<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   */<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  private void finishSetup() throws IOException {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (tableConfiguration == null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      tableConfiguration = new TableConfiguration(configuration);<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>    this.operationTimeout = tableName.isSystemTable() ?<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        tableConfiguration.getMetaOperationTimeout() : tableConfiguration.getOperationTimeout();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    this.scannerCaching = tableConfiguration.getScannerCaching();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    this.scannerMaxResultSize = tableConfiguration.getScannerMaxResultSize();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    if (this.rpcCallerFactory == null) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      this.rpcCallerFactory = connection.getNewRpcRetryingCallerFactory(configuration);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    if (this.rpcControllerFactory == null) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      this.rpcControllerFactory = RpcControllerFactory.instantiate(configuration);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>    // puts need to track errors globally due to how the APIs currently work.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    multiAp = this.connection.getAsyncProcess();<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    this.locator = new HRegionLocator(getName(), connection);<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>   * {@inheritDoc}<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 Configuration getConfiguration() {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    return configuration;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>  /**<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * {@inheritDoc}<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 byte [] getTableName() {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    return this.tableName.getName();<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 TableName getName() {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    return tableName;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * &lt;em&gt;INTERNAL&lt;/em&gt; Used by unit tests and tools to do low-level<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * manipulations.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * @return An HConnection instance.<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * @deprecated This method will be changed from public to package protected.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  // TODO(tsuna): Remove this.  Unit tests shouldn't require public helpers.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  @Deprecated<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  @VisibleForTesting<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  public HConnection getConnection() {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    return this.connection;<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>   * {@inheritDoc}<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   */<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  @Override<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  public HTableDescriptor getTableDescriptor() throws IOException {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    HTableDescriptor htd = HBaseAdmin.getTableDescriptor(tableName, connection, rpcCallerFactory, operationTimeout);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    if (htd != null) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      return new UnmodifyableHTableDescriptor(htd);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return null;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  private &lt;V&gt; V executeMasterCallable(MasterCallable&lt;V&gt; callable) throws IOException {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    RpcRetryingCaller&lt;V&gt; caller = rpcCallerFactory.newCaller();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    try {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      return caller.callWithRetries(callable, operationTimeout);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    } finally {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      callable.close();<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>  /**<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * Get the corresponding start keys and regions for an arbitrary range of<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   * keys.<a name="line.284"></a>
+<span class="sourceLineNo">285</span>   * &lt;p&gt;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   * @param startKey Starting row in range, inclusive<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * @param endKey Ending row in range<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * @param includeEndKey true if endRow is inclusive, false if exclusive<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   * @return A pair of list of start keys and list of HRegionLocations that<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   *         contain the specified range<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * @throws IOException if a remote or network exception occurs<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   */<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  private Pair&lt;List&lt;byte[]&gt;, List&lt;HRegionLocation&gt;&gt; getKeysAndRegionsInRange(<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      final byte[] startKey, final byte[] endKey, final boolean includeEndKey)<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      throws IOException {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return getKeysAndRegionsInRange(startKey, endKey, includeEndKey, false);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  /**<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * Get the corresponding start keys and regions for an arbitrary range of<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * keys.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * &lt;p&gt;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * @param startKey Starting row in range, inclusive<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * @param endKey Ending row in range<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   * @param includeEndKey true if endRow is inclusive, false if exclusive<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * @param reload true to reload information or false to use cached information<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   * @return A pair of list of start keys and list of HRegionLocations that<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   *         contain the specified range<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * @throws IOException if a remote or network exception occurs<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   */<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  private Pair&lt;List&lt;byte[]&gt;, List&lt;HRegionLocation&gt;&gt; getKeysAndRegionsInRange(<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      final byte[] startKey, final byte[] endKey, final boolean includeEndKey,<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      final boolean reload) throws IOException {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    final boolean endKeyIsEndOfTable = Bytes.equals(endKey,HConstants.EMPTY_END_ROW);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    if ((Bytes.compareTo(startKey, endKey) &gt; 0) &amp;&amp; !endKeyIsEndOfTable) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      throw new IllegalArgumentException(<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        "Invalid range: " + Bytes.toStringBinary(startKey) +<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        " &gt; " + Bytes.toStringBinary(endKey));<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    List&lt;byte[]&gt; keysInRange = new ArrayList&lt;byte[]&gt;();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    List&lt;HRegionLocation&gt; regionsInRange = new ArrayList&lt;HRegionLocation&gt;();<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    byte[] currentKey = startKey;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    do {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      HRegionLocation regionLocation = getRegionLocator().getRegionLocation(currentKey, reload);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      keysInRange.add(currentKey);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      regionsInRange.add(regionLocation);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      currentKey = regionLocation.getRegionInfo().getEndKey();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    } while (!Bytes.equals(currentKey, HConstants.EMPTY_END_ROW)<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        &amp;&amp; (endKeyIsEndOfTable || Bytes.compareTo(currentKey, endKey) &lt; 0<a name="line.329"></a>
+<span class="sourceLineNo">330</span>            || (includeEndKey &amp;&amp; Bytes.compareTo(currentKey, endKey) == 0)));<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    return new Pair&lt;List&lt;byte[]&gt;, List&lt;HRegionLocation&gt;&gt;(keysInRange,<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        regionsInRange);<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>  /**<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   * The underlying {@link HTable} must not be closed.<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   * {@link HTableInterface#getScanner(Scan)} has other usage details.<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 ResultScanner getScanner(final Scan scan) throws IOException {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    if (scan.getBatch() &gt; 0 &amp;&amp; scan.isSmall()) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      throw new IllegalArgumentException("Small scan should not be used with batching");<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>    if (scan.getCaching() &lt;= 0) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      scan.setCaching(scannerCaching);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    if (scan.getMaxResultSize() &lt;= 0) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      scan.setMaxResultSize(scannerMaxResultSize);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    Boolean async = scan.isAsyncPrefetch();<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    if (async == null) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      async = tableConfiguration.isClientScannerAsyncPrefetch();<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>    if (scan.isReversed()) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      if (scan.isSmall()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        return new ClientSmallReversedScanner(getConfiguration(), scan, getName(),<a name="line.359"></a>
+<span class="sourceLineNo">360</span>            this.connection, this.rpcCallerFactory, this.rpcControllerFactory,<a name="line.360"></a>
+<span class="sourceLineNo">361</span>            pool, tableConfiguration.getReplicaCallTimeoutMicroSecondScan());<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      } else {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        return new ReversedClientScanner(getConfiguration(), scan, getName(),<a name="line.363"></a>
+<span class="sourceLineNo">364</span>            this.connection, this.rpcCallerFactory, this.rpcControllerFactory,<a name="line.364"></a>
+<span class="sourceLineNo">365</span>            pool, tableConfiguration.getReplicaCallTimeoutMicroSecondScan());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>    if (scan.isSmall()) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      return new ClientSmallScanner(getConfiguration(), scan, getName(),<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          this.connection, this.rpcCallerFactory, this.rpcControllerFactory,<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          pool, tableConfiguration.getReplicaCallTimeoutMicroSecondScan());<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    } else {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      if (async) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        return new ClientAsyncPrefetchScanner(getConfiguration(), scan, getName(), this.connection,<a name="line.375"></a>
+<span class="sourceLineNo">376</span>            this.rpcCallerFactory, this.rpcControllerFactory,<a name="line.376"></a>
+<span class="sourceLineNo">377</span>            pool, tableConfiguration.getReplicaCallTimeoutMicroSecondScan());<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      } else {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        return new ClientSimpleScanner(getConfiguration(), scan, getName(), this.connection,<a name="line.379"></a>
+<span class="sourceLineNo">380</span>            this.rpcCallerFactory, this.rpcControllerFactory,<a name="line.380"></a>
+<span class="sourceLineNo">381</span>            pool, tableConfiguration.getReplicaCallTimeoutMicroSecondScan());<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>  }<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>   * The underlying {@link HTable} must not be closed.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>   * {@link HTableInterface#getScanner(byte[])} has other usage details.<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 ResultScanner getScanner(byte [] family) throws IOException {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    Scan scan = new Scan();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    scan.addFamily(family);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    return getScanner(scan);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>  /**<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * The underlying {@link HTable} must not be closed.<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * {@link HTableInterface#getScanner(byte[], byte[])} has other usage details.<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   */<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  @Override<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  public ResultScanner getScanner(byte [] family, byte [] qualifier)<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  throws IOException {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    Scan scan = new Scan();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    scan.addColumn(family, qualifier);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    return getScanner(scan);<a name="line.406"></a>
+<span class="sourceLineNo">407</span>  }<a name="line.407"></a>
+<span class="sourceLineNo">408</span><a name="line.408"></a>
+<span class="sourceLineNo">409</span>  /**<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   * {@inheritDoc}<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   */<a name="line.411"></a>
+<span class="sourceLineNo">412</span>  @Override<a name="line.412"></a>
+<span class="sourceLineNo">413</span>  public Result get(final Get get) throws IOException {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    return get(get, get.isCheckExistenceOnly());<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>  private Result get(Get get, final boolean checkExistenceOnly) throws IOException {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    // if we are changing settings to the get, clone it.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    if (get.isCheckExistenceOnly() != checkExistenceOnly || get.getConsistency() == null) {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      get = ReflectionUtils.newInstance(get.getClass(), get);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      get.setCheckExistenceOnly(checkExistenceOnly);<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      if (get.getConsistency() == null){<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        get.setConsistency(defaultConsistency);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      }<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span>    if (get.getConsistency() == Consistency.STRONG) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      // Good old call.<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      final Get getReq = get;<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      RegionServerCallable&lt;Result&gt; callable = new RegionServerCallable&lt;Result&gt;(this.connection,<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          getName(), get.getRow()) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>        @Override<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        public Result call(int callTimeout) throws IOException {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          ClientProtos.GetRequest request =<a name="line.434"></a>
+<span class="sourceLineNo">435</span>            RequestConverter.buildGetRequest(getLocation().getRegionInfo().getRegionName(), getReq);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          PayloadCarryingRpcController controller = rpcControllerFactory.newController();<a name="line.436"></a>
+<span class="sourceLineNo">437</span>          controller.setPriority(tableName);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>          controller.setCallTimeout(callTimeout);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>          try {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>            ClientProtos.GetResponse response = getStub().get(controller, request);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>            if (response == null) return null;<a name="line.441"></a>
+<span class="sourceLineNo">442</span>            return ProtobufUtil.toResult(response.getResult(), controller.cellScanner());<a name="line.442"></a>
+<span class="sourceLineNo">443</span>          } catch (ServiceException se) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>            throw ProtobufUtil.getRemoteException(se);<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>      };<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      return rpcCallerFactory.&lt;Result&gt;newCaller().callWithRetries(callable, this.operationTimeout);<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>    // Call that takes into account the replica<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    RpcRetryingCallerWithReadReplicas callable = new RpcRetryingCallerWithReadReplicas(<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      rpcControllerFactory, tableName, this.connection, get, pool,<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      tableConfiguration.getRetriesNumber(),<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      operationTimeout,<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      tableConfiguration.getPrimaryCallTimeoutMicroSecond());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    return callable.call();<a name="line.457"></a>
+<span class="sourceLineNo">458</span>  }<a name="line.458"></a>
 <span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>  /**<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * {@inheritDoc}<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   */<a name="line.462"></a>
-<span class="sourceLineNo">463</span>  @Override<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  public Result[] get(List&lt;Get&gt; gets) throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    if (gets.size() == 1) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      return new Result[]{get(gets.get(0))};<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    try {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      Object[] r1 = new Object[gets.size()];<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      batch((List) gets, r1);<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>      // translate.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      Result [] results = new Result[r1.length];<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      int i=0;<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      for (Object o : r1) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        // batch ensures if there is a failure we get an exception instead<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        results[i++] = (Result) o;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>      return results;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    } catch (InterruptedException e) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      throw (InterruptedIOException)new InterruptedIOException().initCause(e);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    }<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  /**<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * {@inheritDoc}<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   */<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  @Override<a name="line.489"></a>
-<span class="sourceLineNo">490</span>  public void batch(final List&lt;? extends Row&gt; actions, final Object[] results)<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      throws InterruptedException, IOException {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    AsyncRequestFuture ars = multiAp.submitAll(pool, tableName, actions, null, results);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    ars.waitUntilDone();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    if (ars.hasError()) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      throw ars.getErrors();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  }<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>  /**<a name="line.499"></a>
-<span class="sourceLineNo">500</span>   * {@inheritDoc}<a name="line.500"></a>
-<span class="sourceLineNo">501</span>   */<a name="line.501"></a>
-<span class="sourceLineNo">502</span>  @Override<a name="line.502"></a>
-<span class="sourceLineNo">503</span>  public &lt;R&gt; void batchCallback(<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      final List&lt;? extends Row&gt; actions, final Object[] results, final Batch.Callback&lt;R&gt; callback)<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      throws IOException, InterruptedException {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    connection.processBatchCallback(actions, tableName, pool, results, callback);<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>  /**<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * {@inheritDoc}<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   */<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  @Override<a name="line.512"></a>
-<span class="sourceLineNo">513</span>  public void delete(final Delete delete)<a name="line.513"></a>
-<span class="sourceLineNo">514</span>  throws IOException {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    RegionServerCallable&lt;Boolean&gt; callable = new RegionServerCallable&lt;Boolean&gt;(connection,<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        tableName, delete.getRow()) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      @Override<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      public Boolean call(int callTimeout) throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        PayloadCarryingRpcController controller = rpcControllerFactory.newController();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        controller.setPriority(tableName);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        controller.setCallTimeout(callTimeout);<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>        try {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          MutateRequest request = RequestConverter.buildMutateRequest(<a name="line.524"></a>
-<span class="sourceLineNo">525</span>            getLocation().getRegionInfo().getRegionName(), delete);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          MutateResponse response = getStub().mutate(controller, request);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          return Boolean.valueOf(response.getProcessed());<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        } catch (ServiceException se) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>          throw ProtobufUtil.getRemoteException(se);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>        }<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      }<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    };<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    rpcCallerFactory.&lt;Boolean&gt; newCaller().callWithRetries(callable, this.operationTimeout);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>  }<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>   * {@inheritDoc}<a name="line.537"></a>
-<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
-<span class="sourceLineNo">539</span>  @Override<a name="line.539"></a>
-<span class="sourceLineNo">540</span>  public void delete(final List&lt;Delete&gt; deletes)<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  throws IOException {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    Object[] results = new Object[deletes.size()];<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    try {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      batch(deletes, results);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    } catch (InterruptedException e) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      throw (InterruptedIOException)new InterruptedIOException().initCause(e);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    } finally {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      // mutate list so that it is empty for complete success, or contains only failed records<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      // results are returned in the same order as the requests in list walk the list backwards,<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      // so we can remove from list without impacting the indexes of earlier members<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      for (int i = results.length - 1; i&gt;=0; i--) {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        // if result is not null, it succeeded<a name="line.552"></a>
-<span class="sourceLineNo">553</span>        if (results[i] instanceof Result) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>          deletes.remove(i);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        }<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      }<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
-<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>   * {@inheritDoc}<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * @throws IOException<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   */<a name="line.563"></a>
-<span class="sourceLineNo">564</span>  @Override<a name="line.564"></a>
-<span class="sourceLineNo">565</span>  public void put(final Put put) throws IOException {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    getBufferedMutator().mutate(put);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    if (autoFlush) {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      flushCommits();<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>  /**<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   * {@inheritDoc}<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   * @throws IOException<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   */<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  @Override<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  public void put(final List&lt;Put&gt; puts) throws IOException {<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    getBufferedMutator().mutate(puts);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    if (autoFlush) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      flushCommits();<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    }<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>  /**<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   * {@inheritDoc}<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  @Override<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  public void mutateRow(final RowMutations rm) throws IOException {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    RegionServerCallable&lt;Void&gt; callable =<a name="line.589"></a>
-<span class="sourceLineNo">590</span>        new RegionServerCallable&lt;Void&gt;(connection, getName(), rm.getRow()) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      @Override<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      public Void call(int callTimeout) throws IOException {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>        PayloadCarryingRpcController controller = rpcControllerFactory.newController();<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        controller.setPriority(tableName);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        controller.setCallTimeout(callTimeout);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        try {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          RegionAction.Builder regionMutationBuilder = RequestConverter.buildRegionAction(<a name="line.597"></a>
-<span class="sourceLineNo">598</span>            getLocation().getRegionInfo().getRegionName(), rm);<a name="line.598"></a>
-<span class="sourceLineNo">599</span>          regionMutationBuilder.setAtomic(true);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>          MultiRequest request =<a name="line.600"></a>
-<span class="sourceLineNo">601</span>            MultiRequest.newBuilder().addRegionAction(regionMutationBuilder.build()).build();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>          ClientProtos.MultiResponse response = getStub().multi(controller, request);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>          ClientProtos.RegionActionResult res = response.getRegionActionResultList().get(0);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>          if (res.hasException()) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>            Throwable ex = ProtobufUtil.toException(res.getException());<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            if(ex instanceof IOException) {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>              throw (IOException)ex;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>            }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>            throw new IOException("Failed to mutate row: "+Bytes.toStringBinary(rm.getRow()), ex);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        } catch (ServiceException se) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>          throw ProtobufUtil.getRemoteException(se);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>        }<a name="line.613"></a>
-<span class="sourceLineNo">614</span>        return null;<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">617</span>    rpcCallerFactory.&lt;Void&gt; newCaller().callWithRetries(callable, this.operationTimeout);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span>  /**<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * {@inheritDoc}<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   */<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  @Override<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  public Result append(final Append append) throws IOException {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    if (append.numFamilies() == 0) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      throw new IOException(<a name="line.626"></a>
-<span class="sourceLineNo">627</span>          "Invalid arguments to append, no columns specified");<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>    NonceGenerator ng = this.connection.getNonceGenerator();<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    final long nonceGroup = ng.getNonceGroup(), nonce = ng.newNonce();<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    RegionServerCallable&lt;Result&gt; callable =<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      new RegionServerCallable&lt;Result&gt;(this.connection, getName(), append.getRow()) {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>        @Override<a name="line.634"></a>
-<span class="sourceLineNo">635</span>        public Result call(int callTimeout) throws IOException {<a name="line.635"></a>
-<span class="sourceLineNo">636</span>          PayloadCarryingRpcController controller = rpcControllerFactory.newController();<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          controller.setPriority(getTableName());<a name="line.637"></a>
-<span class="sourceLineNo">638</span>          controller.setCallTimeout(callTimeout);<a name="line.638"></a>
-<span class="sourceLineNo">639</span>          try {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>            MutateRequest request = RequestConverter.buildMutateRequest(<a name="line.640"></a>
-<span class="sourceLineNo">641</span>              getLocation().getRegionInfo().getRegionName(), append, nonceGroup, nonce);<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            MutateResponse response = getStub().mutate(controller, request);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>            if (!response.hasResult()) return null;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            return ProtobufUtil.toResult(response.getResult(), controller.cellScanner());<a name="line.644"></a>
-<span class="sourceLineNo">645</span>          } catch (ServiceException se) {<a name="line.645"></a>
-<span class="sourceLineNo">646</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        }<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      };<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    return rpcCallerFactory.&lt;Result&gt; newCaller().callWithRetries(callable, this.operationTimeout);<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>  /**<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   * {@inheritDoc}<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   */<a name="line.655"></a>
-<span class="sourceLineNo">656</span>  @Override<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  public Result increment(final Increment increment) throws IOException {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    if (!increment.hasFamilies()) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      throw new IOException(<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          "Invalid arguments to increment, no columns specified");<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    }<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    NonceGenerator ng = this.connection.getNonceGenerator();<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    final long nonceGroup = ng.getNonceGroup(), nonce = ng.newNonce();<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    RegionServerCallable&lt;Result&gt; callable = new RegionServerCallable&lt;Result&gt;(this.connection,<a name="line.664"></a>
-<span class="sourceLineNo">665</span>        getName(), increment.getRow()) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      @Override<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      public Result call(int callTimeout) throws IOException {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        PayloadCarryingRpcController controller = rpcControllerFactory.newController();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        controller.setPriority(getTableName());<a name="line.669"></a>
-<span class="sourceLineNo">670</span>        controller.setCallTimeout(callTimeout);<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        try {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>          MutateRequest request = RequestConverter.buildMutateRequest(<a name="line.672"></a>
-<span class="sourceLineNo">673</span>            getLocation().getRegionInfo().getRegionName(), increment, nonceGroup, nonce);<a name="line.673"></a>
-<span class="sourceLineNo">674</span>          MutateResponse response = getStub().mutate(controller, request);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>          return ProtobufUtil.toResult(response.getResult(), controller.cellScanner());<a name="line.675"></a>
-<span class="sourceLineNo">676</span>        } catch (ServiceException se) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>          throw ProtobufUtil.getRemoteException(se);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>        }<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      }<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    };<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    return rpcCallerFactory.&lt;Result&gt; newCaller().callWithRetries(callable, this.operationTimeout);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>  }<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span>  /**<a name="line.684"></a>
-<span class="sourceLineNo">685</span>   * {@inheritDoc}<a name="line.685"></a>
-<span class="sourceLineNo">686</span>   */<a name="line.686"></a>
-<span class="sourceLineNo">687</span>  @Override<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  public long incrementColumnValue(final byte [] row, final byte [] family,<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      final byte [] qualifier, final long amount)<a name="line.689"></a>
-<span class="sourceLineNo">690</span>  throws IOException {<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    return incrementColumnValue(row, family, qualifier, amount, Durability.SYNC_WAL);<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>  /**<a name="line.694"></a>
-<span class="sourceLineNo">695</span>   * {@inheritDoc}<a name="line.695"></a>
-<span class="sourceLineNo">696</span>   */<a name="line.696"></a>
-<span class="sourceLineNo">697</span>  @Override<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  public long incrementColumnValue(final byte [] row, final byte [] family,<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      final byte [] qualifier, final long amount, final Durability durability)<a name="line.699"></a>
-<span class="sourceLineNo">700</span>  throws IOException {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    NullPointerExcepti

<TRUNCATED>

[49/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index fda75fb..ae07eb6 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -305,7 +305,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 


[15/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html
index f3aed1b..0597160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html
@@ -1513,810 +1513,816 @@
 <span class="sourceLineNo">1505</span>      if (maxSeqIdInStores == null || maxSeqIdInStores.isEmpty()) {<a name="line.1505"></a>
 <span class="sourceLineNo">1506</span>        return;<a name="line.1506"></a>
 <span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        if (!CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          // or the master was crashed before and we can not get the information.<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>          if (maxSeqId != null &amp;&amp; maxSeqId.longValue() &gt;= logEntry.getKey().getLogSeqNum()) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>            skippedCells.add(cell);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>          }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      }<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (!skippedCells.isEmpty()) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        logEntry.getEdit().getCells().removeAll(skippedCells);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1508</span>      // Create the array list for the cells that aren't filtered.<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // We make the assumption that most cells will be kept.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      ArrayList&lt;Cell&gt; keptCells = new ArrayList&lt;Cell&gt;(logEntry.getEdit().getCells().size());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>          keptCells.add(cell);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        } else {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          // or the master was crashed before and we can not get the information.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>          if (maxSeqId == null || maxSeqId.longValue() &lt; logEntry.getKey().getLogSeqNum()) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>            keptCells.add(cell);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      }<a name="line.1523"></a>
 <span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    @Override<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (entries.isEmpty()) {<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        return;<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      WriterAndPath wap = null;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      long startTime = System.nanoTime();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      try {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        int editsCount = 0;<a name="line.1537"></a>
+<span class="sourceLineNo">1525</span>      // Anything in the keptCells array list is still live.<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // So rather than removing the cells from the array list<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      // which would be an O(n^2) operation, we just replace the list<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      logEntry.getEdit().setCells(keptCells);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    @Override<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      if (entries.isEmpty()) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>        return;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      }<a name="line.1537"></a>
 <span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        for (Entry logEntry : entries) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          if (wap == null) {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>            wap = getWriterAndPath(logEntry);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>            if (wap == null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>              if (LOG.isDebugEnabled()) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>              }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>              return;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          filterCellByStore(logEntry);<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            wap.w.append(logEntry);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            editsCount++;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          } else {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>            wap.incrementSkippedEdits(1);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>          }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        // Pass along summary statistics<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        wap.incrementEdits(editsCount);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      } catch (IOException e) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          e = e instanceof RemoteException ?<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>        throw e;<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    }<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span><a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    /**<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>     */<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    @Override<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      synchronized (writers) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>        }<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      return ret;<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span><a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    @Override<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    public int getNumberOfRecoveredRegions() {<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      return writers.size();<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>  }<a name="line.1587"></a>
+<span class="sourceLineNo">1539</span>      WriterAndPath wap = null;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      long startTime = System.nanoTime();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      try {<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        int editsCount = 0;<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span><a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>        for (Entry logEntry : entries) {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>          if (wap == null) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>            wap = getWriterAndPath(logEntry);<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>            if (wap == null) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>              if (LOG.isDebugEnabled()) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>              }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>              return;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>            }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          filterCellByStore(logEntry);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            wap.w.append(logEntry);<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            editsCount++;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          } else {<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>            wap.incrementSkippedEdits(1);<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>          }<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        // Pass along summary statistics<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        wap.incrementEdits(editsCount);<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      } catch (IOException e) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>          e = e instanceof RemoteException ?<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>        throw e;<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    }<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span><a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>    /**<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>     */<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    @Override<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      synchronized (writers) {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      return ret;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    }<a name="line.1587"></a>
 <span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  /**<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>   */<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  public abstract static class SinkWriter {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    /* Count of edits written to this path */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    long editsWritten = 0;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    /* Count of edits skipped to this path */<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    long editsSkipped = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    /* Number of nanos spent writing to this log */<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    long nanosSpent = 0;<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    void incrementEdits(int edits) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      editsWritten += edits;<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    void incrementSkippedEdits(int skipped) {<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      editsSkipped += skipped;<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span><a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    void incrementNanoTime(long nanos) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      nanosSpent += nanos;<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    }<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  }<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span><a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>  /**<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * data written to this output.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   */<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    final Path p;<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    final Writer w;<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      this.p = p;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      this.w = w;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>  }<a name="line.1625"></a>
+<span class="sourceLineNo">1589</span>    @Override<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    public int getNumberOfRecoveredRegions() {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      return writers.size();<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  }<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span><a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>  /**<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>   */<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>  public abstract static class SinkWriter {<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    /* Count of edits written to this path */<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    long editsWritten = 0;<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    /* Count of edits skipped to this path */<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    long editsSkipped = 0;<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    /* Number of nanos spent writing to this log */<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    long nanosSpent = 0;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span><a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    void incrementEdits(int edits) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      editsWritten += edits;<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>    void incrementSkippedEdits(int skipped) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      editsSkipped += skipped;<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span><a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    void incrementNanoTime(long nanos) {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      nanosSpent += nanos;<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span><a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>  /**<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>   * data written to this output.<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>   */<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    final Path p;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    final Writer w;<a name="line.1625"></a>
 <span class="sourceLineNo">1626</span><a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>  /**<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>   */<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    private static final String KEY_DELIMITER = "#";<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    private long waitRegionOnlineTimeOut;<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    // online encoded region name -&gt; region location map<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span><a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>    /**<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>     * Map key -&gt; value layout<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>     */<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span><a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        int numWriters) {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      super(controller, entryBuffers, numWriters);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      this.waitRegionOnlineTimeOut =<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>        entryBuffers, numWriters);<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span><a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>    @Override<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      if (entries.isEmpty()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        return;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span><a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      // check if current region in a disabling or disabled table<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        // need fall back to old way<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>        // store regions we have recovered so far<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        return;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      }<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span><a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      // group entries by region servers<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      groupEditsByServer(entries);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span><a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      // process workitems<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      String maxLocKey = null;<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      int maxSize = 0;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>            maxSize = curQueue.size();<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>            maxQueue = curQueue;<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>            maxLocKey = entry.getKey();<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>          }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        if (maxSize &lt; minBatchSize<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>          // buffer more to process<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>          return;<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        } else if (maxSize &gt; 0) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>        }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span><a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>      if (maxSize &gt; 0) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>        recoveredRegions.add(encodedRegionName);<a name="line.1721"></a>
+<span class="sourceLineNo">1627</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      this.p = p;<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      this.w = w;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>    }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>  }<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span><a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>  /**<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>   */<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    private static final String KEY_DELIMITER = "#";<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>    private long waitRegionOnlineTimeOut;<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    // online encoded region name -&gt; region location map<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span><a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>    /**<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>     * Map key -&gt; value layout<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>     */<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span><a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span><a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>        int numWriters) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      super(controller, entryBuffers, numWriters);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      this.waitRegionOnlineTimeOut =<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>        entryBuffers, numWriters);<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    @Override<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (entries.isEmpty()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        return;<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      }<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span><a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      // check if current region in a disabling or disabled table<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // need fall back to old way<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>        // store regions we have recovered so far<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        return;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span><a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      // group entries by region servers<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      groupEditsByServer(entries);<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span><a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      // process workitems<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      String maxLocKey = null;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>      int maxSize = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>            maxSize = curQueue.size();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>            maxQueue = curQueue;<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>            maxLocKey = entry.getKey();<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>          }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>        }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        if (maxSize &lt; minBatchSize<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>          // buffer more to process<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>          return;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        } else if (maxSize &gt; 0) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span><a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      if (maxSize &gt; 0) {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
 <span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
 <span class="sourceLineNo">1724</span><a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    /**<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>     * Helper function to group WALEntries to individual region servers<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>     * @throws IOException<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>     */<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      for (Entry entry : entries) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>        WALEdit edit = entry.getEdit();<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        TableName table = entry.getKey().getTablename();<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>        // clear scopes which isn't needed for recovery<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>        entry.getKey().setScopes(null);<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>        // skip edits of non-existent tables<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>          this.skippedEdits.incrementAndGet();<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>          continue;<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        }<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span><a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        boolean needSkip = false;<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        HRegionLocation loc = null;<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        String locKey = null;<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span><a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>        for (Cell cell : cells) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>          boolean isCompactionEntry = false;<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>              try {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>                  .toByteArray());<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>                row = regionName[1]; // startKey of the region<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>                isCompactionEntry = true;<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>              } catch (Exception ex) {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>                skippedCells.add(cell);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>                continue;<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>              }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>            } else {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>              skippedCells.add(cell);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>              continue;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>            }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>          try {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>            loc =<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>                  encodeRegionNameStr);<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            // skip replaying the compaction if the region is gone<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>                  + encodeRegionNameStr);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>              needSkip = true;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>            }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>          } catch (TableNotFoundException ex) {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>            // table has been deleted so skip edits of the table<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>                + encodeRegionNameStr);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>            if (nonExistentTables == null) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>            }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            nonExistentTables.add(table);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>            this.skippedEdits.incrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>            needSkip = true;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>            break;<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          }<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span><a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          cachedLastFlushedSequenceId =<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          if (cachedLastFlushedSequenceId != null<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            // skip the whole WAL entry<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            this.skippedEdits.incrementAndGet();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            needSkip = true;<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            break;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } else {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            if (maxStoreSequenceIds == null) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>              maxStoreSequenceIds =<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            }<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            if (maxStoreSequenceIds != null) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>                skippedCells.add(cell);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                continue;<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>              }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>            }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>          }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        }<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>        // skip the edit<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        if (loc == null || needSkip) continue;<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>        if (!skippedCells.isEmpty()) {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          cells.removeAll(skippedCells);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        synchronized (serverToBufferQueueMap) {<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>          if (queue == null) {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>            queue =<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>          }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>        }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        // store regions we have recovered so far<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      }<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    }<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span><a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    /**<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>     * destination region is online for replay.<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>     * @throws IOException<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>     */<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>      // fetch location from cache<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      if(loc != null) return loc;<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      if (loc == null) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>            + " of table:" + table);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      // check if current row moves to a different region due to region merge/split<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        // originalEncodedRegionName should have already flushed<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      }<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span><a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      Long lastFlushedSequenceId = -1l;<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      if (!isRecovering.get()) {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>        // been moved to somewhere before hosting RS fails<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>            + " because it's not in recovering.");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      } else {<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>        Long cachedLastFlushedSequenceId =<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span><a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        // update the value for the region<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>        RegionStoreSequenceIds ids =<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>              loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        if (ids != null) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>          }<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        }<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        if (cachedLastFlushedSequenceId == null<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>            || lastFlushedSequenceId &gt; cachedLastFlushedSequenceId) {<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>          lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), lastFlushedSequenceId);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        }<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      }<a name="line.1903"></a>
+<span class="sourceLineNo">1725</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>        recoveredRegions.add(encodedRegionName);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    }<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span><a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>    /**<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>     * Helper function to group WALEntries to individual region servers<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>     * @throws IOException<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>     */<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      for (Entry entry : entries) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        WALEdit edit = entry.getEdit();<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>        TableName table = entry.getKey().getTablename();<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        // clear scopes which isn't needed for recovery<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        entry.getKey().setScopes(null);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // skip edits of non-existent tables<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>          this.skippedEdits.incrementAndGet();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>          continue;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        boolean needSkip = false;<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        HRegionLocation loc = null;<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        String locKey = null;<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span><a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        for (Cell cell : cells) {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>          boolean isCompactionEntry = false;<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>              try {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>                  .toByteArray());<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>                row = regionName[1]; // startKey of the region<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>                isCompactionEntry = true;<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>              } catch (Exception ex) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>                skippedCells.add(cell);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>                continue;<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>              }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            } else {<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>              skippedCells.add(cell);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>              continue;<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>            }<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          }<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span><a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          try {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>            loc =<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>                  encodeRegionNameStr);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>            // skip replaying the compaction if the region is gone<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>                  + encodeRegionNameStr);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>              needSkip = true;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>            }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>          } catch (TableNotFoundException ex) {<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>            // table has been deleted so skip edits of the table<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>                + encodeRegionNameStr);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>            if (nonExistentTables == null) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>            }<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>            nonExistentTables.add(table);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>            this.skippedEdits.incrementAndGet();<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>            needSkip = true;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>            break;<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          }<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span><a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>          cachedLastFlushedSequenceId =<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>          if (cachedLastFlushedSequenceId != null<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            // skip the whole WAL entry<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>            this.skippedEdits.incrementAndGet();<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>            needSkip = true;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            break;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>          } else {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>            if (maxStoreSequenceIds == null) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>              maxStoreSequenceIds =<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>            }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            if (maxStoreSequenceIds != null) {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>                skippedCells.add(cell);<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                continue;<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              }<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>            }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>          }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        }<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>        // skip the edit<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        if (loc == null || needSkip) continue;<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span><a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (!skippedCells.isEmpty()) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          cells.removeAll(skippedCells);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>        synchronized (serverToBufferQueueMap) {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>          if (queue == null) {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            queue =<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>        }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>        // store regions we have recovered so far<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span><a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    /**<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>     * destination region is online for replay.<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>     * @throws IOException<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>     */<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      // fetch location from cache<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      if(loc != null) return loc;<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      if (loc == null) {<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>            + " of table:" + table);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      }<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      // check if current row moves to a different region due to region merge/split<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        // originalEncodedRegionName should have already flushed<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      Long lastFlushedSequenceId = -1l;<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      if (!isRecovering.get()) {<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>        // been moved to somewhere before hosting RS fails<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>            + " because it's not in recovering.");<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      } else {<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        Long cachedLastFlushedSequenceId =<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        // update the value for the region<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>        RegionStoreSequenceIds ids =<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>              loc.getRegionInfo().getEncodedName());<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>        if (ids != null) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>          }<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        }<a name="line.1903"></a>
 <span class="sourceLineNo">1904</span><a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      onlineRegions.put(loc.getRegionInfo().getEncodedName(), loc);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      return loc;<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span><a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>    private void processWorkItems(String key, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; actions)<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>        throws IOException {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>      RegionServerWriter rsw = null;<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span><a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long startTime = System.nanoTime();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      try {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        rsw = getRegionServerWriter(key);<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>        rsw.sink.replayEntries(actions);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>        // Pass along summary statistics<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        rsw.incrementEdits(actions.size());<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>        rsw.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      } catch (IOException e) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        throw e;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    /**<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>     * Wait until region is online on the destination region server<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>     * @param loc<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>     * @param row<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>     * @param timeout How long to wait<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>     * @param isRecovering Recovering state of the region interested on destination region server.<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>     * @return True when region is online on the destination region server<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>     * @throws InterruptedException<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>     */<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    private HRegionLocation waitUntilRegionOnline(HRegionLocation loc, byte[] row,<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>        final long timeout, AtomicBoolean isRecovering)<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>        throws IOException {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      final long endTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      final long pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      boolean reloadLocation = false;<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      TableName tableName = loc.getRegionInfo().getTable();<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      int tries = 0;<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      Throwable cause = null;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>      while (endTime &gt; EnvironmentEdgeManager.currentTime()) {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>        try {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          // Try and get regioninfo from the hosting server.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          HConnection hconn = getConnectionByTableName(tableName);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          if(reloadLocation) {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            loc = hconn.getRegionLocation(tableName, row, true);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          }<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          BlockingInterface remoteSvr = hconn.getAdmin(loc.getServerName());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          HRegionInfo region = loc.getRegionInfo();<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>          try {<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>            GetRegionInfoRequest request =<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>                RequestConverter.buildGetRegionInfoRequest(region.getRegionName());<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            GetRegionInfoResponse response = remoteSvr.getRegionInfo(null, request);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>            if (HRegionInfo.convert(response.getRegionInfo()) != null) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>              isRecovering.set((response.hasIsRecovering()) ? response.getIsRecovering() : true);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>              return loc;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            }<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          } catch (ServiceException se) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>          }<a name="line.1966"></a>
-<span class="sour

<TRUNCATED>

[27/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html
index 5bcceeb..a74e672 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALEdit.html
@@ -107,7 +107,7 @@
 <span class="sourceLineNo">099</span>  private final int VERSION_2 = -1;<a name="line.99"></a>
 <span class="sourceLineNo">100</span>  private final boolean isReplay;<a name="line.100"></a>
 <span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private final ArrayList&lt;Cell&gt; cells = new ArrayList&lt;Cell&gt;(1);<a name="line.102"></a>
+<span class="sourceLineNo">102</span>  private ArrayList&lt;Cell&gt; cells = new ArrayList&lt;Cell&gt;(1);<a name="line.102"></a>
 <span class="sourceLineNo">103</span><a name="line.103"></a>
 <span class="sourceLineNo">104</span>  public static final WALEdit EMPTY_WALEDIT = new WALEdit();<a name="line.104"></a>
 <span class="sourceLineNo">105</span><a name="line.105"></a>
@@ -178,209 +178,221 @@
 <span class="sourceLineNo">170</span>    return cells;<a name="line.170"></a>
 <span class="sourceLineNo">171</span>  }<a name="line.171"></a>
 <span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public NavigableMap&lt;byte[], Integer&gt; getAndRemoveScopes() {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    NavigableMap&lt;byte[], Integer&gt; result = scopes;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    scopes = null;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    return result;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  @Override<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public void readFields(DataInput in) throws IOException {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    cells.clear();<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (scopes != null) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      scopes.clear();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    int versionOrLength = in.readInt();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // TODO: Change version when we protobuf.  Also, change way we serialize KV!  Pb it too.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    if (versionOrLength == VERSION_2) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      // this is new style WAL entry containing multiple KeyValues.<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      int numEdits = in.readInt();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      for (int idx = 0; idx &lt; numEdits; idx++) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        if (compressionContext != null) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          this.add(KeyValueCompression.readKV(in, compressionContext));<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        } else {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>          this.add(KeyValueUtil.create(in));<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        }<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      int numFamilies = in.readInt();<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      if (numFamilies &gt; 0) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        if (scopes == null) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          scopes = new TreeMap&lt;byte[], Integer&gt;(Bytes.BYTES_COMPARATOR);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        for (int i = 0; i &lt; numFamilies; i++) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>          byte[] fam = Bytes.readByteArray(in);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>          int scope = in.readInt();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>          scopes.put(fam, scope);<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>    } else {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      // this is an old style WAL entry. The int that we just<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      // read is actually the length of a single KeyValue<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      this.add(KeyValueUtil.create(versionOrLength, in));<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  @Override<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  public void write(DataOutput out) throws IOException {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    LOG.warn("WALEdit is being serialized to writable - only expected in test code");<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    out.writeInt(VERSION_2);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    out.writeInt(cells.size());<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    // We interleave the two lists for code simplicity<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    for (Cell cell : cells) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      // This is not used in any of the core code flows so it is just fine to convert to KV<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      KeyValue kv = KeyValueUtil.ensureKeyValue(cell);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      if (compressionContext != null) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        KeyValueCompression.writeKV(out, kv, compressionContext);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      } else{<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        KeyValueUtil.write(kv, out);<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>    if (scopes == null) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      out.writeInt(0);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    } else {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      out.writeInt(scopes.size());<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      for (byte[] key : scopes.keySet()) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        Bytes.writeByteArray(out, key);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        out.writeInt(scopes.get(key));<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>  /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * Reads WALEdit from cells.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * @param cellDecoder Cell decoder.<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * @param expectedCount Expected cell count.<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * @return Number of KVs read.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  public int readFromCells(Codec.Decoder cellDecoder, int expectedCount) throws IOException {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    cells.clear();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    cells.ensureCapacity(expectedCount);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    while (cells.size() &lt; expectedCount &amp;&amp; cellDecoder.advance()) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      cells.add(cellDecoder.current());<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    }<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    return cells.size();<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>  @Override<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  public long heapSize() {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    long ret = ClassSize.ARRAYLIST;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    for (Cell cell : cells) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      ret += CellUtil.estimatedHeapSizeOf(cell);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    if (scopes != null) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      ret += ClassSize.TREEMAP;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      ret += ClassSize.align(scopes.size() * ClassSize.MAP_ENTRY);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      // TODO this isn't quite right, need help here<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    return ret;<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 String toString() {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    StringBuilder sb = new StringBuilder();<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>    sb.append("[#edits: " + cells.size() + " = &lt;");<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    for (Cell cell : cells) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      sb.append(cell);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      sb.append("; ");<a name="line.277"></a>
+<span class="sourceLineNo">173</span>  /**<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   * This is not thread safe.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * This will change the WALEdit and shouldn't be used unless you are sure that nothing<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * else depends on the contents being immutable.<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   *<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   * @param cells the list of cells that this WALEdit now contains.<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   */<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  @InterfaceAudience.Private<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  public void setCells(ArrayList&lt;Cell&gt; cells) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    this.cells = cells;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public NavigableMap&lt;byte[], Integer&gt; getAndRemoveScopes() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    NavigableMap&lt;byte[], Integer&gt; result = scopes;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    scopes = null;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    return result;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>  @Override<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  public void readFields(DataInput in) throws IOException {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    cells.clear();<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    if (scopes != null) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      scopes.clear();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    int versionOrLength = in.readInt();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    // TODO: Change version when we protobuf.  Also, change way we serialize KV!  Pb it too.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    if (versionOrLength == VERSION_2) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      // this is new style WAL entry containing multiple KeyValues.<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      int numEdits = in.readInt();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      for (int idx = 0; idx &lt; numEdits; idx++) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        if (compressionContext != null) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>          this.add(KeyValueCompression.readKV(in, compressionContext));<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        } else {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          this.add(KeyValueUtil.create(in));<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      int numFamilies = in.readInt();<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (numFamilies &gt; 0) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        if (scopes == null) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          scopes = new TreeMap&lt;byte[], Integer&gt;(Bytes.BYTES_COMPARATOR);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        }<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        for (int i = 0; i &lt; numFamilies; i++) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          byte[] fam = Bytes.readByteArray(in);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          int scope = in.readInt();<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          scopes.put(fam, scope);<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>    } else {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      // this is an old style WAL entry. The int that we just<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      // read is actually the length of a single KeyValue<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      this.add(KeyValueUtil.create(versionOrLength, in));<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>  @Override<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  public void write(DataOutput out) throws IOException {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    LOG.warn("WALEdit is being serialized to writable - only expected in test code");<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    out.writeInt(VERSION_2);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    out.writeInt(cells.size());<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // We interleave the two lists for code simplicity<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    for (Cell cell : cells) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      // This is not used in any of the core code flows so it is just fine to convert to KV<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      KeyValue kv = KeyValueUtil.ensureKeyValue(cell);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      if (compressionContext != null) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        KeyValueCompression.writeKV(out, kv, compressionContext);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      } else{<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        KeyValueUtil.write(kv, out);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    if (scopes == null) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      out.writeInt(0);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    } else {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      out.writeInt(scopes.size());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      for (byte[] key : scopes.keySet()) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        Bytes.writeByteArray(out, key);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        out.writeInt(scopes.get(key));<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  }<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>   * Reads WALEdit from cells.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   * @param cellDecoder Cell decoder.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * @param expectedCount Expected cell count.<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * @return Number of KVs read.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  public int readFromCells(Codec.Decoder cellDecoder, int expectedCount) throws IOException {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    cells.clear();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    cells.ensureCapacity(expectedCount);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    while (cells.size() &lt; expectedCount &amp;&amp; cellDecoder.advance()) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      cells.add(cellDecoder.current());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    return cells.size();<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 long heapSize() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    long ret = ClassSize.ARRAYLIST;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    for (Cell cell : cells) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      ret += CellUtil.estimatedHeapSizeOf(cell);<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    if (scopes != null) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      ret += ClassSize.TREEMAP;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      ret += ClassSize.align(scopes.size() * ClassSize.MAP_ENTRY);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      // TODO this isn't quite right, need help here<a name="line.277"></a>
 <span class="sourceLineNo">278</span>    }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    if (scopes != null) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      sb.append(" scopes: " + scopes.toString());<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    sb.append("&gt;]");<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    return sb.toString();<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">279</span>    return ret;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>  @Override<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public String toString() {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    StringBuilder sb = new StringBuilder();<a name="line.284"></a>
 <span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  public static WALEdit createFlushWALEdit(HRegionInfo hri, FlushDescriptor f) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    KeyValue kv = new KeyValue(getRowForRegion(hri), METAFAMILY, FLUSH,<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      EnvironmentEdgeManager.currentTime(), f.toByteArray());<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    return new WALEdit().add(kv);<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>  public static FlushDescriptor getFlushDescriptor(Cell cell) throws IOException {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    if (CellUtil.matchingColumn(cell, METAFAMILY, FLUSH)) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      return FlushDescriptor.parseFrom(CellUtil.cloneValue(cell));<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    return null;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>  public static WALEdit createRegionEventWALEdit(HRegionInfo hri,<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      RegionEventDescriptor regionEventDesc) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    KeyValue kv = new KeyValue(getRowForRegion(hri), METAFAMILY, REGION_EVENT,<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      EnvironmentEdgeManager.currentTime(), regionEventDesc.toByteArray());<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    return new WALEdit().add(kv);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public static RegionEventDescriptor getRegionEventDescriptor(Cell cell) throws IOException {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    if (CellUtil.matchingColumn(cell, METAFAMILY, REGION_EVENT)) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      return RegionEventDescriptor.parseFrom(CellUtil.cloneValue(cell));<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    return null;<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>  /**<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * Create a compaction WALEdit<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * @param c<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * @return A WALEdit that has &lt;code&gt;c&lt;/code&gt; serialized as its value<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public static WALEdit createCompaction(final HRegionInfo hri, final CompactionDescriptor c) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    byte [] pbbytes = c.toByteArray();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    KeyValue kv = new KeyValue(getRowForRegion(hri), METAFAMILY, COMPACTION,<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      EnvironmentEdgeManager.currentTime(), pbbytes);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    return new WALEdit().add(kv); //replication scope null so that this won't be replicated<a name="line.322"></a>
+<span class="sourceLineNo">286</span>    sb.append("[#edits: " + cells.size() + " = &lt;");<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    for (Cell cell : cells) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      sb.append(cell);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      sb.append("; ");<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    if (scopes != null) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      sb.append(" scopes: " + scopes.toString());<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    sb.append("&gt;]");<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    return sb.toString();<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>  public static WALEdit createFlushWALEdit(HRegionInfo hri, FlushDescriptor f) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    KeyValue kv = new KeyValue(getRowForRegion(hri), METAFAMILY, FLUSH,<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      EnvironmentEdgeManager.currentTime(), f.toByteArray());<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    return new WALEdit().add(kv);<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>  public static FlushDescriptor getFlushDescriptor(Cell cell) throws IOException {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    if (CellUtil.matchingColumn(cell, METAFAMILY, FLUSH)) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      return FlushDescriptor.parseFrom(CellUtil.cloneValue(cell));<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    }<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    return null;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public static WALEdit createRegionEventWALEdit(HRegionInfo hri,<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      RegionEventDescriptor regionEventDesc) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    KeyValue kv = new KeyValue(getRowForRegion(hri), METAFAMILY, REGION_EVENT,<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      EnvironmentEdgeManager.currentTime(), regionEventDesc.toByteArray());<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    return new WALEdit().add(kv);<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>  public static RegionEventDescriptor getRegionEventDescriptor(Cell cell) throws IOException {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    if (CellUtil.matchingColumn(cell, METAFAMILY, REGION_EVENT)) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      return RegionEventDescriptor.parseFrom(CellUtil.cloneValue(cell));<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    return null;<a name="line.322"></a>
 <span class="sourceLineNo">323</span>  }<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private static byte[] getRowForRegion(HRegionInfo hri) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    byte[] startKey = hri.getStartKey();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    if (startKey.length == 0) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      // empty row key is not allowed in mutations because it is both the start key and the end key<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      // we return the smallest byte[] that is bigger (in lex comparison) than byte[0].<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      return new byte[] {0};<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    return startKey;<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>  /**<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * Deserialized and returns a CompactionDescriptor is the KeyValue contains one.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   * @param kv the key value<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * @return deserialized CompactionDescriptor or null.<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   */<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  public static CompactionDescriptor getCompaction(Cell kv) throws IOException {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    if (CellUtil.matchingColumn(kv, METAFAMILY, COMPACTION)) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      return CompactionDescriptor.parseFrom(CellUtil.cloneValue(kv));<a name="line.342"></a>
+<span class="sourceLineNo">325</span>  /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * Create a compaction WALEdit<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * @param c<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   * @return A WALEdit that has &lt;code&gt;c&lt;/code&gt; serialized as its value<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   */<a name="line.329"></a>
+<span class="sourceLineNo">330</span>  public static WALEdit createCompaction(final HRegionInfo hri, final CompactionDescriptor c) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    byte [] pbbytes = c.toByteArray();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    KeyValue kv = new KeyValue(getRowForRegion(hri), METAFAMILY, COMPACTION,<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      EnvironmentEdgeManager.currentTime(), pbbytes);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    return new WALEdit().add(kv); //replication scope null so that this won't be replicated<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>  private static byte[] getRowForRegion(HRegionInfo hri) {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    byte[] startKey = hri.getStartKey();<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    if (startKey.length == 0) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      // empty row key is not allowed in mutations because it is both the start key and the end key<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      // we return the smallest byte[] that is bigger (in lex comparison) than byte[0].<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      return new byte[] {0};<a name="line.342"></a>
 <span class="sourceLineNo">343</span>    }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    return null;<a name="line.344"></a>
+<span class="sourceLineNo">344</span>    return startKey;<a name="line.344"></a>
 <span class="sourceLineNo">345</span>  }<a name="line.345"></a>
 <span class="sourceLineNo">346</span><a name="line.346"></a>
 <span class="sourceLineNo">347</span>  /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * Create a bulk loader WALEdit<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   *<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * @param hri                The HRegionInfo for the region in which we are bulk loading<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param bulkLoadDescriptor The descriptor for the Bulk Loader<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return The WALEdit for the BulkLoad<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   */<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  public static WALEdit createBulkLoadEvent(HRegionInfo hri,<a name="line.354"></a>
-<span class="sourceLineNo">355</span>                                            WALProtos.BulkLoadDescriptor bulkLoadDescriptor) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    KeyValue kv = new KeyValue(getRowForRegion(hri),<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        METAFAMILY,<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        BULK_LOAD,<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        EnvironmentEdgeManager.currentTime(),<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        bulkLoadDescriptor.toByteArray());<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    return new WALEdit().add(kv);<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>   * Deserialized and returns a BulkLoadDescriptor from the passed in Cell<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * @param cell the key value<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * @return deserialized BulkLoadDescriptor or null.<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   */<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  public static WALProtos.BulkLoadDescriptor getBulkLoadDescriptor(Cell cell) throws IOException {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    if (CellUtil.matchingColumn(cell, METAFAMILY, BULK_LOAD)) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      return WALProtos.BulkLoadDescriptor.parseFrom(CellUtil.cloneValue(cell));<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    return null;<a name="line.373"></a>
+<span class="sourceLineNo">348</span>   * Deserialized and returns a CompactionDescriptor is the KeyValue contains one.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   * @param kv the key value<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * @return deserialized CompactionDescriptor or null.<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  public static CompactionDescriptor getCompaction(Cell kv) throws IOException {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    if (CellUtil.matchingColumn(kv, METAFAMILY, COMPACTION)) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      return CompactionDescriptor.parseFrom(CellUtil.cloneValue(kv));<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return null;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  /**<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * Create a bulk loader WALEdit<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   *<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   * @param hri                The HRegionInfo for the region in which we are bulk loading<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   * @param bulkLoadDescriptor The descriptor for the Bulk Loader<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   * @return The WALEdit for the BulkLoad<a name="line.364"></a>
+<span class="sourceLineNo">365</span>   */<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  public static WALEdit createBulkLoadEvent(HRegionInfo hri,<a name="line.366"></a>
+<span class="sourceLineNo">367</span>                                            WALProtos.BulkLoadDescriptor bulkLoadDescriptor) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    KeyValue kv = new KeyValue(getRowForRegion(hri),<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        METAFAMILY,<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        BULK_LOAD,<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        EnvironmentEdgeManager.currentTime(),<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        bulkLoadDescriptor.toByteArray());<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    return new WALEdit().add(kv);<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">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>  /**<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * Deserialized and returns a BulkLoadDescriptor from the passed in Cell<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * @param cell the key value<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   * @return deserialized BulkLoadDescriptor or null.<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   */<a name="line.380"></a>
+<span class="sourceLineNo">381</span>  public static WALProtos.BulkLoadDescriptor getBulkLoadDescriptor(Cell cell) throws IOException {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (CellUtil.matchingColumn(cell, METAFAMILY, BULK_LOAD)) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return WALProtos.BulkLoadDescriptor.parseFrom(CellUtil.cloneValue(cell));<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return null;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>}<a name="line.387"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
index e6f7370..66fe895 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
@@ -151,9 +151,9 @@
 <span class="sourceLineNo">143</span>    int sleepMultiplier = 1;<a name="line.143"></a>
 <span class="sourceLineNo">144</span><a name="line.144"></a>
 <span class="sourceLineNo">145</span>    // Connect to peer cluster first, unless we have to stop<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    while (this.isRunning() &amp;&amp; replicationSinkMgr.getSinks().size() == 0) {<a name="line.146"></a>
+<span class="sourceLineNo">146</span>    while (this.isRunning() &amp;&amp; replicationSinkMgr.getNumSinks() == 0) {<a name="line.146"></a>
 <span class="sourceLineNo">147</span>      replicationSinkMgr.chooseSinks();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      if (this.isRunning() &amp;&amp; replicationSinkMgr.getSinks().size() == 0) {<a name="line.148"></a>
+<span class="sourceLineNo">148</span>      if (this.isRunning() &amp;&amp; replicationSinkMgr.getNumSinks() == 0) {<a name="line.148"></a>
 <span class="sourceLineNo">149</span>        if (sleepForRetries("Waiting for peers", sleepMultiplier)) {<a name="line.149"></a>
 <span class="sourceLineNo">150</span>          sleepMultiplier++;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>        }<a name="line.151"></a>
@@ -188,177 +188,192 @@
 <span class="sourceLineNo">180</span>    List&lt;Entry&gt; entries = replicateContext.getEntries();<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    String walGroupId = replicateContext.getWalGroupId();<a name="line.181"></a>
 <span class="sourceLineNo">182</span>    int sleepMultiplier = 1;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>    if (!peersSelected &amp;&amp; this.isRunning()) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      connectToPeers();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      peersSelected = true;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    if (replicationSinkMgr.getSinks().size() == 0) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return false;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    // minimum of: configured threads, number of 100-waledit batches,<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    //  and number of current sinks<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    int n = Math.min(Math.min(this.maxThreads, entries.size()/100+1),<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      replicationSinkMgr.getSinks().size());<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    List&lt;List&lt;Entry&gt;&gt; entryLists = new ArrayList&lt;List&lt;Entry&gt;&gt;(n);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    if (n == 1) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      entryLists.add(entries);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    } else {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      for (int i=0; i&lt;n; i++) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        entryLists.add(new ArrayList&lt;Entry&gt;(entries.size()/n+1));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // now group by region<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      for (Entry e : entries) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        entryLists.get(Math.abs(Bytes.hashCode(e.getKey().getEncodedRegionName())%n)).add(e);<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>    while (this.isRunning()) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      if (!isPeerEnabled()) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        if (sleepForRetries("Replication is disabled", sleepMultiplier)) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>          sleepMultiplier++;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        }<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        continue;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      try {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        if (LOG.isTraceEnabled()) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          LOG.trace("Replicating " + entries.size() +<a name="line.217"></a>
-<span class="sourceLineNo">218</span>              " entries of total size " + replicateContext.getSize());<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>        int futures = 0;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        for (int i=0; i&lt;entryLists.size(); i++) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          if (!entryLists.get(i).isEmpty()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>            if (LOG.isTraceEnabled()) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>              LOG.trace("Submitting " + entryLists.get(i).size() +<a name="line.225"></a>
-<span class="sourceLineNo">226</span>                  " entries of total size " + replicateContext.getSize());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>            // RuntimeExceptions encountered here bubble up and are handled in ReplicationSource<a name="line.228"></a>
-<span class="sourceLineNo">229</span>            pool.submit(createReplicator(entryLists.get(i), i));<a name="line.229"></a>
-<span class="sourceLineNo">230</span>            futures++;<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>        IOException iox = null;<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>        for (int i=0; i&lt;futures; i++) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          try {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>            // wait for all futures, remove successful parts<a name="line.237"></a>
-<span class="sourceLineNo">238</span>            // (only the remaining parts will be retried)<a name="line.238"></a>
-<span class="sourceLineNo">239</span>            Future&lt;Integer&gt; f = pool.take();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>            entryLists.set(f.get().intValue(), Collections.&lt;Entry&gt;emptyList());<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          } catch (InterruptedException ie) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>            iox =  new IOException(ie);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          } catch (ExecutionException ee) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>            // cause must be an IOException<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            iox = (IOException)ee.getCause();<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>        if (iox != null) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          // if we had any exceptions, try again<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          throw iox;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        // update metrics<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        this.metrics.setAgeOfLastShippedOp(entries.get(entries.size() - 1).getKey().getWriteTime(),<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          walGroupId);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        return true;<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>      } catch (IOException ioe) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        // Didn't ship anything, but must still age the last time we did<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        this.metrics.refreshAgeOfLastShippedOp(walGroupId);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        if (ioe instanceof RemoteException) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          ioe = ((RemoteException) ioe).unwrapRemoteException();<a name="line.261"></a>
-<span class="sourceLineNo">262</span>          LOG.warn("Can't replicate because of an error on the remote cluster: ", ioe);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          if (ioe instanceof TableNotFoundException) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>            if (sleepForRetries("A table is missing in the peer cluster. "<a name="line.264"></a>
-<span class="sourceLineNo">265</span>                + "Replication cannot proceed without losing data.", sleepMultiplier)) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>              sleepMultiplier++;<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>        } else {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>          if (ioe instanceof SocketTimeoutException) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>            // This exception means we waited for more than 60s and nothing<a name="line.271"></a>
-<span class="sourceLineNo">272</span>            // happened, the cluster is alive and calling it right away<a name="line.272"></a>
-<span class="sourceLineNo">273</span>            // even for a test just makes things worse.<a name="line.273"></a>
-<span class="sourceLineNo">274</span>            sleepForRetries("Encountered a SocketTimeoutException. Since the " +<a name="line.274"></a>
-<span class="sourceLineNo">275</span>              "call to the remote cluster timed out, which is usually " +<a name="line.275"></a>
-<span class="sourceLineNo">276</span>              "caused by a machine failure or a massive slowdown",<a name="line.276"></a>
-<span class="sourceLineNo">277</span>              this.socketTimeoutMultiplier);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          } else if (ioe instanceof ConnectException) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>            LOG.warn("Peer is unavailable, rechecking all sinks: ", ioe);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>            replicationSinkMgr.chooseSinks();<a name="line.280"></a>
-<span class="sourceLineNo">281</span>          } else {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>            LOG.warn("Can't replicate because of a local or network error: ", ioe);<a name="line.282"></a>
+<span class="sourceLineNo">183</span>    int numReplicated = 0;<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>    if (!peersSelected &amp;&amp; this.isRunning()) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      connectToPeers();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      peersSelected = true;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>    int numSinks = replicationSinkMgr.getNumSinks();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    if (numSinks == 0) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      LOG.warn("No replication sinks found, returning without replicating. The source should retry"<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          + " with the same set of edits.");<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      return false;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>    // minimum of: configured threads, number of 100-waledit batches,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    //  and number of current sinks<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    int n = Math.min(Math.min(this.maxThreads, entries.size()/100+1), numSinks);<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    List&lt;List&lt;Entry&gt;&gt; entryLists = new ArrayList&lt;List&lt;Entry&gt;&gt;(n);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    if (n == 1) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      entryLists.add(entries);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    } else {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      for (int i=0; i&lt;n; i++) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        entryLists.add(new ArrayList&lt;Entry&gt;(entries.size()/n+1));<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      // now group by region<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      for (Entry e : entries) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        entryLists.get(Math.abs(Bytes.hashCode(e.getKey().getEncodedRegionName())%n)).add(e);<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>    while (this.isRunning()) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      if (!isPeerEnabled()) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        if (sleepForRetries("Replication is disabled", sleepMultiplier)) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          sleepMultiplier++;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        }<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>      try {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        if (LOG.isTraceEnabled()) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          LOG.trace("Replicating " + entries.size() +<a name="line.222"></a>
+<span class="sourceLineNo">223</span>              " entries of total size " + replicateContext.getSize());<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>        int futures = 0;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        for (int i=0; i&lt;entryLists.size(); i++) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          if (!entryLists.get(i).isEmpty()) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>            if (LOG.isTraceEnabled()) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>              LOG.trace("Submitting " + entryLists.get(i).size() +<a name="line.230"></a>
+<span class="sourceLineNo">231</span>                  " entries of total size " + replicateContext.getSize());<a name="line.231"></a>
+<span class="sourceLineNo">232</span>            }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>            // RuntimeExceptions encountered here bubble up and are handled in ReplicationSource<a name="line.233"></a>
+<span class="sourceLineNo">234</span>            pool.submit(createReplicator(entryLists.get(i), i));<a name="line.234"></a>
+<span class="sourceLineNo">235</span>            futures++;<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>        IOException iox = null;<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>        for (int i=0; i&lt;futures; i++) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>          try {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>            // wait for all futures, remove successful parts<a name="line.242"></a>
+<span class="sourceLineNo">243</span>            // (only the remaining parts will be retried)<a name="line.243"></a>
+<span class="sourceLineNo">244</span>            Future&lt;Integer&gt; f = pool.take();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>            int index = f.get().intValue();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>            int batchSize =  entryLists.get(index).size();<a name="line.246"></a>
+<span class="sourceLineNo">247</span>            entryLists.set(index, Collections.&lt;Entry&gt;emptyList());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>            // Now, we have marked the batch as done replicating, record its size<a name="line.248"></a>
+<span class="sourceLineNo">249</span>            numReplicated += batchSize;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          } catch (InterruptedException ie) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>            iox =  new IOException(ie);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>          } catch (ExecutionException ee) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>            // cause must be an IOException<a name="line.253"></a>
+<span class="sourceLineNo">254</span>            iox = (IOException)ee.getCause();<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>        if (iox != null) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          // if we had any exceptions, try again<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          throw iox;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        if (numReplicated != entries.size()) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          // Something went wrong here and we don't know what, let's just fail and retry.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          LOG.warn("The number of edits replicated is different from the number received,"<a name="line.263"></a>
+<span class="sourceLineNo">264</span>              + " failing for now.");<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          return false;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        // update metrics<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        this.metrics.setAgeOfLastShippedOp(entries.get(entries.size() - 1).getKey().getWriteTime(),<a name="line.268"></a>
+<span class="sourceLineNo">269</span>          walGroupId);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        return true;<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>      } catch (IOException ioe) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        // Didn't ship anything, but must still age the last time we did<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        this.metrics.refreshAgeOfLastShippedOp(walGroupId);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        if (ioe instanceof RemoteException) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          ioe = ((RemoteException) ioe).unwrapRemoteException();<a name="line.276"></a>
+<span class="sourceLineNo">277</span>          LOG.warn("Can't replicate because of an error on the remote cluster: ", ioe);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          if (ioe instanceof TableNotFoundException) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            if (sleepForRetries("A table is missing in the peer cluster. "<a name="line.279"></a>
+<span class="sourceLineNo">280</span>                + "Replication cannot proceed without losing data.", sleepMultiplier)) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>              sleepMultiplier++;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>            }<a name="line.282"></a>
 <span class="sourceLineNo">283</span>          }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        }<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        if (sleepForRetries("Since we are unable to replicate", sleepMultiplier)) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          sleepMultiplier++;<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>    return false; // in case we exited before replicating<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>  protected boolean isPeerEnabled() {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    return ctx.getReplicationPeer().getPeerState() == PeerState.ENABLED;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>  @Override<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  protected void doStop() {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    disconnect(); //don't call super.doStop()<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    if (this.conn != null) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      try {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        this.conn.close();<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        this.conn = null;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      } catch (IOException e) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        LOG.warn("Failed to close the connection");<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>    exec.shutdownNow();<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    notifyStopped();<a name="line.309"></a>
+<span class="sourceLineNo">284</span>        } else {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          if (ioe instanceof SocketTimeoutException) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>            // This exception means we waited for more than 60s and nothing<a name="line.286"></a>
+<span class="sourceLineNo">287</span>            // happened, the cluster is alive and calling it right away<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            // even for a test just makes things worse.<a name="line.288"></a>
+<span class="sourceLineNo">289</span>            sleepForRetries("Encountered a SocketTimeoutException. Since the " +<a name="line.289"></a>
+<span class="sourceLineNo">290</span>              "call to the remote cluster timed out, which is usually " +<a name="line.290"></a>
+<span class="sourceLineNo">291</span>              "caused by a machine failure or a massive slowdown",<a name="line.291"></a>
+<span class="sourceLineNo">292</span>              this.socketTimeoutMultiplier);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>          } else if (ioe instanceof ConnectException) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>            LOG.warn("Peer is unavailable, rechecking all sinks: ", ioe);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>            replicationSinkMgr.chooseSinks();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>          } else {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>            LOG.warn("Can't replicate because of a local or network error: ", ioe);<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>        if (sleepForRetries("Since we are unable to replicate", sleepMultiplier)) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>          sleepMultiplier++;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    return false; // in case we exited before replicating<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>  protected boolean isPeerEnabled() {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    return ctx.getReplicationPeer().getPeerState() == PeerState.ENABLED;<a name="line.309"></a>
 <span class="sourceLineNo">310</span>  }<a name="line.310"></a>
 <span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  // is this needed? Nobody else will call doStop() otherwise<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  @Override<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  public State stopAndWait() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    doStop();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    return super.stopAndWait();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  @VisibleForTesting<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  protected Replicator createReplicator(List&lt;Entry&gt; entries, int ordinal) {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    return new Replicator(entries, ordinal);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  }<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>  @VisibleForTesting<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  protected class Replicator implements Callable&lt;Integer&gt; {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private List&lt;Entry&gt; entries;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    private int ordinal;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    public Replicator(List&lt;Entry&gt; entries, int ordinal) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.entries = entries;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.ordinal = ordinal;<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 Integer call() throws IOException {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      SinkPeer sinkPeer = null;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      try {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        sinkPeer = replicationSinkMgr.getReplicationSink();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        BlockingInterface rrs = sinkPeer.getRegionServer();<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        ReplicationProtbufUtil.replicateWALEntry(rrs, entries.toArray(new Entry[entries.size()]),<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          replicationClusterId, baseNamespaceDir, hfileArchiveDir);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        replicationSinkMgr.reportSinkSuccess(sinkPeer);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        return ordinal;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>      } catch (IOException ioe) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        if (sinkPeer != null) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          replicationSinkMgr.reportBadSink(sinkPeer);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        throw ioe;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
-<span class="sourceLineNo">353</span>}<a name="line.353"></a>
+<span class="sourceLineNo">312</span>  @Override<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  protected void doStop() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    disconnect(); //don't call super.doStop()<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    if (this.conn != null) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      try {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        this.conn.close();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        this.conn = null;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      } catch (IOException e) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        LOG.warn("Failed to close the connection");<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    exec.shutdownNow();<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    notifyStopped();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>  // is this needed? Nobody else will call doStop() otherwise<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  @Override<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public State stopAndWait() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    doStop();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    return super.stopAndWait();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  }<a name="line.332"></a>
+<span class="sourceLineNo">333</span><a name="line.333"></a>
+<span class="sourceLineNo">334</span>  @VisibleForTesting<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  protected Replicator createReplicator(List&lt;Entry&gt; entries, int ordinal) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    return new Replicator(entries, ordinal);<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>  @VisibleForTesting<a name="line.339"></a>
+<span class="sourceLineNo">340</span>  protected class Replicator implements Callable&lt;Integer&gt; {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    private List&lt;Entry&gt; entries;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    private int ordinal;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    public Replicator(List&lt;Entry&gt; entries, int ordinal) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      this.entries = entries;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      this.ordinal = ordinal;<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>    @Override<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    public Integer call() throws IOException {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      SinkPeer sinkPeer = null;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      try {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        sinkPeer = replicationSinkMgr.getReplicationSink();<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        BlockingInterface rrs = sinkPeer.getRegionServer();<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        ReplicationProtbufUtil.replicateWALEntry(rrs, entries.toArray(new Entry[entries.size()]),<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          replicationClusterId, baseNamespaceDir, hfileArchiveDir);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        replicationSinkMgr.reportSinkSuccess(sinkPeer);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        return ordinal;<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>      } catch (IOException ioe) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        if (sinkPeer != null) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>          replicationSinkMgr.reportBadSink(sinkPeer);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        }<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        throw ioe;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      }<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>}<a name="line.368"></a>
 
 
 


[44/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/client/ScannerCallable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/ScannerCallable.html b/devapidocs/org/apache/hadoop/hbase/client/ScannerCallable.html
index a988a0b..45c749f 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/ScannerCallable.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/ScannerCallable.html
@@ -199,22 +199,26 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#nextCallSeq">nextCallSeq</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#renew">renew</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#scan">scan</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ScanMetrics</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#scanMetrics">scanMetrics</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#scannerId">scannerId</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#serverHasMoreResults">serverHasMoreResults</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#serverHasMoreResultsContext">serverHasMoreResultsContext</a></strong></code>&nbsp;</td>
 </tr>
@@ -363,14 +367,21 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setHeartbeatMessage(boolean)">setHeartbeatMessage</a></strong>(boolean&nbsp;heartbeatMessage)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setRenew(boolean)">setRenew</a></strong>(boolean&nbsp;val)</code>
+<div class="block">Indicate whether we make a call only to renew the lease, but without affected the scanner in
+ any other way.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setServerHasMoreResults(boolean)">setServerHasMoreResults</a></strong>(boolean&nbsp;serverHasMoreResults)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#updateResultsMetrics(org.apache.hadoop.hbase.client.Result[])">updateResultsMetrics</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;rrs)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#updateServerSideMetrics(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse)">updateServerSideMetrics</a></strong>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse&nbsp;response)</code>
 <div class="block">Use the scan metrics returned by the server to add to the identically named counters in the
@@ -462,13 +473,22 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.73">closed</a></pre>
 </li>
 </ul>
+<a name="renew">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>renew</h4>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.74">renew</a></pre>
+</li>
+</ul>
 <a name="scan">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>scan</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.74">scan</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.75">scan</a></pre>
 </li>
 </ul>
 <a name="caching">
@@ -477,7 +497,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>caching</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.75">caching</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.76">caching</a></pre>
 </li>
 </ul>
 <a name="cConnection">
@@ -486,7 +506,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>cConnection</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.76">cConnection</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.77">cConnection</a></pre>
 </li>
 </ul>
 <a name="scanMetrics">
@@ -495,7 +515,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>scanMetrics</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ScanMetrics</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.77">scanMetrics</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ScanMetrics</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.78">scanMetrics</a></pre>
 </li>
 </ul>
 <a name="logScannerActivity">
@@ -504,7 +524,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>logScannerActivity</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.78">logScannerActivity</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.79">logScannerActivity</a></pre>
 </li>
 </ul>
 <a name="logCutOffLatency">
@@ -513,7 +533,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>logCutOffLatency</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.79">logCutOffLatency</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.80">logCutOffLatency</a></pre>
 </li>
 </ul>
 <a name="myAddress">
@@ -522,7 +542,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>myAddress</h4>
-<pre>private static&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/ScannerCallable.html#line.80">myAddress</a></pre>
+<pre>private static&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/ScannerCallable.html#line.81">myAddress</a></pre>
 </li>
 </ul>
 <a name="id">
@@ -531,7 +551,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>id</h4>
-<pre>protected final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.81">id</a></pre>
+<pre>protected final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.82">id</a></pre>
 </li>
 </ul>
 <a name="serverHasMoreResultsContext">
@@ -540,7 +560,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>serverHasMoreResultsContext</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.82">serverHasMoreResultsContext</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.83">serverHasMoreResultsContext</a></pre>
 </li>
 </ul>
 <a name="serverHasMoreResults">
@@ -549,7 +569,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>serverHasMoreResults</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.83">serverHasMoreResults</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.84">serverHasMoreResults</a></pre>
 </li>
 </ul>
 <a name="heartbeatMessage">
@@ -558,7 +578,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>heartbeatMessage</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.89">heartbeatMessage</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.90">heartbeatMessage</a></pre>
 <div class="block">Saves whether or not the most recent response from the server was a heartbeat message.
  Heartbeat messages are identified by the flag <code>ClientProtos.ScanResponse.getHeartbeatMessage()</code></div>
 </li>
@@ -569,7 +589,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>isRegionServerRemote</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.99">isRegionServerRemote</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.100">isRegionServerRemote</a></pre>
 </li>
 </ul>
 <a name="nextCallSeq">
@@ -578,7 +598,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>nextCallSeq</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.100">nextCallSeq</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.101">nextCallSeq</a></pre>
 </li>
 </ul>
 <a name="controllerFactory">
@@ -587,7 +607,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>controllerFactory</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcControllerFactory.html" title="class in org.apache.hadoop.hbase.ipc">RpcControllerFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.101">controllerFactory</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcControllerFactory.html" title="class in org.apache.hadoop.hbase.ipc">RpcControllerFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.102">controllerFactory</a></pre>
 </li>
 </ul>
 <a name="controller">
@@ -596,7 +616,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockListLast">
 <li class="blockList">
 <h4>controller</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/PayloadCarryingRpcController.html" title="class in org.apache.hadoop.hbase.ipc">PayloadCarryingRpcController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.102">controller</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/PayloadCarryingRpcController.html" title="class in org.apache.hadoop.hbase.ipc">PayloadCarryingRpcController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.103">controller</a></pre>
 </li>
 </ul>
 </li>
@@ -613,7 +633,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>ScannerCallable</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.113">ScannerCallable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;connection,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.114">ScannerCallable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;connection,
                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                <a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ScanMetrics</a>&nbsp;scanMetrics,
@@ -629,7 +649,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ScannerCallable</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.125">ScannerCallable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;connection,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.126">ScannerCallable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;connection,
                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                <a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ScanMetrics</a>&nbsp;scanMetrics,
@@ -652,7 +672,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>getController</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/ipc/PayloadCarryingRpcController.html" title="class in org.apache.hadoop.hbase.ipc">PayloadCarryingRpcController</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.138">getController</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/ipc/PayloadCarryingRpcController.html" title="class in org.apache.hadoop.hbase.ipc">PayloadCarryingRpcController</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.139">getController</a>()</pre>
 </li>
 </ul>
 <a name="prepare(boolean)">
@@ -661,7 +681,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>prepare</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.147">prepare</a>(boolean&nbsp;reload)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.148">prepare</a>(boolean&nbsp;reload)
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCallable.html#prepare(boolean)">RegionServerCallable</a></code></strong></div>
 <div class="block">Prepare for connection to the server hosting region with row from tablename.  Does lookup
@@ -682,7 +702,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>checkIfRegionServerIsRemote</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.179">checkIfRegionServerIsRemote</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.180">checkIfRegionServerIsRemote</a>()</pre>
 <div class="block">compare the local machine hostname with region server's hostname
  to decide if hbase client connects to a remote region server</div>
 </li>
@@ -693,7 +713,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.189">call</a>(int&nbsp;callTimeout)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.190">call</a>(int&nbsp;callTimeout)
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html#call(int)">RetryingCallable</a></code></strong></div>
 <div class="block">Computes a result, or throws an exception if unable to do so.</div>
@@ -709,7 +729,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>isHeartbeatMessage</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.315">isHeartbeatMessage</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.316">isHeartbeatMessage</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true when the most recent RPC response indicated that the response was a heartbeat
          message. Heartbeat messages are sent back from the server when the processing of the
          scan request exceeds a certain time threshold. Heartbeats allow the server to avoid
@@ -722,7 +742,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>setHeartbeatMessage</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.319">setHeartbeatMessage</a>(boolean&nbsp;heartbeatMessage)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.320">setHeartbeatMessage</a>(boolean&nbsp;heartbeatMessage)</pre>
 </li>
 </ul>
 <a name="incRPCcallsMetrics()">
@@ -731,7 +751,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>incRPCcallsMetrics</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.323">incRPCcallsMetrics</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.324">incRPCcallsMetrics</a>()</pre>
 </li>
 </ul>
 <a name="updateResultsMetrics(org.apache.hadoop.hbase.client.Result[])">
@@ -740,7 +760,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>updateResultsMetrics</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.333">updateResultsMetrics</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;rrs)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.334">updateResultsMetrics</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;rrs)</pre>
 </li>
 </ul>
 <a name="updateServerSideMetrics(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse)">
@@ -749,7 +769,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>updateServerSideMetrics</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.355">updateServerSideMetrics</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse&nbsp;response)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.356">updateServerSideMetrics</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse&nbsp;response)</pre>
 <div class="block">Use the scan metrics returned by the server to add to the identically named counters in the
  client side metrics. If a counter does not exist with the same name as the server side metric,
  the attempt to increase the counter will fail.</div>
@@ -762,7 +782,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.364">close</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.365">close</a>()</pre>
 </li>
 </ul>
 <a name="openScanner()">
@@ -771,7 +791,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>openScanner</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.383">openScanner</a>()
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.384">openScanner</a>()
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -783,7 +803,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>getScan</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.402">getScan</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.403">getScan</a>()</pre>
 </li>
 </ul>
 <a name="setClose()">
@@ -792,17 +812,29 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>setClose</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.409">setClose</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.410">setClose</a>()</pre>
 <div class="block">Call this when the next invocation of call should close the scanner</div>
 </li>
 </ul>
+<a name="setRenew(boolean)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setRenew</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.419">setRenew</a>(boolean&nbsp;val)</pre>
+<div class="block">Indicate whether we make a call only to renew the lease, but without affected the scanner in
+ any other way.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>val</code> - true if only the lease should be renewed</dd></dl>
+</li>
+</ul>
 <a name="getHRegionInfo()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getHRegionInfo</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.417">getHRegionInfo</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.427">getHRegionInfo</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCallable.html#getHRegionInfo()">getHRegionInfo</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCallable.html" title="class in org.apache.hadoop.hbase.client">RegionServerCallable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&gt;</code></dd>
@@ -815,7 +847,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>getCaching</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.428">getCaching</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.438">getCaching</a>()</pre>
 <div class="block">Get the number of rows that will be fetched on next</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the number of rows for caching</dd></dl>
 </li>
@@ -826,7 +858,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>getConnection</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.433">getConnection</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.443">getConnection</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCallable.html#getConnection()">getConnection</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCallable.html" title="class in org.apache.hadoop.hbase.client">RegionServerCallable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&gt;</code></dd>
@@ -839,7 +871,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>setCaching</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.441">setCaching</a>(int&nbsp;caching)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.451">setCaching</a>(int&nbsp;caching)</pre>
 <div class="block">Set the number of rows that will be fetched on next</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>caching</code> - the number of rows for caching</dd></dl>
 </li>
@@ -850,7 +882,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>getScannerCallableForReplica</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.445">getScannerCallableForReplica</a>(int&nbsp;id)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.455">getScannerCallableForReplica</a>(int&nbsp;id)</pre>
 </li>
 </ul>
 <a name="getServerHasMoreResults()">
@@ -859,7 +891,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerHasMoreResults</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.456">getServerHasMoreResults</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.466">getServerHasMoreResults</a>()</pre>
 <div class="block">Should the client attempt to fetch more results from this region</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>True if the client should attempt to fetch more results, false otherwise.</dd></dl>
 </li>
@@ -870,7 +902,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>setServerHasMoreResults</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.461">setServerHasMoreResults</a>(boolean&nbsp;serverHasMoreResults)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.471">setServerHasMoreResults</a>(boolean&nbsp;serverHasMoreResults)</pre>
 </li>
 </ul>
 <a name="hasMoreResultsContext()">
@@ -879,7 +911,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockList">
 <li class="blockList">
 <h4>hasMoreResultsContext</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.470">hasMoreResultsContext</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.480">hasMoreResultsContext</a>()</pre>
 <div class="block">Did the server respond with information about whether more results might exist.
  Not guaranteed to respond with older server versions</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>True if the server responded with information about more results.</dd></dl>
@@ -891,7 +923,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RegionServerCalla
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setHasMoreResultsContext</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.474">setHasMoreResultsContext</a>(boolean&nbsp;serverHasMoreResultsContext)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallable.html#line.484">setHasMoreResultsContext</a>(boolean&nbsp;serverHasMoreResultsContext)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html b/devapidocs/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html
index 1f18a8c..0b9ec31 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre> class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.330">ScannerCallableWithReplicas.RetryingRPC</a>
+<pre> class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.334">ScannerCallableWithReplicas.RetryingRPC</a>
 extends <a href="http://docs.oracle.com/javase/7/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/client/RetryingCallable.html" title="interface in org.apache.hadoop.hbase.client">RetryingCallable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[],<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&gt;&gt;, <a href="../../../../../org/apache/hadoop/hbase/client/Cancellable.html" title="interface in org.apache.hadoop.hbase.client">Cancellable</a></pre>
 </li>
@@ -233,7 +233,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>callable</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.331">callable</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.335">callable</a></pre>
 </li>
 </ul>
 <a name="caller">
@@ -242,7 +242,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>caller</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/RpcRetryingCaller.html" title="interface in org.apache.hadoop.hbase.client">RpcRetryingCaller</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.332">caller</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/RpcRetryingCaller.html" title="interface in org.apache.hadoop.hbase.client">RpcRetryingCaller</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.336">caller</a></pre>
 </li>
 </ul>
 <a name="cancelled">
@@ -251,7 +251,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockListLast">
 <li class="blockList">
 <h4>cancelled</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.333">cancelled</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.337">cancelled</a></pre>
 </li>
 </ul>
 </li>
@@ -268,7 +268,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ScannerCallableWithReplicas.RetryingRPC</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.335">ScannerCallableWithReplicas.RetryingRPC</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&nbsp;callable)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.339">ScannerCallableWithReplicas.RetryingRPC</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&nbsp;callable)</pre>
 </li>
 </ul>
 </li>
@@ -285,7 +285,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>call</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="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[],<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.350">call</a>(int&nbsp;callTimeout)
+<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="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[],<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.354">call</a>(int&nbsp;callTimeout)
                                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html#call(int)">RetryingCallable</a></code></strong></div>
 <div class="block">Computes a result, or throws an exception if unable to do so.</div>
@@ -304,7 +304,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>prepare</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.361">prepare</a>(boolean&nbsp;reload)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.365">prepare</a>(boolean&nbsp;reload)
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html#prepare(boolean)">RetryingCallable</a></code></strong></div>
 <div class="block">Prepare by setting up any connections to servers, etc., ahead of <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html#call(int)"><code>RetryingCallable.call(int)</code></a> invocation.</div>
@@ -322,7 +322,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>throwable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.372">throwable</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.376">throwable</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t,
              boolean&nbsp;retrying)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html#throwable(java.lang.Throwable,%20boolean)">RetryingCallable</a></code></strong></div>
 <div class="block">Called when <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html#call(int)"><code>RetryingCallable.call(int)</code></a> throws an exception and we are going to retry; take action to
@@ -340,7 +340,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>getExceptionMessageAdditionalDetail</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/ScannerCallableWithReplicas.RetryingRPC.html#line.377">getExceptionMessageAdditionalDetail</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/ScannerCallableWithReplicas.RetryingRPC.html#line.381">getExceptionMessageAdditionalDetail</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html#getExceptionMessageAdditionalDetail()">getExceptionMessageAdditionalDetail</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html" title="interface in org.apache.hadoop.hbase.client">RetryingCallable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[],<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&gt;&gt;</code></dd>
@@ -355,7 +355,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>sleep</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.382">sleep</a>(long&nbsp;pause,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.386">sleep</a>(long&nbsp;pause,
          int&nbsp;tries)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -369,7 +369,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>cancel</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.387">cancel</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.391">cancel</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Cancellable.html#cancel()">cancel</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Cancellable.html" title="interface in org.apache.hadoop.hbase.client">Cancellable</a></code></dd>
@@ -382,7 +382,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isCancelled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.397">isCancelled</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.RetryingRPC.html#line.401">isCancelled</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Cancellable.html#isCancelled()">isCancelled</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Cancellable.html" title="interface in org.apache.hadoop.hbase.client">Cancellable</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html b/devapidocs/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html
index 8d05bbe..a80f4e3 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html
@@ -317,27 +317,31 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#setServerHasMoreResults(boolean)">setServerHasMoreResults</a></strong>(boolean&nbsp;serverHasMoreResults)</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#setRenew(boolean)">setRenew</a></strong>(boolean&nbsp;val)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#setServerHasMoreResults(boolean)">setServerHasMoreResults</a></strong>(boolean&nbsp;serverHasMoreResults)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#setStartRowForReplicaCallable(org.apache.hadoop.hbase.client.ScannerCallable)">setStartRowForReplicaCallable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&nbsp;callable)</code>
 <div class="block">Set the start row for the replica callable based on the state of the last result received.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#sleep(long,%20int)">sleep</a></strong>(long&nbsp;pause,
           int&nbsp;tries)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#switchedToADifferentReplica()">switchedToADifferentReplica</a></strong>()</code>
 <div class="block">When a scanner switches in the middle of scanning (the 'next' call fails
  for example), the upper layer <a href="../../../../../org/apache/hadoop/hbase/client/ClientScanner.html" title="class in org.apache.hadoop.hbase.client"><code>ClientScanner</code></a> needs to know</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#throwable(java.lang.Throwable,%20boolean)">throwable</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t,
                   boolean&nbsp;retrying)</code>
@@ -345,7 +349,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
  make it so we succeed on next call (clear caches, do relookup of locations, etc.).</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#updateCurrentlyServingReplica(org.apache.hadoop.hbase.client.ScannerCallable,%20org.apache.hadoop.hbase.client.Result[],%20java.util.concurrent.atomic.AtomicBoolean,%20java.util.concurrent.ExecutorService)">updateCurrentlyServingReplica</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&nbsp;scanner,
                                                           <a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;result,
@@ -553,13 +557,22 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.97">setClose</a>()</pre>
 </li>
 </ul>
+<a name="setRenew(boolean)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setRenew</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.101">setRenew</a>(boolean&nbsp;val)</pre>
+</li>
+</ul>
 <a name="setCaching(int)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>setCaching</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.101">setCaching</a>(int&nbsp;caching)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.105">setCaching</a>(int&nbsp;caching)</pre>
 </li>
 </ul>
 <a name="getCaching()">
@@ -568,7 +581,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>getCaching</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.105">getCaching</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.109">getCaching</a>()</pre>
 </li>
 </ul>
 <a name="getHRegionInfo()">
@@ -577,7 +590,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>getHRegionInfo</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.109">getHRegionInfo</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.113">getHRegionInfo</a>()</pre>
 </li>
 </ul>
 <a name="getServerHasMoreResults()">
@@ -586,7 +599,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerHasMoreResults</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.113">getServerHasMoreResults</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.117">getServerHasMoreResults</a>()</pre>
 </li>
 </ul>
 <a name="setServerHasMoreResults(boolean)">
@@ -595,7 +608,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>setServerHasMoreResults</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.117">setServerHasMoreResults</a>(boolean&nbsp;serverHasMoreResults)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.121">setServerHasMoreResults</a>(boolean&nbsp;serverHasMoreResults)</pre>
 </li>
 </ul>
 <a name="hasMoreResultsContext()">
@@ -604,7 +617,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>hasMoreResultsContext</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.121">hasMoreResultsContext</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.125">hasMoreResultsContext</a>()</pre>
 </li>
 </ul>
 <a name="setHasMoreResultsContext(boolean)">
@@ -613,7 +626,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>setHasMoreResultsContext</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.125">setHasMoreResultsContext</a>(boolean&nbsp;serverHasMoreResultsContext)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.129">setHasMoreResultsContext</a>(boolean&nbsp;serverHasMoreResultsContext)</pre>
 </li>
 </ul>
 <a name="call(int)">
@@ -622,7 +635,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.130">call</a>(int&nbsp;timeout)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.134">call</a>(int&nbsp;timeout)
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html#call(int)">RetryingCallable</a></code></strong></div>
 <div class="block">Computes a result, or throws an exception if unable to do so.</div>
@@ -641,7 +654,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>updateCurrentlyServingReplica</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.218">updateCurrentlyServingReplica</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&nbsp;scanner,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.222">updateCurrentlyServingReplica</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&nbsp;scanner,
                                  <a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;result,
                                  <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a>&nbsp;done,
                                  <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool)</pre>
@@ -653,7 +666,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>switchedToADifferentReplica</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.261">switchedToADifferentReplica</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.265">switchedToADifferentReplica</a>()</pre>
 <div class="block">When a scanner switches in the middle of scanning (the 'next' call fails
  for example), the upper layer <a href="../../../../../org/apache/hadoop/hbase/client/ClientScanner.html" title="class in org.apache.hadoop.hbase.client"><code>ClientScanner</code></a> needs to know</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd></dd></dl>
@@ -665,7 +678,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>isHeartbeatMessage</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.271">isHeartbeatMessage</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.275">isHeartbeatMessage</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true when the most recent RPC response indicated that the response was a heartbeat
          message. Heartbeat messages are sent back from the server when the processing of the
          scan request exceeds a certain time threshold. Heartbeats allow the server to avoid
@@ -678,7 +691,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>addCallsForCurrentReplica</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.275">addCallsForCurrentReplica</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ResultBoundedCompletionService.html" title="class in org.apache.hadoop.hbase.client">ResultBoundedCompletionService</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[],<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&gt;&gt;&nbsp;cs,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.279">addCallsForCurrentReplica</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ResultBoundedCompletionService.html" title="class in org.apache.hadoop.hbase.client">ResultBoundedCompletionService</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[],<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&gt;&gt;&nbsp;cs,
                              <a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a>&nbsp;rl)</pre>
 </li>
 </ul>
@@ -688,7 +701,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>addCallsForOtherReplicas</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.282">addCallsForOtherReplicas</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ResultBoundedCompletionService.html" title="class in org.apache.hadoop.hbase.client">ResultBoundedCompletionService</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[],<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&gt;&gt;&nbsp;cs,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.286">addCallsForOtherReplicas</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ResultBoundedCompletionService.html" title="class in org.apache.hadoop.hbase.client">ResultBoundedCompletionService</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[],<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&gt;&gt;&nbsp;cs,
                             <a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a>&nbsp;rl,
                             int&nbsp;min,
                             int&nbsp;max)</pre>
@@ -700,7 +713,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>setStartRowForReplicaCallable</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.304">setStartRowForReplicaCallable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&nbsp;callable)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.308">setStartRowForReplicaCallable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&nbsp;callable)</pre>
 <div class="block">Set the start row for the replica callable based on the state of the last result received.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>callable</code> - The callable to set the start row on</dd></dl>
 </li>
@@ -711,7 +724,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>isAnyRPCcancelled</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.326">isAnyRPCcancelled</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.330">isAnyRPCcancelled</a>()</pre>
 </li>
 </ul>
 <a name="prepare(boolean)">
@@ -720,7 +733,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>prepare</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.403">prepare</a>(boolean&nbsp;reload)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.407">prepare</a>(boolean&nbsp;reload)
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html#prepare(boolean)">RetryingCallable</a></code></strong></div>
 <div class="block">Prepare by setting up any connections to servers, etc., ahead of <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html#call(int)"><code>RetryingCallable.call(int)</code></a> invocation.</div>
@@ -738,7 +751,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>throwable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.407">throwable</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.411">throwable</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t,
              boolean&nbsp;retrying)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html#throwable(java.lang.Throwable,%20boolean)">RetryingCallable</a></code></strong></div>
 <div class="block">Called when <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html#call(int)"><code>RetryingCallable.call(int)</code></a> throws an exception and we are going to retry; take action to
@@ -756,7 +769,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockList">
 <li class="blockList">
 <h4>getExceptionMessageAdditionalDetail</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/ScannerCallableWithReplicas.html#line.412">getExceptionMessageAdditionalDetail</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/ScannerCallableWithReplicas.html#line.416">getExceptionMessageAdditionalDetail</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html#getExceptionMessageAdditionalDetail()">getExceptionMessageAdditionalDetail</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallable.html" title="interface in org.apache.hadoop.hbase.client">RetryingCallable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&gt;</code></dd>
@@ -771,7 +784,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallab
 <ul class="blockListLast">
 <li class="blockList">
 <h4>sleep</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.417">sleep</a>(long&nbsp;pause,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#line.421">sleep</a>(long&nbsp;pause,
          int&nbsp;tries)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/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 bb7fc4e..056339d 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -389,10 +389,10 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Durability</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Admin.CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Admin.CompactType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Consistency</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">AsyncProcess.Retry</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="strong">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="strong">TableState.State</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="strong">IsolationLevel</span></a></li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html
index 5f1eaf7..88a19a5 100644
--- a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html
+++ b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateAsyncCallback.html
@@ -124,7 +124,7 @@ implements org.apache.zookeeper.AsyncCallback.StringCallback</pre>
 <!--   -->
 </a>
 <h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.zookeeper.AsyncCallback</h3>
-<code>org.apache.zookeeper.AsyncCallback.ACLCallback, org.apache.zookeeper.AsyncCallback.Children2Callback, org.apache.zookeeper.AsyncCallback.ChildrenCallback, org.apache.zookeeper.AsyncCallback.DataCallback, org.apache.zookeeper.AsyncCallback.MultiCallback, org.apache.zookeeper.AsyncCallback.StatCallback, org.apache.zookeeper.AsyncCallback.StringCallback, org.apache.zookeeper.AsyncCallback.VoidCallback</code></li>
+<code>org.apache.zookeeper.AsyncCallback.ACLCallback, org.apache.zookeeper.AsyncCallback.Children2Callback, org.apache.zookeeper.AsyncCallback.ChildrenCallback, org.apache.zookeeper.AsyncCallback.DataCallback, org.apache.zookeeper.AsyncCallback.StatCallback, org.apache.zookeeper.AsyncCallback.StringCallback, org.apache.zookeeper.AsyncCallback.VoidCallback</code></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html
index fc114fe..c99b9ce 100644
--- a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html
+++ b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.CreateRescanAsyncCallback.html
@@ -127,7 +127,7 @@ implements org.apache.zookeeper.AsyncCallback.StringCallback</pre>
 <!--   -->
 </a>
 <h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.zookeeper.AsyncCallback</h3>
-<code>org.apache.zookeeper.AsyncCallback.ACLCallback, org.apache.zookeeper.AsyncCallback.Children2Callback, org.apache.zookeeper.AsyncCallback.ChildrenCallback, org.apache.zookeeper.AsyncCallback.DataCallback, org.apache.zookeeper.AsyncCallback.MultiCallback, org.apache.zookeeper.AsyncCallback.StatCallback, org.apache.zookeeper.AsyncCallback.StringCallback, org.apache.zookeeper.AsyncCallback.VoidCallback</code></li>
+<code>org.apache.zookeeper.AsyncCallback.ACLCallback, org.apache.zookeeper.AsyncCallback.Children2Callback, org.apache.zookeeper.AsyncCallback.ChildrenCallback, org.apache.zookeeper.AsyncCallback.DataCallback, org.apache.zookeeper.AsyncCallback.StatCallback, org.apache.zookeeper.AsyncCallback.StringCallback, org.apache.zookeeper.AsyncCallback.VoidCallback</code></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html
index 0b858ac..c652104 100644
--- a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html
+++ b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.DeleteAsyncCallback.html
@@ -124,7 +124,7 @@ implements org.apache.zookeeper.AsyncCallback.VoidCallback</pre>
 <!--   -->
 </a>
 <h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.zookeeper.AsyncCallback</h3>
-<code>org.apache.zookeeper.AsyncCallback.ACLCallback, org.apache.zookeeper.AsyncCallback.Children2Callback, org.apache.zookeeper.AsyncCallback.ChildrenCallback, org.apache.zookeeper.AsyncCallback.DataCallback, org.apache.zookeeper.AsyncCallback.MultiCallback, org.apache.zookeeper.AsyncCallback.StatCallback, org.apache.zookeeper.AsyncCallback.StringCallback, org.apache.zookeeper.AsyncCallback.VoidCallback</code></li>
+<code>org.apache.zookeeper.AsyncCallback.ACLCallback, org.apache.zookeeper.AsyncCallback.Children2Callback, org.apache.zookeeper.AsyncCallback.ChildrenCallback, org.apache.zookeeper.AsyncCallback.DataCallback, org.apache.zookeeper.AsyncCallback.StatCallback, org.apache.zookeeper.AsyncCallback.StringCallback, org.apache.zookeeper.AsyncCallback.VoidCallback</code></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html
index 44d5a5f..2763e57 100644
--- a/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html
+++ b/devapidocs/org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.GetDataAsyncCallback.html
@@ -124,7 +124,7 @@ implements org.apache.zookeeper.AsyncCallback.DataCallback</pre>
 <!--   -->
 </a>
 <h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.zookeeper.AsyncCallback</h3>
-<code>org.apache.zookeeper.AsyncCallback.ACLCallback, org.apache.zookeeper.AsyncCallback.Children2Callback, org.apache.zookeeper.AsyncCallback.ChildrenCallback, org.apache.zookeeper.AsyncCallback.DataCallback, org.apache.zookeeper.AsyncCallback.MultiCallback, org.apache.zookeeper.AsyncCallback.StatCallback, org.apache.zookeeper.AsyncCallback.StringCallback, org.apache.zookeeper.AsyncCallback.VoidCallback</code></li>
+<code>org.apache.zookeeper.AsyncCallback.ACLCallback, org.apache.zookeeper.AsyncCallback.Children2Callback, org.apache.zookeeper.AsyncCallback.ChildrenCallback, org.apache.zookeeper.AsyncCallback.DataCallback, org.apache.zookeeper.AsyncCallback.StatCallback, org.apache.zookeeper.AsyncCallback.StringCallback, org.apache.zookeeper.AsyncCallback.VoidCallback</code></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.GetDataAsyncCallback.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.GetDataAsyncCallback.html b/devapidocs/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.GetDataAsyncCallback.html
index 54b442d..c984b19 100644
--- a/devapidocs/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.GetDataAsyncCallback.html
+++ b/devapidocs/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.GetDataAsyncCallback.html
@@ -124,7 +124,7 @@ implements org.apache.zookeeper.AsyncCallback.DataCallback</pre>
 <!--   -->
 </a>
 <h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.zookeeper.AsyncCallback</h3>
-<code>org.apache.zookeeper.AsyncCallback.ACLCallback, org.apache.zookeeper.AsyncCallback.Children2Callback, org.apache.zookeeper.AsyncCallback.ChildrenCallback, org.apache.zookeeper.AsyncCallback.DataCallback, org.apache.zookeeper.AsyncCallback.MultiCallback, org.apache.zookeeper.AsyncCallback.StatCallback, org.apache.zookeeper.AsyncCallback.StringCallback, org.apache.zookeeper.AsyncCallback.VoidCallback</code></li>
+<code>org.apache.zookeeper.AsyncCallback.ACLCallback, org.apache.zookeeper.AsyncCallback.Children2Callback, org.apache.zookeeper.AsyncCallback.ChildrenCallback, org.apache.zookeeper.AsyncCallback.DataCallback, org.apache.zookeeper.AsyncCallback.StatCallback, org.apache.zookeeper.AsyncCallback.StringCallback, org.apache.zookeeper.AsyncCallback.VoidCallback</code></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/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 3e5c0d2..e2a480d 100644
--- a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
@@ -96,8 +96,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="strong">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="strong">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="strong">ExecutorType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/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 f23de17..bdbfb06 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -161,11 +161,11 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">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="strong">FuzzyRowFilter.SatisfiesCode</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="strong">RegexStringComparator.EngineType</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="strong">FilterList.Operator</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="strong">CompareFilter.CompareOp</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="strong">FuzzyRowFilter.SatisfiesCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FilterWrapper.FilterRowRetCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FuzzyRowFilter.Order</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="strong">Filter.ReturnCode</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="strong">BitComparator.BitwiseOp</span></a></li>


[31/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
index abb8a15..be615ae 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
@@ -2525,318 +2525,325 @@
 <span class="sourceLineNo">2517</span>        ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2517"></a>
 <span class="sourceLineNo">2518</span>      }<a name="line.2518"></a>
 <span class="sourceLineNo">2519</span>      assert scanner != null;<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>      RpcCallContext context = RpcServer.getCurrentCall();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>      Object lastBlock = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span><a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      quota = getQuotaManager().checkQuota(region, OperationQuota.OperationType.SCAN);<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      long maxQuotaResultSize = Math.min(maxScannerResultSize, quota.getReadAvailable());<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span><a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>      if (rows &gt; 0) {<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>        // if nextCallSeq does not match throw Exception straight away. This needs to be<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        // performed even before checking of Lease.<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>        // See HBASE-5974<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>        if (request.hasNextCallSeq()) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>          if (rsh != null) {<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>            if (request.getNextCallSeq() != rsh.getNextCallSeq()) {<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>              throw new OutOfOrderScannerNextException(<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>                "Expected nextCallSeq: " + rsh.getNextCallSeq()<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>                + " But the nextCallSeq got from client: " + request.getNextCallSeq() +<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>                "; request=" + TextFormat.shortDebugString(request));<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>            }<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>            // Increment the nextCallSeq value which is the next expected from client.<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>            rsh.incNextCallSeq();<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>          }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>        }<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        try {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>          // Remove lease while its being processed in server; protects against case<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>          // where processing of request takes &gt; lease expiration time.<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>          lease = regionServer.leases.removeLease(scannerName);<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>          List&lt;Result&gt; results = new ArrayList&lt;Result&gt;();<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span><a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>          boolean done = false;<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>          // Call coprocessor. Get region info from scanner.<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>            Boolean bypass = region.getCoprocessorHost().preScannerNext(<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>              scanner, results, rows);<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>            if (!results.isEmpty()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>              for (Result r : results) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>                lastBlock = addSize(context, r, lastBlock);<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>              }<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>            }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>            if (bypass != null &amp;&amp; bypass.booleanValue()) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>              done = true;<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>            }<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          }<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span><a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>          if (!done) {<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>            long maxResultSize = Math.min(scanner.getMaxResultSize(), maxQuotaResultSize);<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>            if (maxResultSize &lt;= 0) {<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>              maxResultSize = maxQuotaResultSize;<a name="line.2566"></a>
+<span class="sourceLineNo">2520</span>      if (request.hasRenew() &amp;&amp; request.getRenew()) {<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>        lease = regionServer.leases.removeLease(scannerName);<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>        if (lease != null &amp;&amp; scanners.containsKey(scannerName)) {<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>          regionServer.leases.addLease(lease);<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>        }<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>        return builder.build();<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>      }<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>      RpcCallContext context = RpcServer.getCurrentCall();<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>      Object lastBlock = null;<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span><a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>      quota = getQuotaManager().checkQuota(region, OperationQuota.OperationType.SCAN);<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>      long maxQuotaResultSize = Math.min(maxScannerResultSize, quota.getReadAvailable());<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span><a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>      if (rows &gt; 0) {<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>        // if nextCallSeq does not match throw Exception straight away. This needs to be<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>        // performed even before checking of Lease.<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>        // See HBASE-5974<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>        if (request.hasNextCallSeq()) {<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>          if (rsh != null) {<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>            if (request.getNextCallSeq() != rsh.getNextCallSeq()) {<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>              throw new OutOfOrderScannerNextException(<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>                "Expected nextCallSeq: " + rsh.getNextCallSeq()<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>                + " But the nextCallSeq got from client: " + request.getNextCallSeq() +<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>                "; request=" + TextFormat.shortDebugString(request));<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>            }<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>            // Increment the nextCallSeq value which is the next expected from client.<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>            rsh.incNextCallSeq();<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>          }<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>        }<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>        try {<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>          // Remove lease while its being processed in server; protects against case<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>          // where processing of request takes &gt; lease expiration time.<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>          lease = regionServer.leases.removeLease(scannerName);<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>          List&lt;Result&gt; results = new ArrayList&lt;Result&gt;();<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span><a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>          boolean done = false;<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>          // Call coprocessor. Get region info from scanner.<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span>            Boolean bypass = region.getCoprocessorHost().preScannerNext(<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>              scanner, results, rows);<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>            if (!results.isEmpty()) {<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>              for (Result r : results) {<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>                lastBlock = addSize(context, r, lastBlock);<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>              }<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>            }<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>            if (bypass != null &amp;&amp; bypass.booleanValue()) {<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span>              done = true;<a name="line.2566"></a>
 <span class="sourceLineNo">2567</span>            }<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>            // This is cells inside a row. Default size is 10 so if many versions or many cfs,<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>            // then we'll resize. Resizings show in profiler. Set it higher than 10. For now<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>            // arbitrary 32. TODO: keep record of general size of results being returned.<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>            List&lt;Cell&gt; values = new ArrayList&lt;Cell&gt;(32);<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>            region.startRegionOperation(Operation.SCAN);<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>            try {<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>              int i = 0;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>              synchronized(scanner) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>                boolean stale = (region.getRegionInfo().getReplicaId() != 0);<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>                boolean clientHandlesPartials =<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>                    request.hasClientHandlesPartials() &amp;&amp; request.getClientHandlesPartials();<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>                boolean clientHandlesHeartbeats =<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>                    request.hasClientHandlesHeartbeats() &amp;&amp; request.getClientHandlesHeartbeats();<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span><a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>                // On the server side we must ensure that the correct ordering of partial results is<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>                // returned to the client to allow them to properly reconstruct the partial results.<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>                // If the coprocessor host is adding to the result list, we cannot guarantee the<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>                // correct ordering of partial results and so we prevent partial results from being<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>                // formed.<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>                boolean serverGuaranteesOrderOfPartials = results.isEmpty();<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>                boolean allowPartialResults =<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>                    clientHandlesPartials &amp;&amp; serverGuaranteesOrderOfPartials &amp;&amp; !isSmallScan;<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>                boolean moreRows = false;<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span><a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>                // Heartbeat messages occur when the processing of the ScanRequest is exceeds a<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>                // certain time threshold on the server. When the time threshold is exceeded, the<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>                // server stops the scan and sends back whatever Results it has accumulated within<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>                // that time period (may be empty). Since heartbeat messages have the potential to<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>                // create partial Results (in the event that the timeout occurs in the middle of a<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>                // row), we must only generate heartbeat messages when the client can handle both<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>                // heartbeats AND partials<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>                boolean allowHeartbeatMessages = clientHandlesHeartbeats &amp;&amp; allowPartialResults;<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>                // Default value of timeLimit is negative to indicate no timeLimit should be<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>                // enforced.<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>                long timeLimit = -1;<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span><a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>                // Set the time limit to be half of the more restrictive timeout value (one of the<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>                // timeout values must be positive). In the event that both values are positive, the<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>                // more restrictive of the two is used to calculate the limit.<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>                if (allowHeartbeatMessages &amp;&amp; (scannerLeaseTimeoutPeriod &gt; 0 || rpcTimeout &gt; 0)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>                  long timeLimitDelta;<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>                  if (scannerLeaseTimeoutPeriod &gt; 0 &amp;&amp; rpcTimeout &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>                    timeLimitDelta = Math.min(scannerLeaseTimeoutPeriod, rpcTimeout);<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>                  } else {<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>                    timeLimitDelta =<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>                        scannerLeaseTimeoutPeriod &gt; 0 ? scannerLeaseTimeoutPeriod : rpcTimeout;<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>                  }<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>                  // Use half of whichever timeout value was more restrictive... But don't allow<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>                  // the time limit to be less than the allowable minimum (could cause an<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>                  // immediatate timeout before scanning any data).<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>                  timeLimitDelta = Math.max(timeLimitDelta / 2, minimumScanTimeLimitDelta);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>                  timeLimit = System.currentTimeMillis() + timeLimitDelta;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>                }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span><a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>                final LimitScope sizeScope =<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>                    allowPartialResults ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>                final LimitScope timeScope =<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>                    allowHeartbeatMessages ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span><a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>                boolean trackMetrics =<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>                    request.hasTrackScanMetrics() &amp;&amp; request.getTrackScanMetrics();<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span><a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>                // Configure with limits for this RPC. Set keep progress true since size progress<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>                // towards size limit should be kept between calls to nextRaw<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>                ScannerContext.Builder contextBuilder = ScannerContext.newBuilder(true);<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>                contextBuilder.setSizeLimit(sizeScope, maxResultSize);<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>                contextBuilder.setBatchLimit(scanner.getBatch());<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>                contextBuilder.setTimeLimit(timeScope, timeLimit);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>                contextBuilder.setTrackMetrics(trackMetrics);<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>                ScannerContext scannerContext = contextBuilder.build();<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>                boolean limitReached = false;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>                while (i &lt; rows) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>                  // Reset the batch progress to 0 before every call to RegionScanner#nextRaw. The<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>                  // batch limit is a limit on the number of cells per Result. Thus, if progress is<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>                  // being tracked (i.e. scannerContext.keepProgress() is true) then we need to<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>                  // reset the batch progress between nextRaw invocations since we don't want the<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>                  // batch progress from previous calls to affect future calls<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>                  scannerContext.setBatchProgress(0);<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>                  // Collect values to be returned here<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>                  moreRows = scanner.nextRaw(values, scannerContext);<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>                  if (!values.isEmpty()) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>                    final boolean partial = scannerContext.partialResultFormed();<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>                    Result r = Result.create(values, null, stale, partial);<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>                    lastBlock = addSize(context, r, lastBlock);<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>                    results.add(r);<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>                    i++;<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>                  }<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span><a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>                  boolean sizeLimitReached = scannerContext.checkSizeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>                  boolean timeLimitReached = scannerContext.checkTimeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>                  boolean rowLimitReached = i &gt;= rows;<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>                  limitReached = sizeLimitReached || timeLimitReached || rowLimitReached;<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span><a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>                  if (limitReached || !moreRows) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>                    if (LOG.isTraceEnabled()) {<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>                      LOG.trace("Done scanning. limitReached: " + limitReached + " moreRows: "<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>                          + moreRows + " scannerContext: " + scannerContext);<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>                    }<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>                    // We only want to mark a ScanResponse as a heartbeat message in the event that<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>                    // there are more values to be read server side. If there aren't more values,<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>                    // marking it as a heartbeat is wasteful because the client will need to issue<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>                    // another ScanRequest only to realize that they already have all the values<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>                    if (moreRows) {<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>                      // Heartbeat messages occur when the time limit has been reached.<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>                      builder.setHeartbeatMessage(timeLimitReached);<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>                    }<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>                    break;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>                  }<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>                  values.clear();<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>                }<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span><a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>                if (limitReached || moreRows) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>                  // We stopped prematurely<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>                  builder.setMoreResultsInRegion(true);<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>                } else {<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>                  // We didn't get a single batch<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>                  builder.setMoreResultsInRegion(false);<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>                }<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span><a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>                // Check to see if the client requested that we track metrics server side. If the<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>                // client requested metrics, retrieve the metrics from the scanner context.<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>                if (trackMetrics) {<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>                  Map&lt;String, Long&gt; metrics = scannerContext.getMetrics().getMetricsMap();<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>                  ScanMetrics.Builder metricBuilder = ScanMetrics.newBuilder();<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>                  NameInt64Pair.Builder pairBuilder = NameInt64Pair.newBuilder();<a name="line.2695"></a>
+<span class="sourceLineNo">2568</span>          }<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span><a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>          if (!done) {<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>            long maxResultSize = Math.min(scanner.getMaxResultSize(), maxQuotaResultSize);<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>            if (maxResultSize &lt;= 0) {<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>              maxResultSize = maxQuotaResultSize;<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span>            }<a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>            // This is cells inside a row. Default size is 10 so if many versions or many cfs,<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>            // then we'll resize. Resizings show in profiler. Set it higher than 10. For now<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>            // arbitrary 32. TODO: keep record of general size of results being returned.<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>            List&lt;Cell&gt; values = new ArrayList&lt;Cell&gt;(32);<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span>            region.startRegionOperation(Operation.SCAN);<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>            try {<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>              int i = 0;<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>              synchronized(scanner) {<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>                boolean stale = (region.getRegionInfo().getReplicaId() != 0);<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>                boolean clientHandlesPartials =<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>                    request.hasClientHandlesPartials() &amp;&amp; request.getClientHandlesPartials();<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>                boolean clientHandlesHeartbeats =<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>                    request.hasClientHandlesHeartbeats() &amp;&amp; request.getClientHandlesHeartbeats();<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span><a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>                // On the server side we must ensure that the correct ordering of partial results is<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>                // returned to the client to allow them to properly reconstruct the partial results.<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>                // If the coprocessor host is adding to the result list, we cannot guarantee the<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>                // correct ordering of partial results and so we prevent partial results from being<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>                // formed.<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>                boolean serverGuaranteesOrderOfPartials = results.isEmpty();<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>                boolean allowPartialResults =<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>                    clientHandlesPartials &amp;&amp; serverGuaranteesOrderOfPartials &amp;&amp; !isSmallScan;<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>                boolean moreRows = false;<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span><a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>                // Heartbeat messages occur when the processing of the ScanRequest is exceeds a<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>                // certain time threshold on the server. When the time threshold is exceeded, the<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>                // server stops the scan and sends back whatever Results it has accumulated within<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>                // that time period (may be empty). Since heartbeat messages have the potential to<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>                // create partial Results (in the event that the timeout occurs in the middle of a<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>                // row), we must only generate heartbeat messages when the client can handle both<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>                // heartbeats AND partials<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>                boolean allowHeartbeatMessages = clientHandlesHeartbeats &amp;&amp; allowPartialResults;<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span><a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>                // Default value of timeLimit is negative to indicate no timeLimit should be<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>                // enforced.<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span>                long timeLimit = -1;<a name="line.2610"></a>
+<span class="sourceLineNo">2611</span><a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>                // Set the time limit to be half of the more restrictive timeout value (one of the<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>                // timeout values must be positive). In the event that both values are positive, the<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>                // more restrictive of the two is used to calculate the limit.<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>                if (allowHeartbeatMessages &amp;&amp; (scannerLeaseTimeoutPeriod &gt; 0 || rpcTimeout &gt; 0)) {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>                  long timeLimitDelta;<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>                  if (scannerLeaseTimeoutPeriod &gt; 0 &amp;&amp; rpcTimeout &gt; 0) {<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>                    timeLimitDelta = Math.min(scannerLeaseTimeoutPeriod, rpcTimeout);<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>                  } else {<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>                    timeLimitDelta =<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>                        scannerLeaseTimeoutPeriod &gt; 0 ? scannerLeaseTimeoutPeriod : rpcTimeout;<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>                  }<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>                  // Use half of whichever timeout value was more restrictive... But don't allow<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>                  // the time limit to be less than the allowable minimum (could cause an<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>                  // immediatate timeout before scanning any data).<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>                  timeLimitDelta = Math.max(timeLimitDelta / 2, minimumScanTimeLimitDelta);<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>                  timeLimit = System.currentTimeMillis() + timeLimitDelta;<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>                }<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span><a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>                final LimitScope sizeScope =<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>                    allowPartialResults ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>                final LimitScope timeScope =<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span>                    allowHeartbeatMessages ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2633"></a>
+<span class="sourceLineNo">2634</span><a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>                boolean trackMetrics =<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>                    request.hasTrackScanMetrics() &amp;&amp; request.getTrackScanMetrics();<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span><a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>                // Configure with limits for this RPC. Set keep progress true since size progress<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>                // towards size limit should be kept between calls to nextRaw<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>                ScannerContext.Builder contextBuilder = ScannerContext.newBuilder(true);<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>                contextBuilder.setSizeLimit(sizeScope, maxResultSize);<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>                contextBuilder.setBatchLimit(scanner.getBatch());<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span>                contextBuilder.setTimeLimit(timeScope, timeLimit);<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>                contextBuilder.setTrackMetrics(trackMetrics);<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>                ScannerContext scannerContext = contextBuilder.build();<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>                boolean limitReached = false;<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>                while (i &lt; rows) {<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>                  // Reset the batch progress to 0 before every call to RegionScanner#nextRaw. The<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>                  // batch limit is a limit on the number of cells per Result. Thus, if progress is<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>                  // being tracked (i.e. scannerContext.keepProgress() is true) then we need to<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>                  // reset the batch progress between nextRaw invocations since we don't want the<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>                  // batch progress from previous calls to affect future calls<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>                  scannerContext.setBatchProgress(0);<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span><a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>                  // Collect values to be returned here<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>                  moreRows = scanner.nextRaw(values, scannerContext);<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span><a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>                  if (!values.isEmpty()) {<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>                    final boolean partial = scannerContext.partialResultFormed();<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>                    Result r = Result.create(values, null, stale, partial);<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>                    lastBlock = addSize(context, r, lastBlock);<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>                    results.add(r);<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>                    i++;<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>                  }<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span><a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>                  boolean sizeLimitReached = scannerContext.checkSizeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>                  boolean timeLimitReached = scannerContext.checkTimeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>                  boolean rowLimitReached = i &gt;= rows;<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>                  limitReached = sizeLimitReached || timeLimitReached || rowLimitReached;<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span><a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>                  if (limitReached || !moreRows) {<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>                    if (LOG.isTraceEnabled()) {<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span>                      LOG.trace("Done scanning. limitReached: " + limitReached + " moreRows: "<a name="line.2673"></a>
+<span class="sourceLineNo">2674</span>                          + moreRows + " scannerContext: " + scannerContext);<a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>                    }<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>                    // We only want to mark a ScanResponse as a heartbeat message in the event that<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>                    // there are more values to be read server side. If there aren't more values,<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>                    // marking it as a heartbeat is wasteful because the client will need to issue<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>                    // another ScanRequest only to realize that they already have all the values<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>                    if (moreRows) {<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>                      // Heartbeat messages occur when the time limit has been reached.<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>                      builder.setHeartbeatMessage(timeLimitReached);<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>                    }<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>                    break;<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>                  }<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>                  values.clear();<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>                }<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span><a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>                if (limitReached || moreRows) {<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>                  // We stopped prematurely<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>                  builder.setMoreResultsInRegion(true);<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>                } else {<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>                  // We didn't get a single batch<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>                  builder.setMoreResultsInRegion(false);<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>                }<a name="line.2695"></a>
 <span class="sourceLineNo">2696</span><a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>                  for (Entry&lt;String, Long&gt; entry : metrics.entrySet()) {<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>                    pairBuilder.setName(entry.getKey());<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>                    pairBuilder.setValue(entry.getValue());<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>                    metricBuilder.addMetrics(pairBuilder.build());<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>                  }<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span><a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>                  builder.setScanMetrics(metricBuilder.build());<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>                }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>              }<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>              region.updateReadRequestsCount(i);<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>              long responseCellSize = context != null ? context.getResponseCellSize() : 0;<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>              region.getMetrics().updateScanNext(responseCellSize);<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>              if (regionServer.metricsRegionServer != null) {<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>                regionServer.metricsRegionServer.updateScannerNext(responseCellSize);<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>              }<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>            } finally {<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>              region.closeRegionOperation();<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>            }<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>            // coprocessor postNext hook<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>              region.getCoprocessorHost().postScannerNext(scanner, results, rows, true);<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>            }<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>          }<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span><a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>          quota.addScanResult(results);<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>          // If the scanner's filter - if any - is done with the scan<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>          // and wants to tell the client to stop the scan. This is done by passing<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>          // a null result, and setting moreResults to false.<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>          if (scanner.isFilterDone() &amp;&amp; results.isEmpty()) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>            moreResults = false;<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>            results = null;<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>          } else {<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>            addResults(builder, results, controller,<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>                RegionReplicaUtil.isDefaultReplica(region.getRegionInfo()),<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>                isClientCellBlockSupport(context));<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>          }<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        } catch (IOException e) {<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>          // if we have an exception on scanner next and we are using the callSeq<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          // we should rollback because the client will retry with the same callSeq<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>          // and get an OutOfOrderScannerNextException if we don't do so.<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>          if (rsh != null &amp;&amp; request.hasNextCallSeq()) {<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>            rsh.rollbackNextCallSeq();<a name="line.2739"></a>
+<span class="sourceLineNo">2697</span>                // Check to see if the client requested that we track metrics server side. If the<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>                // client requested metrics, retrieve the metrics from the scanner context.<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>                if (trackMetrics) {<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>                  Map&lt;String, Long&gt; metrics = scannerContext.getMetrics().getMetricsMap();<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>                  ScanMetrics.Builder metricBuilder = ScanMetrics.newBuilder();<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>                  NameInt64Pair.Builder pairBuilder = NameInt64Pair.newBuilder();<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span><a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>                  for (Entry&lt;String, Long&gt; entry : metrics.entrySet()) {<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>                    pairBuilder.setName(entry.getKey());<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>                    pairBuilder.setValue(entry.getValue());<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>                    metricBuilder.addMetrics(pairBuilder.build());<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>                  }<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span><a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>                  builder.setScanMetrics(metricBuilder.build());<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>                }<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>              }<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>              region.updateReadRequestsCount(i);<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>              long responseCellSize = context != null ? context.getResponseCellSize() : 0;<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>              region.getMetrics().updateScanNext(responseCellSize);<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>              if (regionServer.metricsRegionServer != null) {<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>                regionServer.metricsRegionServer.updateScannerNext(responseCellSize);<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>              }<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>            } finally {<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>              region.closeRegionOperation();<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>            }<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>            // coprocessor postNext hook<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>              region.getCoprocessorHost().postScannerNext(scanner, results, rows, true);<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>            }<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>          }<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span><a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>          quota.addScanResult(results);<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span><a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>          // If the scanner's filter - if any - is done with the scan<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>          // and wants to tell the client to stop the scan. This is done by passing<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>          // a null result, and setting moreResults to false.<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>          if (scanner.isFilterDone() &amp;&amp; results.isEmpty()) {<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>            moreResults = false;<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>            results = null;<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>          } else {<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>            addResults(builder, results, controller,<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>                RegionReplicaUtil.isDefaultReplica(region.getRegionInfo()),<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>                isClientCellBlockSupport(context));<a name="line.2739"></a>
 <span class="sourceLineNo">2740</span>          }<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>          throw e;<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>        } finally {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>          if (context != null) {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>            context.setCallBack(rsh.shippedCallback);<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>          }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>          // Adding resets expiration time on lease.<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>          if (scanners.containsKey(scannerName)) {<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>            ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>            // When context != null, adding back the lease will be done in callback set above.<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>            if (context == null) {<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>              if (lease != null) regionServer.leases.addLease(lease);<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>            }<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>          }<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>        }<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>      }<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span><a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>      if (!moreResults || closeScanner) {<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        ttl = 0;<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        moreResults = false;<a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>        if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>          if (region.getCoprocessorHost().preScannerClose(scanner)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>            return builder.build(); // bypass<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>          }<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>        }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>        rsh = scanners.remove(scannerName);<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>        if (rsh != null) {<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>          if (context != null) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>            context.setCallBack(rsh.closeCallBack);<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>          } else {<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>            rsh.s.close();<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>          }<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>          try {<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>          } catch (LeaseException le) {<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>            // No problem, ignore<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>            if (LOG.isTraceEnabled()) {<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>              LOG.trace("Un-able to cancel lease of scanner. It could already be closed.");<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>            }<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>          }<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>            region.getCoprocessorHost().postScannerClose(scanner);<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>          }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>        }<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      }<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span><a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>      if (ttl &gt; 0) {<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        builder.setTtl(ttl);<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>      builder.setScannerId(scannerId);<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      builder.setMoreResults(moreResults);<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      return builder.build();<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>    } catch (IOException ie) {<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>      if (scannerName != null &amp;&amp; ie instanceof NotServingRegionException) {<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        RegionScannerHolder rsh = scanners.remove(scannerName);<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>        if (rsh != null) {<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>          try {<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>            RegionScanner scanner = rsh.s;<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>            LOG.warn(scannerName + " encountered " + ie.getMessage() + ", closing ...");<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>            scanner.close();<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>          } catch (IOException e) {<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>           LOG.warn("Getting exception closing " + scannerName, e);<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>          }<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        }<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>      }<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>      throw new ServiceException(ie);<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>    } finally {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>      if (quota != null) {<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        quota.close();<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>      }<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>    }<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>  }<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span><a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>  @Override<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>  public CoprocessorServiceResponse execRegionServerService(RpcController controller,<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      CoprocessorServiceRequest request) throws ServiceException {<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>    return regionServer.execRegionServerService(controller, request);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>  }<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span><a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>  @Override<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>  public UpdateConfigurationResponse updateConfiguration(<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>      RpcController controller, UpdateConfigurationRequest request)<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>      throws ServiceException {<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>    try {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>      this.regionServer.updateConfiguration();<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    } catch (Exception e) {<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>      throw new ServiceException(e);<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    }<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>    return UpdateConfigurationResponse.getDefaultInstance();<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>  }<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>}<a name="line.2831"></a>
+<span class="sourceLineNo">2741</span>        } catch (IOException e) {<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>          // if we have an exception on scanner next and we are using the callSeq<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>          // we should rollback because the client will retry with the same callSeq<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>          // and get an OutOfOrderScannerNextException if we don't do so.<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>          if (rsh != null &amp;&amp; request.hasNextCallSeq()) {<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>            rsh.rollbackNextCallSeq();<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>          }<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>          throw e;<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>        } finally {<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>          if (context != null) {<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>            context.setCallBack(rsh.shippedCallback);<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>          }<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>          // Adding resets expiration time on lease.<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>          if (scanners.containsKey(scannerName)) {<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>            ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>            // When context != null, adding back the lease will be done in callback set above.<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>            if (context == null) {<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>              if (lease != null) regionServer.leases.addLease(lease);<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>            }<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>          }<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>        }<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>      }<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span><a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>      if (!moreResults || closeScanner) {<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>        ttl = 0;<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>        moreResults = false;<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>        if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>          if (region.getCoprocessorHost().preScannerClose(scanner)) {<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>            return builder.build(); // bypass<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>          }<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>        }<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>        rsh = scanners.remove(scannerName);<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>        if (rsh != null) {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>          if (context != null) {<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>            context.setCallBack(rsh.closeCallBack);<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>          } else {<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>            rsh.s.close();<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>          }<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>          try {<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>          } catch (LeaseException le) {<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>            // No problem, ignore<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>            if (LOG.isTraceEnabled()) {<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>              LOG.trace("Un-able to cancel lease of scanner. It could already be closed.");<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>            }<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>          }<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>            region.getCoprocessorHost().postScannerClose(scanner);<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>          }<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>        }<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>      }<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span><a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>      if (ttl &gt; 0) {<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>        builder.setTtl(ttl);<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>      builder.setScannerId(scannerId);<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>      builder.setMoreResults(moreResults);<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>      return builder.build();<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>    } catch (IOException ie) {<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>      if (scannerName != null &amp;&amp; ie instanceof NotServingRegionException) {<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>        RegionScannerHolder rsh = scanners.remove(scannerName);<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>        if (rsh != null) {<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>          try {<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>            RegionScanner scanner = rsh.s;<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>            LOG.warn(scannerName + " encountered " + ie.getMessage() + ", closing ...");<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>            scanner.close();<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>          } catch (IOException e) {<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>           LOG.warn("Getting exception closing " + scannerName, e);<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>          }<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>        }<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>      }<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>      throw new ServiceException(ie);<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>    } finally {<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>      if (quota != null) {<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>        quota.close();<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>      }<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>    }<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>  }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span><a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>  @Override<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>  public CoprocessorServiceResponse execRegionServerService(RpcController controller,<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>      CoprocessorServiceRequest request) throws ServiceException {<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>    return regionServer.execRegionServerService(controller, request);<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>  }<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span><a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>  @Override<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>  public UpdateConfigurationResponse updateConfiguration(<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>      RpcController controller, UpdateConfigurationRequest request)<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>      throws ServiceException {<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>    try {<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>      this.regionServer.updateConfiguration();<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>    } catch (Exception e) {<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>      throw new ServiceException(e);<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>    }<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>    return UpdateConfigurationResponse.getDefaultInstance();<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>  }<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>}<a name="line.2838"></a>
 
 
 


[25/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html
index 3e8f4ec..00bdffe 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html
@@ -31,170 +31,179 @@
 <span class="sourceLineNo">023</span>import java.util.Map;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.util.Random;<a name="line.24"></a>
 <span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.commons.logging.Log;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.commons.logging.LogFactory;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.conf.Configuration;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.ServerName;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.client.HConnection;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import com.google.common.collect.Lists;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import com.google.common.collect.Maps;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>/**<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * Maintains a collection of peers to replicate to, and randomly selects a<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * single peer to replicate to per set of data to replicate. Also handles<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * keeping track of peer availability.<a name="line.39"></a>
-<span class="sourceLineNo">040</span> */<a name="line.40"></a>
-<span class="sourceLineNo">041</span>public class ReplicationSinkManager {<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>  private static final Log LOG = LogFactory.getLog(ReplicationSinkManager.class);<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>  /**<a name="line.45"></a>
-<span class="sourceLineNo">046</span>   * Default maximum number of times a replication sink can be reported as bad before<a name="line.46"></a>
-<span class="sourceLineNo">047</span>   * it will no longer be provided as a sink for replication without the pool of<a name="line.47"></a>
-<span class="sourceLineNo">048</span>   * replication sinks being refreshed.<a name="line.48"></a>
-<span class="sourceLineNo">049</span>   */<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  static final int DEFAULT_BAD_SINK_THRESHOLD = 3;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  /**<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   * Default ratio of the total number of peer cluster region servers to consider<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * replicating to.<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  static final float DEFAULT_REPLICATION_SOURCE_RATIO = 0.1f;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">026</span>import com.google.common.annotations.VisibleForTesting;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.commons.logging.Log;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.commons.logging.LogFactory;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.conf.Configuration;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.ServerName;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.client.HConnection;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import com.google.common.collect.Lists;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import com.google.common.collect.Maps;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * Maintains a collection of peers to replicate to, and randomly selects a<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * single peer to replicate to per set of data to replicate. Also handles<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * keeping track of peer availability.<a name="line.40"></a>
+<span class="sourceLineNo">041</span> */<a name="line.41"></a>
+<span class="sourceLineNo">042</span>public class ReplicationSinkManager {<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>  private static final Log LOG = LogFactory.getLog(ReplicationSinkManager.class);<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>  /**<a name="line.46"></a>
+<span class="sourceLineNo">047</span>   * Default maximum number of times a replication sink can be reported as bad before<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   * it will no longer be provided as a sink for replication without the pool of<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   * replication sinks being refreshed.<a name="line.49"></a>
+<span class="sourceLineNo">050</span>   */<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  static final int DEFAULT_BAD_SINK_THRESHOLD = 3;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  /**<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   * Default ratio of the total number of peer cluster region servers to consider<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * replicating to.<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  static final float DEFAULT_REPLICATION_SOURCE_RATIO = 0.1f;<a name="line.57"></a>
 <span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private final HConnection conn;<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  private final String peerClusterId;<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private final HBaseReplicationEndpoint endpoint;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  // Count of "bad replication sink" reports per peer sink<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private final Map&lt;ServerName, Integer&gt; badReportCounts;<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>  // Ratio of total number of potential peer region servers to be used<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private final float ratio;<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  // Maximum number of times a sink can be reported as bad before the pool of<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  // replication sinks is refreshed<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private final int badSinkThreshold;<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private final Random random;<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  // A timestamp of the last time the list of replication peers changed<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private long lastUpdateToPeers;<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  // The current pool of sinks to which replication can be performed<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private List&lt;ServerName&gt; sinks = Lists.newArrayList();<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  /**<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * Instantiate for a single replication peer cluster.<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * @param conn connection to the peer cluster<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * @param peerClusterId identifier of the peer cluster<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * @param endpoint replication endpoint for inter cluster replication<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * @param conf HBase configuration, used for determining replication source ratio and bad peer<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   *          threshold<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  public ReplicationSinkManager(HConnection conn, String peerClusterId,<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      HBaseReplicationEndpoint endpoint, Configuration conf) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    this.conn = conn;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    this.peerClusterId = peerClusterId;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    this.endpoint = endpoint;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    this.badReportCounts = Maps.newHashMap();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    this.ratio = conf.getFloat("replication.source.ratio", DEFAULT_REPLICATION_SOURCE_RATIO);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    this.badSinkThreshold = conf.getInt("replication.bad.sink.threshold",<a name="line.98"></a>
-<span class="sourceLineNo">099</span>                                        DEFAULT_BAD_SINK_THRESHOLD);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    this.random = new Random();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * Get a randomly-chosen replication sink to replicate to.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   *<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * @return a replication sink to replicate to<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   */<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  public SinkPeer getReplicationSink() throws IOException {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    if (endpoint.getLastRegionServerUpdate() &gt; this.lastUpdateToPeers || sinks.isEmpty()) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      LOG.info("Current list of sinks is out of date or empty, updating");<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      chooseSinks();<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>    if (sinks.isEmpty()) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      throw new IOException("No replication sinks are available");<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    ServerName serverName = sinks.get(random.nextInt(sinks.size()));<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    return new SinkPeer(serverName, conn.getAdmin(serverName));<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>  /**<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * Report a {@code SinkPeer} as being bad (i.e. an attempt to replicate to it<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * failed). If a single SinkPeer is reported as bad more than<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * replication.bad.sink.threshold times, it will be removed<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * from the pool of potential replication targets.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   *<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @param sinkPeer<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   *          The SinkPeer that had a failed replication attempt on it<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   */<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  public void reportBadSink(SinkPeer sinkPeer) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    ServerName serverName = sinkPeer.getServerName();<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    int badReportCount = (badReportCounts.containsKey(serverName)<a name="line.132"></a>
-<span class="sourceLineNo">133</span>                    ? badReportCounts.get(serverName) : 0) + 1;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    badReportCounts.put(serverName, badReportCount);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    if (badReportCount &gt; badSinkThreshold) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      this.sinks.remove(serverName);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      if (sinks.isEmpty()) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>        chooseSinks();<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>  /**<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * Report that a {@code SinkPeer} successfully replicated a chunk of data.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   *<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @param sinkPeer<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   *          The SinkPeer that had a failed replication attempt on it<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public void reportSinkSuccess(SinkPeer sinkPeer) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    badReportCounts.remove(sinkPeer.getServerName());<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>  void chooseSinks() {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    List&lt;ServerName&gt; slaveAddresses = endpoint.getRegionServers();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    Collections.shuffle(slaveAddresses, random);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    int numSinks = (int) Math.ceil(slaveAddresses.size() * ratio);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    sinks = slaveAddresses.subList(0, numSinks);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    lastUpdateToPeers = System.currentTimeMillis();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    badReportCounts.clear();<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>  List&lt;ServerName&gt; getSinks() {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    return sinks;<a name="line.163"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private final HConnection conn;<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private final String peerClusterId;<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private final HBaseReplicationEndpoint endpoint;<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  // Count of "bad replication sink" reports per peer sink<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private final Map&lt;ServerName, Integer&gt; badReportCounts;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  // Ratio of total number of potential peer region servers to be used<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private final float ratio;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  // Maximum number of times a sink can be reported as bad before the pool of<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  // replication sinks is refreshed<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private final int badSinkThreshold;<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private final Random random;<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  // A timestamp of the last time the list of replication peers changed<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private long lastUpdateToPeers;<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  // The current pool of sinks to which replication can be performed<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private List&lt;ServerName&gt; sinks = Lists.newArrayList();<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * Instantiate for a single replication peer cluster.<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * @param conn connection to the peer cluster<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * @param peerClusterId identifier of the peer cluster<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   * @param endpoint replication endpoint for inter cluster replication<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * @param conf HBase configuration, used for determining replication source ratio and bad peer<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   *          threshold<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   */<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  public ReplicationSinkManager(HConnection conn, String peerClusterId,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      HBaseReplicationEndpoint endpoint, Configuration conf) {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    this.conn = conn;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    this.peerClusterId = peerClusterId;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    this.endpoint = endpoint;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    this.badReportCounts = Maps.newHashMap();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    this.ratio = conf.getFloat("replication.source.ratio", DEFAULT_REPLICATION_SOURCE_RATIO);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    this.badSinkThreshold = conf.getInt("replication.bad.sink.threshold",<a name="line.99"></a>
+<span class="sourceLineNo">100</span>                                        DEFAULT_BAD_SINK_THRESHOLD);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    this.random = new Random();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  /**<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * Get a randomly-chosen replication sink to replicate to.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   *<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * @return a replication sink to replicate to<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   */<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public synchronized SinkPeer getReplicationSink() throws IOException {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    if (endpoint.getLastRegionServerUpdate() &gt; this.lastUpdateToPeers || sinks.isEmpty()) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      LOG.info("Current list of sinks is out of date or empty, updating");<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      chooseSinks();<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>    if (sinks.isEmpty()) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      throw new IOException("No replication sinks are available");<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    ServerName serverName = sinks.get(random.nextInt(sinks.size()));<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    return new SinkPeer(serverName, conn.getAdmin(serverName));<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  /**<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * Report a {@code SinkPeer} as being bad (i.e. an attempt to replicate to it<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * failed). If a single SinkPeer is reported as bad more than<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * replication.bad.sink.threshold times, it will be removed<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * from the pool of potential replication targets.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   *<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param sinkPeer<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   *          The SinkPeer that had a failed replication attempt on it<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public synchronized void reportBadSink(SinkPeer sinkPeer) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    ServerName serverName = sinkPeer.getServerName();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    int badReportCount = (badReportCounts.containsKey(serverName)<a name="line.133"></a>
+<span class="sourceLineNo">134</span>                    ? badReportCounts.get(serverName) : 0) + 1;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    badReportCounts.put(serverName, badReportCount);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    if (badReportCount &gt; badSinkThreshold) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      this.sinks.remove(serverName);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      if (sinks.isEmpty()) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        chooseSinks();<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><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * Report that a {@code SinkPeer} successfully replicated a chunk of data.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   *<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * @param sinkPeer<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   *          The SinkPeer that had a failed replication attempt on it<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   */<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  public synchronized void reportSinkSuccess(SinkPeer sinkPeer) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    badReportCounts.remove(sinkPeer.getServerName());<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>   * Refresh the list of sinks.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  public synchronized void chooseSinks() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    List&lt;ServerName&gt; slaveAddresses = endpoint.getRegionServers();<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    Collections.shuffle(slaveAddresses, random);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    int numSinks = (int) Math.ceil(slaveAddresses.size() * ratio);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    sinks = slaveAddresses.subList(0, numSinks);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    lastUpdateToPeers = System.currentTimeMillis();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    badReportCounts.clear();<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>   * Wraps a replication region server sink to provide the ability to identify<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * it.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   */<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public static class SinkPeer {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    private ServerName serverName;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private AdminService.BlockingInterface regionServer;<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>    public SinkPeer(ServerName serverName, AdminService.BlockingInterface regionServer) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      this.serverName = serverName;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      this.regionServer = regionServer;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>    ServerName getServerName() {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      return serverName;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
+<span class="sourceLineNo">166</span>  public synchronized int getNumSinks() {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    return sinks.size();<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>  @VisibleForTesting<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  protected List&lt;ServerName&gt; getSinksForTesting() {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    return Collections.unmodifiableList(sinks);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  /**<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * Wraps a replication region server sink to provide the ability to identify<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * it.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public static class SinkPeer {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    private ServerName serverName;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    private AdminService.BlockingInterface regionServer;<a name="line.181"></a>
 <span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>    public AdminService.BlockingInterface getRegionServer() {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      return regionServer;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>}<a name="line.189"></a>
+<span class="sourceLineNo">183</span>    public SinkPeer(ServerName serverName, AdminService.BlockingInterface regionServer) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      this.serverName = serverName;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      this.regionServer = regionServer;<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>    ServerName getServerName() {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      return serverName;<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>    public AdminService.BlockingInterface getRegionServer() {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      return regionServer;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    }<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span>  }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>}<a name="line.198"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
index 502349e..18d72fd 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
@@ -67,15 +67,15 @@
 <span class="sourceLineNo">059</span>  requiredArguments = {<a name="line.59"></a>
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.64"></a>
+<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.64"></a>
 <span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.67"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.67"></a>
 <span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.70"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
 <span class="sourceLineNo">073</span>{<a name="line.73"></a>
@@ -116,57 +116,57 @@
 <span class="sourceLineNo">108</span>      return m_master;<a name="line.108"></a>
 <span class="sourceLineNo">109</span>    }<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    private HMaster m_master;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // 22, 1<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.112"></a>
+<span class="sourceLineNo">111</span>    // 24, 1<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      // 22, 1<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      m_metaLocation = metaLocation;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      m_metaLocation__IsNotDefault = true;<a name="line.116"></a>
+<span class="sourceLineNo">114</span>      // 24, 1<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      m_deadServers = deadServers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      m_deadServers__IsNotDefault = true;<a name="line.116"></a>
 <span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public ServerName getMetaLocation()<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_metaLocation;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_deadServers;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    private ServerName m_metaLocation;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.123"></a>
+<span class="sourceLineNo">122</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    public boolean getDeadServers__IsNotDefault()<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return m_metaLocation__IsNotDefault;<a name="line.125"></a>
+<span class="sourceLineNo">125</span>      return m_deadServers__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 21, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.129"></a>
+<span class="sourceLineNo">127</span>    private boolean m_deadServers__IsNotDefault;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // 27, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setFormat(String format)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 21, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_frags = frags;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_frags__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 27, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_format = format;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_format__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public String getFormat()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_frags;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_format;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getFrags__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private String m_format;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getFormat__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_frags__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_format__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_frags__IsNotDefault;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // 29, 1<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.146"></a>
+<span class="sourceLineNo">144</span>    private boolean m_format__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 22, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      // 29, 1<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      m_assignmentManager = assignmentManager;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      m_assignmentManager__IsNotDefault = true;<a name="line.150"></a>
+<span class="sourceLineNo">148</span>      // 22, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_metaLocation = metaLocation;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_metaLocation__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public AssignmentManager getAssignmentManager()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public ServerName getMetaLocation()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_assignmentManager;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_metaLocation;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    private AssignmentManager m_assignmentManager;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.157"></a>
+<span class="sourceLineNo">156</span>    private ServerName m_metaLocation;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_assignmentManager__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_metaLocation__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    // 28, 1<a name="line.162"></a>
 <span class="sourceLineNo">163</span>    public void setServerManager(ServerManager serverManager)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></a>
@@ -184,40 +184,40 @@
 <span class="sourceLineNo">176</span>      return m_serverManager__IsNotDefault;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>    private boolean m_serverManager__IsNotDefault;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // 27, 1<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    public void setFormat(String format)<a name="line.180"></a>
+<span class="sourceLineNo">179</span>    // 21, 1<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // 27, 1<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      m_format = format;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      m_format__IsNotDefault = true;<a name="line.184"></a>
+<span class="sourceLineNo">182</span>      // 21, 1<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      m_frags = frags;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      m_frags__IsNotDefault = true;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public String getFormat()<a name="line.186"></a>
+<span class="sourceLineNo">186</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return m_format;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>      return m_frags;<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    private String m_format;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    public boolean getFormat__IsNotDefault()<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    public boolean getFrags__IsNotDefault()<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      return m_format__IsNotDefault;<a name="line.193"></a>
+<span class="sourceLineNo">193</span>      return m_frags__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    private boolean m_format__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 23, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.197"></a>
+<span class="sourceLineNo">195</span>    private boolean m_frags__IsNotDefault;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // 26, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setFilter(String filter)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 23, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_servers = servers;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_servers__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 26, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_filter = filter;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_filter__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public List&lt;ServerName&gt; getServers()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public String getFilter()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_servers;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_filter;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private List&lt;ServerName&gt; m_servers;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getServers__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private String m_filter;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getFilter__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_servers__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_filter__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_servers__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">212</span>    private boolean m_filter__IsNotDefault;<a name="line.212"></a>
 <span class="sourceLineNo">213</span>    // 25, 1<a name="line.213"></a>
 <span class="sourceLineNo">214</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
@@ -235,40 +235,40 @@
 <span class="sourceLineNo">227</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
 <span class="sourceLineNo">229</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 24, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.231"></a>
+<span class="sourceLineNo">230</span>    // 23, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 24, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_deadServers = deadServers;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_deadServers__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 23, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_servers = servers;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_servers__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public List&lt;ServerName&gt; getServers()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_deadServers;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_servers;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getDeadServers__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private List&lt;ServerName&gt; m_servers;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getServers__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_deadServers__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_servers__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_deadServers__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 26, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setFilter(String filter)<a name="line.248"></a>
+<span class="sourceLineNo">246</span>    private boolean m_servers__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // 29, 1<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      // 26, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_filter = filter;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_filter__IsNotDefault = true;<a name="line.252"></a>
+<span class="sourceLineNo">250</span>      // 29, 1<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      m_assignmentManager = assignmentManager;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      m_assignmentManager__IsNotDefault = true;<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    public String getFilter()<a name="line.254"></a>
+<span class="sourceLineNo">254</span>    public AssignmentManager getAssignmentManager()<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      return m_filter;<a name="line.256"></a>
+<span class="sourceLineNo">256</span>      return m_assignmentManager;<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    private String m_filter;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getFilter__IsNotDefault()<a name="line.259"></a>
+<span class="sourceLineNo">258</span>    private AssignmentManager m_assignmentManager;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return m_filter__IsNotDefault;<a name="line.261"></a>
+<span class="sourceLineNo">261</span>      return m_assignmentManager__IsNotDefault;<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private boolean m_filter__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>    private boolean m_assignmentManager__IsNotDefault;<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>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.266"></a>
@@ -280,24 +280,24 @@
 <span class="sourceLineNo">272</span>    return (ImplData) super.getImplData();<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>  protected ServerName metaLocation;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.276"></a>
+<span class="sourceLineNo">275</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.276"></a>
 <span class="sourceLineNo">277</span>  {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.278"></a>
+<span class="sourceLineNo">278</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.278"></a>
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected String format;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setFrags(p_frags);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setFormat(p_format);<a name="line.285"></a>
 <span class="sourceLineNo">286</span>    return this;<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>  protected AssignmentManager assignmentManager;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.290"></a>
+<span class="sourceLineNo">289</span>  protected ServerName metaLocation;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.292"></a>
 <span class="sourceLineNo">293</span>    return this;<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>
@@ -308,17 +308,17 @@
 <span class="sourceLineNo">300</span>    return this;<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>  protected String format;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.304"></a>
+<span class="sourceLineNo">303</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>  {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    (getImplData()).setFormat(p_format);<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    (getImplData()).setFrags(p_frags);<a name="line.306"></a>
 <span class="sourceLineNo">307</span>    return this;<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>  protected List&lt;ServerName&gt; servers;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected String filter;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setServers(p_servers);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setFilter(p_filter);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<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>
@@ -329,17 +329,17 @@
 <span class="sourceLineNo">321</span>    return this;<a name="line.321"></a>
 <span class="sourceLineNo">322</span>  }<a name="line.322"></a>
 <span class="sourceLineNo">323</span>  <a name="line.323"></a>
-<span class="sourceLineNo">324</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected List&lt;ServerName&gt; servers;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setServers(p_servers);<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>
-<span class="sourceLineNo">331</span>  protected String filter;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.332"></a>
+<span class="sourceLineNo">331</span>  protected AssignmentManager assignmentManager;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.332"></a>
 <span class="sourceLineNo">333</span>  {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    (getImplData()).setFilter(p_filter);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<a name="line.335"></a>
 <span class="sourceLineNo">336</span>  }<a name="line.336"></a>
 <span class="sourceLineNo">337</span>  <a name="line.337"></a>


[30/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
index abb8a15..be615ae 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
@@ -2525,318 +2525,325 @@
 <span class="sourceLineNo">2517</span>        ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2517"></a>
 <span class="sourceLineNo">2518</span>      }<a name="line.2518"></a>
 <span class="sourceLineNo">2519</span>      assert scanner != null;<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>      RpcCallContext context = RpcServer.getCurrentCall();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>      Object lastBlock = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span><a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      quota = getQuotaManager().checkQuota(region, OperationQuota.OperationType.SCAN);<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      long maxQuotaResultSize = Math.min(maxScannerResultSize, quota.getReadAvailable());<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span><a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>      if (rows &gt; 0) {<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>        // if nextCallSeq does not match throw Exception straight away. This needs to be<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        // performed even before checking of Lease.<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>        // See HBASE-5974<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>        if (request.hasNextCallSeq()) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>          if (rsh != null) {<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>            if (request.getNextCallSeq() != rsh.getNextCallSeq()) {<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>              throw new OutOfOrderScannerNextException(<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>                "Expected nextCallSeq: " + rsh.getNextCallSeq()<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>                + " But the nextCallSeq got from client: " + request.getNextCallSeq() +<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>                "; request=" + TextFormat.shortDebugString(request));<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>            }<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>            // Increment the nextCallSeq value which is the next expected from client.<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>            rsh.incNextCallSeq();<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>          }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>        }<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        try {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>          // Remove lease while its being processed in server; protects against case<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>          // where processing of request takes &gt; lease expiration time.<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>          lease = regionServer.leases.removeLease(scannerName);<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>          List&lt;Result&gt; results = new ArrayList&lt;Result&gt;();<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span><a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>          boolean done = false;<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>          // Call coprocessor. Get region info from scanner.<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>            Boolean bypass = region.getCoprocessorHost().preScannerNext(<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>              scanner, results, rows);<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>            if (!results.isEmpty()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>              for (Result r : results) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>                lastBlock = addSize(context, r, lastBlock);<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>              }<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>            }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>            if (bypass != null &amp;&amp; bypass.booleanValue()) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>              done = true;<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>            }<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          }<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span><a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>          if (!done) {<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>            long maxResultSize = Math.min(scanner.getMaxResultSize(), maxQuotaResultSize);<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>            if (maxResultSize &lt;= 0) {<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>              maxResultSize = maxQuotaResultSize;<a name="line.2566"></a>
+<span class="sourceLineNo">2520</span>      if (request.hasRenew() &amp;&amp; request.getRenew()) {<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>        lease = regionServer.leases.removeLease(scannerName);<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>        if (lease != null &amp;&amp; scanners.containsKey(scannerName)) {<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>          regionServer.leases.addLease(lease);<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>        }<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>        return builder.build();<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>      }<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>      RpcCallContext context = RpcServer.getCurrentCall();<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>      Object lastBlock = null;<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span><a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>      quota = getQuotaManager().checkQuota(region, OperationQuota.OperationType.SCAN);<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>      long maxQuotaResultSize = Math.min(maxScannerResultSize, quota.getReadAvailable());<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span><a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>      if (rows &gt; 0) {<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>        // if nextCallSeq does not match throw Exception straight away. This needs to be<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>        // performed even before checking of Lease.<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>        // See HBASE-5974<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>        if (request.hasNextCallSeq()) {<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>          if (rsh != null) {<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>            if (request.getNextCallSeq() != rsh.getNextCallSeq()) {<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>              throw new OutOfOrderScannerNextException(<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>                "Expected nextCallSeq: " + rsh.getNextCallSeq()<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>                + " But the nextCallSeq got from client: " + request.getNextCallSeq() +<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>                "; request=" + TextFormat.shortDebugString(request));<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>            }<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>            // Increment the nextCallSeq value which is the next expected from client.<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>            rsh.incNextCallSeq();<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>          }<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>        }<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>        try {<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>          // Remove lease while its being processed in server; protects against case<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>          // where processing of request takes &gt; lease expiration time.<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>          lease = regionServer.leases.removeLease(scannerName);<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>          List&lt;Result&gt; results = new ArrayList&lt;Result&gt;();<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span><a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>          boolean done = false;<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>          // Call coprocessor. Get region info from scanner.<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span>            Boolean bypass = region.getCoprocessorHost().preScannerNext(<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>              scanner, results, rows);<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>            if (!results.isEmpty()) {<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>              for (Result r : results) {<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>                lastBlock = addSize(context, r, lastBlock);<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>              }<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>            }<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>            if (bypass != null &amp;&amp; bypass.booleanValue()) {<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span>              done = true;<a name="line.2566"></a>
 <span class="sourceLineNo">2567</span>            }<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>            // This is cells inside a row. Default size is 10 so if many versions or many cfs,<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>            // then we'll resize. Resizings show in profiler. Set it higher than 10. For now<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>            // arbitrary 32. TODO: keep record of general size of results being returned.<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>            List&lt;Cell&gt; values = new ArrayList&lt;Cell&gt;(32);<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>            region.startRegionOperation(Operation.SCAN);<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>            try {<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>              int i = 0;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>              synchronized(scanner) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>                boolean stale = (region.getRegionInfo().getReplicaId() != 0);<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>                boolean clientHandlesPartials =<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>                    request.hasClientHandlesPartials() &amp;&amp; request.getClientHandlesPartials();<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>                boolean clientHandlesHeartbeats =<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>                    request.hasClientHandlesHeartbeats() &amp;&amp; request.getClientHandlesHeartbeats();<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span><a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>                // On the server side we must ensure that the correct ordering of partial results is<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>                // returned to the client to allow them to properly reconstruct the partial results.<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>                // If the coprocessor host is adding to the result list, we cannot guarantee the<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>                // correct ordering of partial results and so we prevent partial results from being<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>                // formed.<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>                boolean serverGuaranteesOrderOfPartials = results.isEmpty();<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>                boolean allowPartialResults =<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>                    clientHandlesPartials &amp;&amp; serverGuaranteesOrderOfPartials &amp;&amp; !isSmallScan;<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>                boolean moreRows = false;<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span><a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>                // Heartbeat messages occur when the processing of the ScanRequest is exceeds a<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>                // certain time threshold on the server. When the time threshold is exceeded, the<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>                // server stops the scan and sends back whatever Results it has accumulated within<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>                // that time period (may be empty). Since heartbeat messages have the potential to<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>                // create partial Results (in the event that the timeout occurs in the middle of a<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>                // row), we must only generate heartbeat messages when the client can handle both<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>                // heartbeats AND partials<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>                boolean allowHeartbeatMessages = clientHandlesHeartbeats &amp;&amp; allowPartialResults;<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>                // Default value of timeLimit is negative to indicate no timeLimit should be<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>                // enforced.<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>                long timeLimit = -1;<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span><a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>                // Set the time limit to be half of the more restrictive timeout value (one of the<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>                // timeout values must be positive). In the event that both values are positive, the<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>                // more restrictive of the two is used to calculate the limit.<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>                if (allowHeartbeatMessages &amp;&amp; (scannerLeaseTimeoutPeriod &gt; 0 || rpcTimeout &gt; 0)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>                  long timeLimitDelta;<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>                  if (scannerLeaseTimeoutPeriod &gt; 0 &amp;&amp; rpcTimeout &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>                    timeLimitDelta = Math.min(scannerLeaseTimeoutPeriod, rpcTimeout);<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>                  } else {<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>                    timeLimitDelta =<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>                        scannerLeaseTimeoutPeriod &gt; 0 ? scannerLeaseTimeoutPeriod : rpcTimeout;<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>                  }<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>                  // Use half of whichever timeout value was more restrictive... But don't allow<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>                  // the time limit to be less than the allowable minimum (could cause an<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>                  // immediatate timeout before scanning any data).<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>                  timeLimitDelta = Math.max(timeLimitDelta / 2, minimumScanTimeLimitDelta);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>                  timeLimit = System.currentTimeMillis() + timeLimitDelta;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>                }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span><a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>                final LimitScope sizeScope =<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>                    allowPartialResults ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>                final LimitScope timeScope =<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>                    allowHeartbeatMessages ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span><a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>                boolean trackMetrics =<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>                    request.hasTrackScanMetrics() &amp;&amp; request.getTrackScanMetrics();<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span><a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>                // Configure with limits for this RPC. Set keep progress true since size progress<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>                // towards size limit should be kept between calls to nextRaw<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>                ScannerContext.Builder contextBuilder = ScannerContext.newBuilder(true);<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>                contextBuilder.setSizeLimit(sizeScope, maxResultSize);<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>                contextBuilder.setBatchLimit(scanner.getBatch());<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>                contextBuilder.setTimeLimit(timeScope, timeLimit);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>                contextBuilder.setTrackMetrics(trackMetrics);<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>                ScannerContext scannerContext = contextBuilder.build();<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>                boolean limitReached = false;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>                while (i &lt; rows) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>                  // Reset the batch progress to 0 before every call to RegionScanner#nextRaw. The<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>                  // batch limit is a limit on the number of cells per Result. Thus, if progress is<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>                  // being tracked (i.e. scannerContext.keepProgress() is true) then we need to<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>                  // reset the batch progress between nextRaw invocations since we don't want the<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>                  // batch progress from previous calls to affect future calls<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>                  scannerContext.setBatchProgress(0);<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>                  // Collect values to be returned here<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>                  moreRows = scanner.nextRaw(values, scannerContext);<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>                  if (!values.isEmpty()) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>                    final boolean partial = scannerContext.partialResultFormed();<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>                    Result r = Result.create(values, null, stale, partial);<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>                    lastBlock = addSize(context, r, lastBlock);<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>                    results.add(r);<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>                    i++;<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>                  }<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span><a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>                  boolean sizeLimitReached = scannerContext.checkSizeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>                  boolean timeLimitReached = scannerContext.checkTimeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>                  boolean rowLimitReached = i &gt;= rows;<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>                  limitReached = sizeLimitReached || timeLimitReached || rowLimitReached;<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span><a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>                  if (limitReached || !moreRows) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>                    if (LOG.isTraceEnabled()) {<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>                      LOG.trace("Done scanning. limitReached: " + limitReached + " moreRows: "<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>                          + moreRows + " scannerContext: " + scannerContext);<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>                    }<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>                    // We only want to mark a ScanResponse as a heartbeat message in the event that<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>                    // there are more values to be read server side. If there aren't more values,<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>                    // marking it as a heartbeat is wasteful because the client will need to issue<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>                    // another ScanRequest only to realize that they already have all the values<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>                    if (moreRows) {<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>                      // Heartbeat messages occur when the time limit has been reached.<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>                      builder.setHeartbeatMessage(timeLimitReached);<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>                    }<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>                    break;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>                  }<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>                  values.clear();<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>                }<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span><a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>                if (limitReached || moreRows) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>                  // We stopped prematurely<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>                  builder.setMoreResultsInRegion(true);<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>                } else {<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>                  // We didn't get a single batch<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>                  builder.setMoreResultsInRegion(false);<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>                }<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span><a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>                // Check to see if the client requested that we track metrics server side. If the<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>                // client requested metrics, retrieve the metrics from the scanner context.<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>                if (trackMetrics) {<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>                  Map&lt;String, Long&gt; metrics = scannerContext.getMetrics().getMetricsMap();<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>                  ScanMetrics.Builder metricBuilder = ScanMetrics.newBuilder();<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>                  NameInt64Pair.Builder pairBuilder = NameInt64Pair.newBuilder();<a name="line.2695"></a>
+<span class="sourceLineNo">2568</span>          }<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span><a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>          if (!done) {<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>            long maxResultSize = Math.min(scanner.getMaxResultSize(), maxQuotaResultSize);<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>            if (maxResultSize &lt;= 0) {<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>              maxResultSize = maxQuotaResultSize;<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span>            }<a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>            // This is cells inside a row. Default size is 10 so if many versions or many cfs,<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>            // then we'll resize. Resizings show in profiler. Set it higher than 10. For now<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>            // arbitrary 32. TODO: keep record of general size of results being returned.<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>            List&lt;Cell&gt; values = new ArrayList&lt;Cell&gt;(32);<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span>            region.startRegionOperation(Operation.SCAN);<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>            try {<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>              int i = 0;<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>              synchronized(scanner) {<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>                boolean stale = (region.getRegionInfo().getReplicaId() != 0);<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>                boolean clientHandlesPartials =<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>                    request.hasClientHandlesPartials() &amp;&amp; request.getClientHandlesPartials();<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>                boolean clientHandlesHeartbeats =<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>                    request.hasClientHandlesHeartbeats() &amp;&amp; request.getClientHandlesHeartbeats();<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span><a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>                // On the server side we must ensure that the correct ordering of partial results is<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>                // returned to the client to allow them to properly reconstruct the partial results.<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>                // If the coprocessor host is adding to the result list, we cannot guarantee the<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>                // correct ordering of partial results and so we prevent partial results from being<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>                // formed.<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>                boolean serverGuaranteesOrderOfPartials = results.isEmpty();<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>                boolean allowPartialResults =<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>                    clientHandlesPartials &amp;&amp; serverGuaranteesOrderOfPartials &amp;&amp; !isSmallScan;<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>                boolean moreRows = false;<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span><a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>                // Heartbeat messages occur when the processing of the ScanRequest is exceeds a<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>                // certain time threshold on the server. When the time threshold is exceeded, the<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>                // server stops the scan and sends back whatever Results it has accumulated within<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>                // that time period (may be empty). Since heartbeat messages have the potential to<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>                // create partial Results (in the event that the timeout occurs in the middle of a<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>                // row), we must only generate heartbeat messages when the client can handle both<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>                // heartbeats AND partials<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>                boolean allowHeartbeatMessages = clientHandlesHeartbeats &amp;&amp; allowPartialResults;<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span><a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>                // Default value of timeLimit is negative to indicate no timeLimit should be<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>                // enforced.<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span>                long timeLimit = -1;<a name="line.2610"></a>
+<span class="sourceLineNo">2611</span><a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>                // Set the time limit to be half of the more restrictive timeout value (one of the<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>                // timeout values must be positive). In the event that both values are positive, the<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>                // more restrictive of the two is used to calculate the limit.<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>                if (allowHeartbeatMessages &amp;&amp; (scannerLeaseTimeoutPeriod &gt; 0 || rpcTimeout &gt; 0)) {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>                  long timeLimitDelta;<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>                  if (scannerLeaseTimeoutPeriod &gt; 0 &amp;&amp; rpcTimeout &gt; 0) {<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>                    timeLimitDelta = Math.min(scannerLeaseTimeoutPeriod, rpcTimeout);<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>                  } else {<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>                    timeLimitDelta =<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>                        scannerLeaseTimeoutPeriod &gt; 0 ? scannerLeaseTimeoutPeriod : rpcTimeout;<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>                  }<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>                  // Use half of whichever timeout value was more restrictive... But don't allow<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>                  // the time limit to be less than the allowable minimum (could cause an<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>                  // immediatate timeout before scanning any data).<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>                  timeLimitDelta = Math.max(timeLimitDelta / 2, minimumScanTimeLimitDelta);<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>                  timeLimit = System.currentTimeMillis() + timeLimitDelta;<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>                }<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span><a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>                final LimitScope sizeScope =<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>                    allowPartialResults ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>                final LimitScope timeScope =<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span>                    allowHeartbeatMessages ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2633"></a>
+<span class="sourceLineNo">2634</span><a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>                boolean trackMetrics =<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>                    request.hasTrackScanMetrics() &amp;&amp; request.getTrackScanMetrics();<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span><a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>                // Configure with limits for this RPC. Set keep progress true since size progress<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>                // towards size limit should be kept between calls to nextRaw<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>                ScannerContext.Builder contextBuilder = ScannerContext.newBuilder(true);<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>                contextBuilder.setSizeLimit(sizeScope, maxResultSize);<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>                contextBuilder.setBatchLimit(scanner.getBatch());<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span>                contextBuilder.setTimeLimit(timeScope, timeLimit);<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>                contextBuilder.setTrackMetrics(trackMetrics);<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>                ScannerContext scannerContext = contextBuilder.build();<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>                boolean limitReached = false;<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>                while (i &lt; rows) {<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>                  // Reset the batch progress to 0 before every call to RegionScanner#nextRaw. The<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>                  // batch limit is a limit on the number of cells per Result. Thus, if progress is<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>                  // being tracked (i.e. scannerContext.keepProgress() is true) then we need to<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>                  // reset the batch progress between nextRaw invocations since we don't want the<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>                  // batch progress from previous calls to affect future calls<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>                  scannerContext.setBatchProgress(0);<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span><a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>                  // Collect values to be returned here<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>                  moreRows = scanner.nextRaw(values, scannerContext);<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span><a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>                  if (!values.isEmpty()) {<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>                    final boolean partial = scannerContext.partialResultFormed();<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>                    Result r = Result.create(values, null, stale, partial);<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>                    lastBlock = addSize(context, r, lastBlock);<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>                    results.add(r);<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>                    i++;<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>                  }<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span><a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>                  boolean sizeLimitReached = scannerContext.checkSizeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>                  boolean timeLimitReached = scannerContext.checkTimeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>                  boolean rowLimitReached = i &gt;= rows;<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>                  limitReached = sizeLimitReached || timeLimitReached || rowLimitReached;<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span><a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>                  if (limitReached || !moreRows) {<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>                    if (LOG.isTraceEnabled()) {<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span>                      LOG.trace("Done scanning. limitReached: " + limitReached + " moreRows: "<a name="line.2673"></a>
+<span class="sourceLineNo">2674</span>                          + moreRows + " scannerContext: " + scannerContext);<a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>                    }<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>                    // We only want to mark a ScanResponse as a heartbeat message in the event that<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>                    // there are more values to be read server side. If there aren't more values,<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>                    // marking it as a heartbeat is wasteful because the client will need to issue<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>                    // another ScanRequest only to realize that they already have all the values<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>                    if (moreRows) {<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>                      // Heartbeat messages occur when the time limit has been reached.<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>                      builder.setHeartbeatMessage(timeLimitReached);<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>                    }<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>                    break;<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>                  }<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>                  values.clear();<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>                }<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span><a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>                if (limitReached || moreRows) {<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>                  // We stopped prematurely<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>                  builder.setMoreResultsInRegion(true);<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>                } else {<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>                  // We didn't get a single batch<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>                  builder.setMoreResultsInRegion(false);<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>                }<a name="line.2695"></a>
 <span class="sourceLineNo">2696</span><a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>                  for (Entry&lt;String, Long&gt; entry : metrics.entrySet()) {<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>                    pairBuilder.setName(entry.getKey());<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>                    pairBuilder.setValue(entry.getValue());<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>                    metricBuilder.addMetrics(pairBuilder.build());<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>                  }<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span><a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>                  builder.setScanMetrics(metricBuilder.build());<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>                }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>              }<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>              region.updateReadRequestsCount(i);<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>              long responseCellSize = context != null ? context.getResponseCellSize() : 0;<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>              region.getMetrics().updateScanNext(responseCellSize);<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>              if (regionServer.metricsRegionServer != null) {<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>                regionServer.metricsRegionServer.updateScannerNext(responseCellSize);<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>              }<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>            } finally {<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>              region.closeRegionOperation();<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>            }<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>            // coprocessor postNext hook<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>              region.getCoprocessorHost().postScannerNext(scanner, results, rows, true);<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>            }<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>          }<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span><a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>          quota.addScanResult(results);<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>          // If the scanner's filter - if any - is done with the scan<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>          // and wants to tell the client to stop the scan. This is done by passing<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>          // a null result, and setting moreResults to false.<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>          if (scanner.isFilterDone() &amp;&amp; results.isEmpty()) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>            moreResults = false;<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>            results = null;<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>          } else {<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>            addResults(builder, results, controller,<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>                RegionReplicaUtil.isDefaultReplica(region.getRegionInfo()),<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>                isClientCellBlockSupport(context));<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>          }<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        } catch (IOException e) {<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>          // if we have an exception on scanner next and we are using the callSeq<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          // we should rollback because the client will retry with the same callSeq<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>          // and get an OutOfOrderScannerNextException if we don't do so.<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>          if (rsh != null &amp;&amp; request.hasNextCallSeq()) {<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>            rsh.rollbackNextCallSeq();<a name="line.2739"></a>
+<span class="sourceLineNo">2697</span>                // Check to see if the client requested that we track metrics server side. If the<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>                // client requested metrics, retrieve the metrics from the scanner context.<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>                if (trackMetrics) {<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>                  Map&lt;String, Long&gt; metrics = scannerContext.getMetrics().getMetricsMap();<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>                  ScanMetrics.Builder metricBuilder = ScanMetrics.newBuilder();<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>                  NameInt64Pair.Builder pairBuilder = NameInt64Pair.newBuilder();<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span><a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>                  for (Entry&lt;String, Long&gt; entry : metrics.entrySet()) {<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>                    pairBuilder.setName(entry.getKey());<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>                    pairBuilder.setValue(entry.getValue());<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>                    metricBuilder.addMetrics(pairBuilder.build());<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>                  }<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span><a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>                  builder.setScanMetrics(metricBuilder.build());<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>                }<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>              }<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>              region.updateReadRequestsCount(i);<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>              long responseCellSize = context != null ? context.getResponseCellSize() : 0;<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>              region.getMetrics().updateScanNext(responseCellSize);<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>              if (regionServer.metricsRegionServer != null) {<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>                regionServer.metricsRegionServer.updateScannerNext(responseCellSize);<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>              }<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>            } finally {<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>              region.closeRegionOperation();<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>            }<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>            // coprocessor postNext hook<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>              region.getCoprocessorHost().postScannerNext(scanner, results, rows, true);<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>            }<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>          }<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span><a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>          quota.addScanResult(results);<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span><a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>          // If the scanner's filter - if any - is done with the scan<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>          // and wants to tell the client to stop the scan. This is done by passing<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>          // a null result, and setting moreResults to false.<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>          if (scanner.isFilterDone() &amp;&amp; results.isEmpty()) {<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>            moreResults = false;<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>            results = null;<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>          } else {<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>            addResults(builder, results, controller,<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>                RegionReplicaUtil.isDefaultReplica(region.getRegionInfo()),<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>                isClientCellBlockSupport(context));<a name="line.2739"></a>
 <span class="sourceLineNo">2740</span>          }<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>          throw e;<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>        } finally {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>          if (context != null) {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>            context.setCallBack(rsh.shippedCallback);<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>          }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>          // Adding resets expiration time on lease.<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>          if (scanners.containsKey(scannerName)) {<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>            ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>            // When context != null, adding back the lease will be done in callback set above.<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>            if (context == null) {<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>              if (lease != null) regionServer.leases.addLease(lease);<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>            }<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>          }<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>        }<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>      }<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span><a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>      if (!moreResults || closeScanner) {<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        ttl = 0;<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        moreResults = false;<a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>        if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>          if (region.getCoprocessorHost().preScannerClose(scanner)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>            return builder.build(); // bypass<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>          }<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>        }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>        rsh = scanners.remove(scannerName);<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>        if (rsh != null) {<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>          if (context != null) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>            context.setCallBack(rsh.closeCallBack);<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>          } else {<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>            rsh.s.close();<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>          }<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>          try {<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>          } catch (LeaseException le) {<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>            // No problem, ignore<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>            if (LOG.isTraceEnabled()) {<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>              LOG.trace("Un-able to cancel lease of scanner. It could already be closed.");<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>            }<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>          }<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>            region.getCoprocessorHost().postScannerClose(scanner);<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>          }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>        }<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      }<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span><a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>      if (ttl &gt; 0) {<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        builder.setTtl(ttl);<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>      builder.setScannerId(scannerId);<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      builder.setMoreResults(moreResults);<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      return builder.build();<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>    } catch (IOException ie) {<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>      if (scannerName != null &amp;&amp; ie instanceof NotServingRegionException) {<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        RegionScannerHolder rsh = scanners.remove(scannerName);<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>        if (rsh != null) {<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>          try {<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>            RegionScanner scanner = rsh.s;<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>            LOG.warn(scannerName + " encountered " + ie.getMessage() + ", closing ...");<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>            scanner.close();<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>          } catch (IOException e) {<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>           LOG.warn("Getting exception closing " + scannerName, e);<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>          }<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        }<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>      }<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>      throw new ServiceException(ie);<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>    } finally {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>      if (quota != null) {<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        quota.close();<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>      }<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>    }<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>  }<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span><a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>  @Override<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>  public CoprocessorServiceResponse execRegionServerService(RpcController controller,<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      CoprocessorServiceRequest request) throws ServiceException {<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>    return regionServer.execRegionServerService(controller, request);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>  }<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span><a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>  @Override<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>  public UpdateConfigurationResponse updateConfiguration(<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>      RpcController controller, UpdateConfigurationRequest request)<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>      throws ServiceException {<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>    try {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>      this.regionServer.updateConfiguration();<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    } catch (Exception e) {<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>      throw new ServiceException(e);<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    }<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>    return UpdateConfigurationResponse.getDefaultInstance();<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>  }<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>}<a name="line.2831"></a>
+<span class="sourceLineNo">2741</span>        } catch (IOException e) {<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>          // if we have an exception on scanner next and we are using the callSeq<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>          // we should rollback because the client will retry with the same callSeq<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>          // and get an OutOfOrderScannerNextException if we don't do so.<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>          if (rsh != null &amp;&amp; request.hasNextCallSeq()) {<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>            rsh.rollbackNextCallSeq();<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>          }<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>          throw e;<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>        } finally {<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>          if (context != null) {<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>            context.setCallBack(rsh.shippedCallback);<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>          }<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>          // Adding resets expiration time on lease.<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>          if (scanners.containsKey(scannerName)) {<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>            ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>            // When context != null, adding back the lease will be done in callback set above.<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>            if (context == null) {<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>              if (lease != null) regionServer.leases.addLease(lease);<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>            }<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>          }<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>        }<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>      }<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span><a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>      if (!moreResults || closeScanner) {<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>        ttl = 0;<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>        moreResults = false;<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>        if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>          if (region.getCoprocessorHost().preScannerClose(scanner)) {<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>            return builder.build(); // bypass<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>          }<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>        }<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>        rsh = scanners.remove(scannerName);<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>        if (rsh != null) {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>          if (context != null) {<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>            context.setCallBack(rsh.closeCallBack);<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>          } else {<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>            rsh.s.close();<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>          }<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>          try {<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>          } catch (LeaseException le) {<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>            // No problem, ignore<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>            if (LOG.isTraceEnabled()) {<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>              LOG.trace("Un-able to cancel lease of scanner. It could already be closed.");<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>            }<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>          }<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>            region.getCoprocessorHost().postScannerClose(scanner);<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>          }<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>        }<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>      }<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span><a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>      if (ttl &gt; 0) {<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>        builder.setTtl(ttl);<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>      builder.setScannerId(scannerId);<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>      builder.setMoreResults(moreResults);<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>      return builder.build();<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>    } catch (IOException ie) {<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>      if (scannerName != null &amp;&amp; ie instanceof NotServingRegionException) {<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>        RegionScannerHolder rsh = scanners.remove(scannerName);<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>        if (rsh != null) {<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>          try {<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>            RegionScanner scanner = rsh.s;<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>            LOG.warn(scannerName + " encountered " + ie.getMessage() + ", closing ...");<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>            scanner.close();<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>          } catch (IOException e) {<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>           LOG.warn("Getting exception closing " + scannerName, e);<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>          }<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>        }<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>      }<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>      throw new ServiceException(ie);<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>    } finally {<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>      if (quota != null) {<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>        quota.close();<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>      }<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>    }<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>  }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span><a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>  @Override<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>  public CoprocessorServiceResponse execRegionServerService(RpcController controller,<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>      CoprocessorServiceRequest request) throws ServiceException {<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>    return regionServer.execRegionServerService(controller, request);<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>  }<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span><a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>  @Override<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>  public UpdateConfigurationResponse updateConfiguration(<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>      RpcController controller, UpdateConfigurationRequest request)<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>      throws ServiceException {<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>    try {<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>      this.regionServer.updateConfiguration();<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>    } catch (Exception e) {<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>      throw new ServiceException(e);<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>    }<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>    return UpdateConfigurationResponse.getDefaultInstance();<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>  }<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>}<a name="line.2838"></a>
 
 
 


[13/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html
index f3aed1b..0597160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html
@@ -1513,810 +1513,816 @@
 <span class="sourceLineNo">1505</span>      if (maxSeqIdInStores == null || maxSeqIdInStores.isEmpty()) {<a name="line.1505"></a>
 <span class="sourceLineNo">1506</span>        return;<a name="line.1506"></a>
 <span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        if (!CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          // or the master was crashed before and we can not get the information.<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>          if (maxSeqId != null &amp;&amp; maxSeqId.longValue() &gt;= logEntry.getKey().getLogSeqNum()) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>            skippedCells.add(cell);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>          }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      }<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (!skippedCells.isEmpty()) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        logEntry.getEdit().getCells().removeAll(skippedCells);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1508</span>      // Create the array list for the cells that aren't filtered.<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // We make the assumption that most cells will be kept.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      ArrayList&lt;Cell&gt; keptCells = new ArrayList&lt;Cell&gt;(logEntry.getEdit().getCells().size());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>          keptCells.add(cell);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        } else {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          // or the master was crashed before and we can not get the information.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>          if (maxSeqId == null || maxSeqId.longValue() &lt; logEntry.getKey().getLogSeqNum()) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>            keptCells.add(cell);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      }<a name="line.1523"></a>
 <span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    @Override<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (entries.isEmpty()) {<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        return;<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      WriterAndPath wap = null;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      long startTime = System.nanoTime();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      try {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        int editsCount = 0;<a name="line.1537"></a>
+<span class="sourceLineNo">1525</span>      // Anything in the keptCells array list is still live.<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // So rather than removing the cells from the array list<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      // which would be an O(n^2) operation, we just replace the list<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      logEntry.getEdit().setCells(keptCells);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    @Override<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      if (entries.isEmpty()) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>        return;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      }<a name="line.1537"></a>
 <span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        for (Entry logEntry : entries) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          if (wap == null) {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>            wap = getWriterAndPath(logEntry);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>            if (wap == null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>              if (LOG.isDebugEnabled()) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>              }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>              return;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          filterCellByStore(logEntry);<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            wap.w.append(logEntry);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            editsCount++;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          } else {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>            wap.incrementSkippedEdits(1);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>          }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        // Pass along summary statistics<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        wap.incrementEdits(editsCount);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      } catch (IOException e) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          e = e instanceof RemoteException ?<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>        throw e;<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    }<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span><a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    /**<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>     */<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    @Override<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      synchronized (writers) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>        }<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      return ret;<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span><a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    @Override<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    public int getNumberOfRecoveredRegions() {<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      return writers.size();<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>  }<a name="line.1587"></a>
+<span class="sourceLineNo">1539</span>      WriterAndPath wap = null;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      long startTime = System.nanoTime();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      try {<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        int editsCount = 0;<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span><a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>        for (Entry logEntry : entries) {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>          if (wap == null) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>            wap = getWriterAndPath(logEntry);<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>            if (wap == null) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>              if (LOG.isDebugEnabled()) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>              }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>              return;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>            }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          filterCellByStore(logEntry);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            wap.w.append(logEntry);<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            editsCount++;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          } else {<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>            wap.incrementSkippedEdits(1);<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>          }<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        // Pass along summary statistics<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        wap.incrementEdits(editsCount);<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      } catch (IOException e) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>          e = e instanceof RemoteException ?<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>        throw e;<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    }<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span><a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>    /**<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>     */<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    @Override<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      synchronized (writers) {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      return ret;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    }<a name="line.1587"></a>
 <span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  /**<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>   */<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  public abstract static class SinkWriter {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    /* Count of edits written to this path */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    long editsWritten = 0;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    /* Count of edits skipped to this path */<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    long editsSkipped = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    /* Number of nanos spent writing to this log */<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    long nanosSpent = 0;<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    void incrementEdits(int edits) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      editsWritten += edits;<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    void incrementSkippedEdits(int skipped) {<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      editsSkipped += skipped;<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span><a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    void incrementNanoTime(long nanos) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      nanosSpent += nanos;<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    }<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  }<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span><a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>  /**<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * data written to this output.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   */<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    final Path p;<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    final Writer w;<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      this.p = p;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      this.w = w;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>  }<a name="line.1625"></a>
+<span class="sourceLineNo">1589</span>    @Override<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    public int getNumberOfRecoveredRegions() {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      return writers.size();<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  }<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span><a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>  /**<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>   */<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>  public abstract static class SinkWriter {<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    /* Count of edits written to this path */<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    long editsWritten = 0;<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    /* Count of edits skipped to this path */<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    long editsSkipped = 0;<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    /* Number of nanos spent writing to this log */<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    long nanosSpent = 0;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span><a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    void incrementEdits(int edits) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      editsWritten += edits;<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>    void incrementSkippedEdits(int skipped) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      editsSkipped += skipped;<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span><a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    void incrementNanoTime(long nanos) {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      nanosSpent += nanos;<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span><a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>  /**<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>   * data written to this output.<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>   */<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    final Path p;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    final Writer w;<a name="line.1625"></a>
 <span class="sourceLineNo">1626</span><a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>  /**<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>   */<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    private static final String KEY_DELIMITER = "#";<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    private long waitRegionOnlineTimeOut;<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    // online encoded region name -&gt; region location map<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span><a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>    /**<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>     * Map key -&gt; value layout<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>     */<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span><a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        int numWriters) {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      super(controller, entryBuffers, numWriters);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      this.waitRegionOnlineTimeOut =<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>        entryBuffers, numWriters);<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span><a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>    @Override<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      if (entries.isEmpty()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        return;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span><a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      // check if current region in a disabling or disabled table<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        // need fall back to old way<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>        // store regions we have recovered so far<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        return;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      }<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span><a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      // group entries by region servers<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      groupEditsByServer(entries);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span><a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      // process workitems<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      String maxLocKey = null;<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      int maxSize = 0;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>            maxSize = curQueue.size();<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>            maxQueue = curQueue;<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>            maxLocKey = entry.getKey();<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>          }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        if (maxSize &lt; minBatchSize<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>          // buffer more to process<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>          return;<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        } else if (maxSize &gt; 0) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>        }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span><a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>      if (maxSize &gt; 0) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>        recoveredRegions.add(encodedRegionName);<a name="line.1721"></a>
+<span class="sourceLineNo">1627</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      this.p = p;<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      this.w = w;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>    }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>  }<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span><a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>  /**<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>   */<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    private static final String KEY_DELIMITER = "#";<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>    private long waitRegionOnlineTimeOut;<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    // online encoded region name -&gt; region location map<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span><a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>    /**<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>     * Map key -&gt; value layout<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>     */<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span><a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span><a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>        int numWriters) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      super(controller, entryBuffers, numWriters);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      this.waitRegionOnlineTimeOut =<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>        entryBuffers, numWriters);<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    @Override<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (entries.isEmpty()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        return;<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      }<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span><a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      // check if current region in a disabling or disabled table<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // need fall back to old way<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>        // store regions we have recovered so far<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        return;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span><a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      // group entries by region servers<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      groupEditsByServer(entries);<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span><a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      // process workitems<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      String maxLocKey = null;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>      int maxSize = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>            maxSize = curQueue.size();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>            maxQueue = curQueue;<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>            maxLocKey = entry.getKey();<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>          }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>        }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        if (maxSize &lt; minBatchSize<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>          // buffer more to process<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>          return;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        } else if (maxSize &gt; 0) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span><a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      if (maxSize &gt; 0) {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
 <span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
 <span class="sourceLineNo">1724</span><a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    /**<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>     * Helper function to group WALEntries to individual region servers<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>     * @throws IOException<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>     */<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      for (Entry entry : entries) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>        WALEdit edit = entry.getEdit();<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        TableName table = entry.getKey().getTablename();<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>        // clear scopes which isn't needed for recovery<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>        entry.getKey().setScopes(null);<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>        // skip edits of non-existent tables<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>          this.skippedEdits.incrementAndGet();<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>          continue;<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        }<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span><a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        boolean needSkip = false;<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        HRegionLocation loc = null;<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        String locKey = null;<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span><a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>        for (Cell cell : cells) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>          boolean isCompactionEntry = false;<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>              try {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>                  .toByteArray());<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>                row = regionName[1]; // startKey of the region<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>                isCompactionEntry = true;<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>              } catch (Exception ex) {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>                skippedCells.add(cell);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>                continue;<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>              }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>            } else {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>              skippedCells.add(cell);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>              continue;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>            }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>          try {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>            loc =<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>                  encodeRegionNameStr);<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            // skip replaying the compaction if the region is gone<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>                  + encodeRegionNameStr);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>              needSkip = true;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>            }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>          } catch (TableNotFoundException ex) {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>            // table has been deleted so skip edits of the table<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>                + encodeRegionNameStr);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>            if (nonExistentTables == null) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>            }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            nonExistentTables.add(table);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>            this.skippedEdits.incrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>            needSkip = true;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>            break;<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          }<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span><a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          cachedLastFlushedSequenceId =<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          if (cachedLastFlushedSequenceId != null<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            // skip the whole WAL entry<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            this.skippedEdits.incrementAndGet();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            needSkip = true;<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            break;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } else {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            if (maxStoreSequenceIds == null) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>              maxStoreSequenceIds =<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            }<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            if (maxStoreSequenceIds != null) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>                skippedCells.add(cell);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                continue;<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>              }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>            }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>          }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        }<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>        // skip the edit<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        if (loc == null || needSkip) continue;<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>        if (!skippedCells.isEmpty()) {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          cells.removeAll(skippedCells);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        synchronized (serverToBufferQueueMap) {<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>          if (queue == null) {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>            queue =<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>          }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>        }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        // store regions we have recovered so far<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      }<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    }<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span><a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    /**<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>     * destination region is online for replay.<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>     * @throws IOException<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>     */<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>      // fetch location from cache<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      if(loc != null) return loc;<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      if (loc == null) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>            + " of table:" + table);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      // check if current row moves to a different region due to region merge/split<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        // originalEncodedRegionName should have already flushed<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      }<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span><a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      Long lastFlushedSequenceId = -1l;<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      if (!isRecovering.get()) {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>        // been moved to somewhere before hosting RS fails<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>            + " because it's not in recovering.");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      } else {<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>        Long cachedLastFlushedSequenceId =<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span><a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        // update the value for the region<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>        RegionStoreSequenceIds ids =<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>              loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        if (ids != null) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>          }<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        }<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        if (cachedLastFlushedSequenceId == null<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>            || lastFlushedSequenceId &gt; cachedLastFlushedSequenceId) {<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>          lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), lastFlushedSequenceId);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        }<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      }<a name="line.1903"></a>
+<span class="sourceLineNo">1725</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>        recoveredRegions.add(encodedRegionName);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    }<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span><a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>    /**<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>     * Helper function to group WALEntries to individual region servers<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>     * @throws IOException<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>     */<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      for (Entry entry : entries) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        WALEdit edit = entry.getEdit();<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>        TableName table = entry.getKey().getTablename();<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        // clear scopes which isn't needed for recovery<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        entry.getKey().setScopes(null);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // skip edits of non-existent tables<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>          this.skippedEdits.incrementAndGet();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>          continue;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        boolean needSkip = false;<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        HRegionLocation loc = null;<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        String locKey = null;<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span><a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        for (Cell cell : cells) {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>          boolean isCompactionEntry = false;<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>              try {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>                  .toByteArray());<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>                row = regionName[1]; // startKey of the region<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>                isCompactionEntry = true;<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>              } catch (Exception ex) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>                skippedCells.add(cell);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>                continue;<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>              }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            } else {<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>              skippedCells.add(cell);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>              continue;<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>            }<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          }<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span><a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          try {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>            loc =<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>                  encodeRegionNameStr);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>            // skip replaying the compaction if the region is gone<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>                  + encodeRegionNameStr);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>              needSkip = true;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>            }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>          } catch (TableNotFoundException ex) {<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>            // table has been deleted so skip edits of the table<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>                + encodeRegionNameStr);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>            if (nonExistentTables == null) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>            }<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>            nonExistentTables.add(table);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>            this.skippedEdits.incrementAndGet();<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>            needSkip = true;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>            break;<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          }<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span><a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>          cachedLastFlushedSequenceId =<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>          if (cachedLastFlushedSequenceId != null<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            // skip the whole WAL entry<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>            this.skippedEdits.incrementAndGet();<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>            needSkip = true;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            break;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>          } else {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>            if (maxStoreSequenceIds == null) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>              maxStoreSequenceIds =<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>            }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            if (maxStoreSequenceIds != null) {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>                skippedCells.add(cell);<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                continue;<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              }<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>            }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>          }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        }<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>        // skip the edit<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        if (loc == null || needSkip) continue;<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span><a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (!skippedCells.isEmpty()) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          cells.removeAll(skippedCells);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>        synchronized (serverToBufferQueueMap) {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>          if (queue == null) {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            queue =<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>        }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>        // store regions we have recovered so far<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span><a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    /**<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>     * destination region is online for replay.<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>     * @throws IOException<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>     */<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      // fetch location from cache<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      if(loc != null) return loc;<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      if (loc == null) {<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>            + " of table:" + table);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      }<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      // check if current row moves to a different region due to region merge/split<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        // originalEncodedRegionName should have already flushed<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      Long lastFlushedSequenceId = -1l;<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      if (!isRecovering.get()) {<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>        // been moved to somewhere before hosting RS fails<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>            + " because it's not in recovering.");<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      } else {<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        Long cachedLastFlushedSequenceId =<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        // update the value for the region<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>        RegionStoreSequenceIds ids =<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>              loc.getRegionInfo().getEncodedName());<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>        if (ids != null) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>          }<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        }<a name="line.1903"></a>
 <span class="sourceLineNo">1904</span><a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      onlineRegions.put(loc.getRegionInfo().getEncodedName(), loc);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      return loc;<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span><a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>    private void processWorkItems(String key, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; actions)<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>        throws IOException {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>      RegionServerWriter rsw = null;<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span><a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long startTime = System.nanoTime();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      try {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        rsw = getRegionServerWriter(key);<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>        rsw.sink.replayEntries(actions);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>        // Pass along summary statistics<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        rsw.incrementEdits(actions.size());<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>        rsw.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      } catch (IOException e) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        throw e;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    /**<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>     * Wait until region is online on the destination region server<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>     * @param loc<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>     * @param row<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>     * @param timeout How long to wait<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>     * @param isRecovering Recovering state of the region interested on destination region server.<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>     * @return True when region is online on the destination region server<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>     * @throws InterruptedException<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>     */<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    private HRegionLocation waitUntilRegionOnline(HRegionLocation loc, byte[] row,<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>        final long timeout, AtomicBoolean isRecovering)<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>        throws IOException {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      final long endTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      final long pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      boolean reloadLocation = false;<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      TableName tableName = loc.getRegionInfo().getTable();<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      int tries = 0;<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      Throwable cause = null;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>      while (endTime &gt; EnvironmentEdgeManager.currentTime()) {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>        try {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          // Try and get regioninfo from the hosting server.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          HConnection hconn = getConnectionByTableName(tableName);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          if(reloadLocation) {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            loc = hconn.getRegionLocation(tableName, row, true);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          }<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          BlockingInterface remoteSvr = hconn.getAdmin(loc.getServerName());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          HRegionInfo region = loc.getRegionInfo();<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>          try {<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>            GetRegionInfoRequest request =<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>                RequestConverter.buildGetRegionInfoRequest(region.getRegionName());<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            GetRegionInfoResponse response = remoteSvr.getRegionInfo(null, request);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>            if (HRegionInfo.convert(response.getRegionInfo()) != null) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>              isRecovering.set((response.hasIsRecovering()) ? response.getIsRecovering() : true);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>              return loc;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            }<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          } catch (ServiceException se) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>          }<a name=

<TRUNCATED>

[28/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
index abb8a15..be615ae 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
@@ -2525,318 +2525,325 @@
 <span class="sourceLineNo">2517</span>        ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2517"></a>
 <span class="sourceLineNo">2518</span>      }<a name="line.2518"></a>
 <span class="sourceLineNo">2519</span>      assert scanner != null;<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>      RpcCallContext context = RpcServer.getCurrentCall();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>      Object lastBlock = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span><a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      quota = getQuotaManager().checkQuota(region, OperationQuota.OperationType.SCAN);<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      long maxQuotaResultSize = Math.min(maxScannerResultSize, quota.getReadAvailable());<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span><a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>      if (rows &gt; 0) {<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>        // if nextCallSeq does not match throw Exception straight away. This needs to be<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        // performed even before checking of Lease.<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>        // See HBASE-5974<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>        if (request.hasNextCallSeq()) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>          if (rsh != null) {<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>            if (request.getNextCallSeq() != rsh.getNextCallSeq()) {<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>              throw new OutOfOrderScannerNextException(<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>                "Expected nextCallSeq: " + rsh.getNextCallSeq()<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>                + " But the nextCallSeq got from client: " + request.getNextCallSeq() +<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>                "; request=" + TextFormat.shortDebugString(request));<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>            }<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>            // Increment the nextCallSeq value which is the next expected from client.<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>            rsh.incNextCallSeq();<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>          }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>        }<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        try {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>          // Remove lease while its being processed in server; protects against case<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>          // where processing of request takes &gt; lease expiration time.<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>          lease = regionServer.leases.removeLease(scannerName);<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>          List&lt;Result&gt; results = new ArrayList&lt;Result&gt;();<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span><a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>          boolean done = false;<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>          // Call coprocessor. Get region info from scanner.<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>            Boolean bypass = region.getCoprocessorHost().preScannerNext(<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>              scanner, results, rows);<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>            if (!results.isEmpty()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>              for (Result r : results) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>                lastBlock = addSize(context, r, lastBlock);<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>              }<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>            }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>            if (bypass != null &amp;&amp; bypass.booleanValue()) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>              done = true;<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>            }<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          }<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span><a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>          if (!done) {<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>            long maxResultSize = Math.min(scanner.getMaxResultSize(), maxQuotaResultSize);<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>            if (maxResultSize &lt;= 0) {<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>              maxResultSize = maxQuotaResultSize;<a name="line.2566"></a>
+<span class="sourceLineNo">2520</span>      if (request.hasRenew() &amp;&amp; request.getRenew()) {<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>        lease = regionServer.leases.removeLease(scannerName);<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>        if (lease != null &amp;&amp; scanners.containsKey(scannerName)) {<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>          regionServer.leases.addLease(lease);<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>        }<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>        return builder.build();<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>      }<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>      RpcCallContext context = RpcServer.getCurrentCall();<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>      Object lastBlock = null;<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span><a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>      quota = getQuotaManager().checkQuota(region, OperationQuota.OperationType.SCAN);<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>      long maxQuotaResultSize = Math.min(maxScannerResultSize, quota.getReadAvailable());<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span><a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>      if (rows &gt; 0) {<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>        // if nextCallSeq does not match throw Exception straight away. This needs to be<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>        // performed even before checking of Lease.<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>        // See HBASE-5974<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>        if (request.hasNextCallSeq()) {<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>          if (rsh != null) {<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>            if (request.getNextCallSeq() != rsh.getNextCallSeq()) {<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>              throw new OutOfOrderScannerNextException(<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>                "Expected nextCallSeq: " + rsh.getNextCallSeq()<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>                + " But the nextCallSeq got from client: " + request.getNextCallSeq() +<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>                "; request=" + TextFormat.shortDebugString(request));<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>            }<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>            // Increment the nextCallSeq value which is the next expected from client.<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>            rsh.incNextCallSeq();<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>          }<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>        }<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>        try {<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>          // Remove lease while its being processed in server; protects against case<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>          // where processing of request takes &gt; lease expiration time.<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>          lease = regionServer.leases.removeLease(scannerName);<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>          List&lt;Result&gt; results = new ArrayList&lt;Result&gt;();<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span><a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>          boolean done = false;<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>          // Call coprocessor. Get region info from scanner.<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span>            Boolean bypass = region.getCoprocessorHost().preScannerNext(<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>              scanner, results, rows);<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>            if (!results.isEmpty()) {<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>              for (Result r : results) {<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>                lastBlock = addSize(context, r, lastBlock);<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>              }<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>            }<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>            if (bypass != null &amp;&amp; bypass.booleanValue()) {<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span>              done = true;<a name="line.2566"></a>
 <span class="sourceLineNo">2567</span>            }<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>            // This is cells inside a row. Default size is 10 so if many versions or many cfs,<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>            // then we'll resize. Resizings show in profiler. Set it higher than 10. For now<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>            // arbitrary 32. TODO: keep record of general size of results being returned.<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>            List&lt;Cell&gt; values = new ArrayList&lt;Cell&gt;(32);<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>            region.startRegionOperation(Operation.SCAN);<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>            try {<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>              int i = 0;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>              synchronized(scanner) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>                boolean stale = (region.getRegionInfo().getReplicaId() != 0);<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>                boolean clientHandlesPartials =<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>                    request.hasClientHandlesPartials() &amp;&amp; request.getClientHandlesPartials();<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>                boolean clientHandlesHeartbeats =<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>                    request.hasClientHandlesHeartbeats() &amp;&amp; request.getClientHandlesHeartbeats();<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span><a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>                // On the server side we must ensure that the correct ordering of partial results is<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>                // returned to the client to allow them to properly reconstruct the partial results.<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>                // If the coprocessor host is adding to the result list, we cannot guarantee the<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>                // correct ordering of partial results and so we prevent partial results from being<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>                // formed.<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>                boolean serverGuaranteesOrderOfPartials = results.isEmpty();<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>                boolean allowPartialResults =<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>                    clientHandlesPartials &amp;&amp; serverGuaranteesOrderOfPartials &amp;&amp; !isSmallScan;<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>                boolean moreRows = false;<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span><a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>                // Heartbeat messages occur when the processing of the ScanRequest is exceeds a<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>                // certain time threshold on the server. When the time threshold is exceeded, the<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>                // server stops the scan and sends back whatever Results it has accumulated within<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>                // that time period (may be empty). Since heartbeat messages have the potential to<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>                // create partial Results (in the event that the timeout occurs in the middle of a<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>                // row), we must only generate heartbeat messages when the client can handle both<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>                // heartbeats AND partials<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>                boolean allowHeartbeatMessages = clientHandlesHeartbeats &amp;&amp; allowPartialResults;<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>                // Default value of timeLimit is negative to indicate no timeLimit should be<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>                // enforced.<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>                long timeLimit = -1;<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span><a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>                // Set the time limit to be half of the more restrictive timeout value (one of the<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>                // timeout values must be positive). In the event that both values are positive, the<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>                // more restrictive of the two is used to calculate the limit.<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>                if (allowHeartbeatMessages &amp;&amp; (scannerLeaseTimeoutPeriod &gt; 0 || rpcTimeout &gt; 0)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>                  long timeLimitDelta;<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>                  if (scannerLeaseTimeoutPeriod &gt; 0 &amp;&amp; rpcTimeout &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>                    timeLimitDelta = Math.min(scannerLeaseTimeoutPeriod, rpcTimeout);<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>                  } else {<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>                    timeLimitDelta =<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>                        scannerLeaseTimeoutPeriod &gt; 0 ? scannerLeaseTimeoutPeriod : rpcTimeout;<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>                  }<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>                  // Use half of whichever timeout value was more restrictive... But don't allow<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>                  // the time limit to be less than the allowable minimum (could cause an<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>                  // immediatate timeout before scanning any data).<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>                  timeLimitDelta = Math.max(timeLimitDelta / 2, minimumScanTimeLimitDelta);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>                  timeLimit = System.currentTimeMillis() + timeLimitDelta;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>                }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span><a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>                final LimitScope sizeScope =<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>                    allowPartialResults ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>                final LimitScope timeScope =<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>                    allowHeartbeatMessages ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span><a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>                boolean trackMetrics =<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>                    request.hasTrackScanMetrics() &amp;&amp; request.getTrackScanMetrics();<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span><a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>                // Configure with limits for this RPC. Set keep progress true since size progress<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>                // towards size limit should be kept between calls to nextRaw<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>                ScannerContext.Builder contextBuilder = ScannerContext.newBuilder(true);<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>                contextBuilder.setSizeLimit(sizeScope, maxResultSize);<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>                contextBuilder.setBatchLimit(scanner.getBatch());<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>                contextBuilder.setTimeLimit(timeScope, timeLimit);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>                contextBuilder.setTrackMetrics(trackMetrics);<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>                ScannerContext scannerContext = contextBuilder.build();<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>                boolean limitReached = false;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>                while (i &lt; rows) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>                  // Reset the batch progress to 0 before every call to RegionScanner#nextRaw. The<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>                  // batch limit is a limit on the number of cells per Result. Thus, if progress is<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>                  // being tracked (i.e. scannerContext.keepProgress() is true) then we need to<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>                  // reset the batch progress between nextRaw invocations since we don't want the<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>                  // batch progress from previous calls to affect future calls<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>                  scannerContext.setBatchProgress(0);<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>                  // Collect values to be returned here<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>                  moreRows = scanner.nextRaw(values, scannerContext);<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>                  if (!values.isEmpty()) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>                    final boolean partial = scannerContext.partialResultFormed();<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>                    Result r = Result.create(values, null, stale, partial);<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>                    lastBlock = addSize(context, r, lastBlock);<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>                    results.add(r);<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>                    i++;<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>                  }<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span><a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>                  boolean sizeLimitReached = scannerContext.checkSizeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>                  boolean timeLimitReached = scannerContext.checkTimeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>                  boolean rowLimitReached = i &gt;= rows;<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>                  limitReached = sizeLimitReached || timeLimitReached || rowLimitReached;<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span><a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>                  if (limitReached || !moreRows) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>                    if (LOG.isTraceEnabled()) {<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>                      LOG.trace("Done scanning. limitReached: " + limitReached + " moreRows: "<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>                          + moreRows + " scannerContext: " + scannerContext);<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>                    }<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>                    // We only want to mark a ScanResponse as a heartbeat message in the event that<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>                    // there are more values to be read server side. If there aren't more values,<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>                    // marking it as a heartbeat is wasteful because the client will need to issue<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>                    // another ScanRequest only to realize that they already have all the values<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>                    if (moreRows) {<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>                      // Heartbeat messages occur when the time limit has been reached.<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>                      builder.setHeartbeatMessage(timeLimitReached);<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>                    }<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>                    break;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>                  }<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>                  values.clear();<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>                }<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span><a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>                if (limitReached || moreRows) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>                  // We stopped prematurely<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>                  builder.setMoreResultsInRegion(true);<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>                } else {<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>                  // We didn't get a single batch<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>                  builder.setMoreResultsInRegion(false);<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>                }<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span><a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>                // Check to see if the client requested that we track metrics server side. If the<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>                // client requested metrics, retrieve the metrics from the scanner context.<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>                if (trackMetrics) {<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>                  Map&lt;String, Long&gt; metrics = scannerContext.getMetrics().getMetricsMap();<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>                  ScanMetrics.Builder metricBuilder = ScanMetrics.newBuilder();<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>                  NameInt64Pair.Builder pairBuilder = NameInt64Pair.newBuilder();<a name="line.2695"></a>
+<span class="sourceLineNo">2568</span>          }<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span><a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>          if (!done) {<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>            long maxResultSize = Math.min(scanner.getMaxResultSize(), maxQuotaResultSize);<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>            if (maxResultSize &lt;= 0) {<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>              maxResultSize = maxQuotaResultSize;<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span>            }<a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>            // This is cells inside a row. Default size is 10 so if many versions or many cfs,<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>            // then we'll resize. Resizings show in profiler. Set it higher than 10. For now<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>            // arbitrary 32. TODO: keep record of general size of results being returned.<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>            List&lt;Cell&gt; values = new ArrayList&lt;Cell&gt;(32);<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span>            region.startRegionOperation(Operation.SCAN);<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>            try {<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>              int i = 0;<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>              synchronized(scanner) {<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>                boolean stale = (region.getRegionInfo().getReplicaId() != 0);<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>                boolean clientHandlesPartials =<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>                    request.hasClientHandlesPartials() &amp;&amp; request.getClientHandlesPartials();<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>                boolean clientHandlesHeartbeats =<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>                    request.hasClientHandlesHeartbeats() &amp;&amp; request.getClientHandlesHeartbeats();<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span><a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>                // On the server side we must ensure that the correct ordering of partial results is<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>                // returned to the client to allow them to properly reconstruct the partial results.<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>                // If the coprocessor host is adding to the result list, we cannot guarantee the<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>                // correct ordering of partial results and so we prevent partial results from being<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>                // formed.<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>                boolean serverGuaranteesOrderOfPartials = results.isEmpty();<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>                boolean allowPartialResults =<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>                    clientHandlesPartials &amp;&amp; serverGuaranteesOrderOfPartials &amp;&amp; !isSmallScan;<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>                boolean moreRows = false;<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span><a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>                // Heartbeat messages occur when the processing of the ScanRequest is exceeds a<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>                // certain time threshold on the server. When the time threshold is exceeded, the<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>                // server stops the scan and sends back whatever Results it has accumulated within<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>                // that time period (may be empty). Since heartbeat messages have the potential to<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>                // create partial Results (in the event that the timeout occurs in the middle of a<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>                // row), we must only generate heartbeat messages when the client can handle both<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>                // heartbeats AND partials<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>                boolean allowHeartbeatMessages = clientHandlesHeartbeats &amp;&amp; allowPartialResults;<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span><a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>                // Default value of timeLimit is negative to indicate no timeLimit should be<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>                // enforced.<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span>                long timeLimit = -1;<a name="line.2610"></a>
+<span class="sourceLineNo">2611</span><a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>                // Set the time limit to be half of the more restrictive timeout value (one of the<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>                // timeout values must be positive). In the event that both values are positive, the<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>                // more restrictive of the two is used to calculate the limit.<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>                if (allowHeartbeatMessages &amp;&amp; (scannerLeaseTimeoutPeriod &gt; 0 || rpcTimeout &gt; 0)) {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>                  long timeLimitDelta;<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>                  if (scannerLeaseTimeoutPeriod &gt; 0 &amp;&amp; rpcTimeout &gt; 0) {<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>                    timeLimitDelta = Math.min(scannerLeaseTimeoutPeriod, rpcTimeout);<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>                  } else {<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>                    timeLimitDelta =<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>                        scannerLeaseTimeoutPeriod &gt; 0 ? scannerLeaseTimeoutPeriod : rpcTimeout;<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>                  }<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>                  // Use half of whichever timeout value was more restrictive... But don't allow<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>                  // the time limit to be less than the allowable minimum (could cause an<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>                  // immediatate timeout before scanning any data).<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>                  timeLimitDelta = Math.max(timeLimitDelta / 2, minimumScanTimeLimitDelta);<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>                  timeLimit = System.currentTimeMillis() + timeLimitDelta;<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>                }<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span><a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>                final LimitScope sizeScope =<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>                    allowPartialResults ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>                final LimitScope timeScope =<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span>                    allowHeartbeatMessages ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2633"></a>
+<span class="sourceLineNo">2634</span><a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>                boolean trackMetrics =<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>                    request.hasTrackScanMetrics() &amp;&amp; request.getTrackScanMetrics();<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span><a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>                // Configure with limits for this RPC. Set keep progress true since size progress<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>                // towards size limit should be kept between calls to nextRaw<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>                ScannerContext.Builder contextBuilder = ScannerContext.newBuilder(true);<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>                contextBuilder.setSizeLimit(sizeScope, maxResultSize);<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>                contextBuilder.setBatchLimit(scanner.getBatch());<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span>                contextBuilder.setTimeLimit(timeScope, timeLimit);<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>                contextBuilder.setTrackMetrics(trackMetrics);<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>                ScannerContext scannerContext = contextBuilder.build();<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>                boolean limitReached = false;<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>                while (i &lt; rows) {<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>                  // Reset the batch progress to 0 before every call to RegionScanner#nextRaw. The<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>                  // batch limit is a limit on the number of cells per Result. Thus, if progress is<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>                  // being tracked (i.e. scannerContext.keepProgress() is true) then we need to<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>                  // reset the batch progress between nextRaw invocations since we don't want the<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>                  // batch progress from previous calls to affect future calls<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>                  scannerContext.setBatchProgress(0);<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span><a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>                  // Collect values to be returned here<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>                  moreRows = scanner.nextRaw(values, scannerContext);<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span><a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>                  if (!values.isEmpty()) {<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>                    final boolean partial = scannerContext.partialResultFormed();<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>                    Result r = Result.create(values, null, stale, partial);<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>                    lastBlock = addSize(context, r, lastBlock);<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>                    results.add(r);<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>                    i++;<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>                  }<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span><a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>                  boolean sizeLimitReached = scannerContext.checkSizeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>                  boolean timeLimitReached = scannerContext.checkTimeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>                  boolean rowLimitReached = i &gt;= rows;<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>                  limitReached = sizeLimitReached || timeLimitReached || rowLimitReached;<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span><a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>                  if (limitReached || !moreRows) {<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>                    if (LOG.isTraceEnabled()) {<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span>                      LOG.trace("Done scanning. limitReached: " + limitReached + " moreRows: "<a name="line.2673"></a>
+<span class="sourceLineNo">2674</span>                          + moreRows + " scannerContext: " + scannerContext);<a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>                    }<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>                    // We only want to mark a ScanResponse as a heartbeat message in the event that<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>                    // there are more values to be read server side. If there aren't more values,<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>                    // marking it as a heartbeat is wasteful because the client will need to issue<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>                    // another ScanRequest only to realize that they already have all the values<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>                    if (moreRows) {<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>                      // Heartbeat messages occur when the time limit has been reached.<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>                      builder.setHeartbeatMessage(timeLimitReached);<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>                    }<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>                    break;<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>                  }<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>                  values.clear();<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>                }<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span><a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>                if (limitReached || moreRows) {<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>                  // We stopped prematurely<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>                  builder.setMoreResultsInRegion(true);<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>                } else {<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>                  // We didn't get a single batch<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>                  builder.setMoreResultsInRegion(false);<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>                }<a name="line.2695"></a>
 <span class="sourceLineNo">2696</span><a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>                  for (Entry&lt;String, Long&gt; entry : metrics.entrySet()) {<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>                    pairBuilder.setName(entry.getKey());<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>                    pairBuilder.setValue(entry.getValue());<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>                    metricBuilder.addMetrics(pairBuilder.build());<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>                  }<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span><a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>                  builder.setScanMetrics(metricBuilder.build());<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>                }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>              }<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>              region.updateReadRequestsCount(i);<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>              long responseCellSize = context != null ? context.getResponseCellSize() : 0;<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>              region.getMetrics().updateScanNext(responseCellSize);<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>              if (regionServer.metricsRegionServer != null) {<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>                regionServer.metricsRegionServer.updateScannerNext(responseCellSize);<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>              }<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>            } finally {<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>              region.closeRegionOperation();<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>            }<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>            // coprocessor postNext hook<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>              region.getCoprocessorHost().postScannerNext(scanner, results, rows, true);<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>            }<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>          }<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span><a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>          quota.addScanResult(results);<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>          // If the scanner's filter - if any - is done with the scan<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>          // and wants to tell the client to stop the scan. This is done by passing<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>          // a null result, and setting moreResults to false.<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>          if (scanner.isFilterDone() &amp;&amp; results.isEmpty()) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>            moreResults = false;<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>            results = null;<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>          } else {<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>            addResults(builder, results, controller,<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>                RegionReplicaUtil.isDefaultReplica(region.getRegionInfo()),<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>                isClientCellBlockSupport(context));<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>          }<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        } catch (IOException e) {<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>          // if we have an exception on scanner next and we are using the callSeq<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          // we should rollback because the client will retry with the same callSeq<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>          // and get an OutOfOrderScannerNextException if we don't do so.<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>          if (rsh != null &amp;&amp; request.hasNextCallSeq()) {<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>            rsh.rollbackNextCallSeq();<a name="line.2739"></a>
+<span class="sourceLineNo">2697</span>                // Check to see if the client requested that we track metrics server side. If the<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>                // client requested metrics, retrieve the metrics from the scanner context.<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>                if (trackMetrics) {<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>                  Map&lt;String, Long&gt; metrics = scannerContext.getMetrics().getMetricsMap();<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>                  ScanMetrics.Builder metricBuilder = ScanMetrics.newBuilder();<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>                  NameInt64Pair.Builder pairBuilder = NameInt64Pair.newBuilder();<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span><a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>                  for (Entry&lt;String, Long&gt; entry : metrics.entrySet()) {<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>                    pairBuilder.setName(entry.getKey());<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>                    pairBuilder.setValue(entry.getValue());<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>                    metricBuilder.addMetrics(pairBuilder.build());<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>                  }<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span><a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>                  builder.setScanMetrics(metricBuilder.build());<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>                }<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>              }<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>              region.updateReadRequestsCount(i);<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>              long responseCellSize = context != null ? context.getResponseCellSize() : 0;<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>              region.getMetrics().updateScanNext(responseCellSize);<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>              if (regionServer.metricsRegionServer != null) {<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>                regionServer.metricsRegionServer.updateScannerNext(responseCellSize);<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>              }<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>            } finally {<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>              region.closeRegionOperation();<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>            }<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>            // coprocessor postNext hook<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>              region.getCoprocessorHost().postScannerNext(scanner, results, rows, true);<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>            }<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>          }<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span><a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>          quota.addScanResult(results);<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span><a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>          // If the scanner's filter - if any - is done with the scan<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>          // and wants to tell the client to stop the scan. This is done by passing<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>          // a null result, and setting moreResults to false.<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>          if (scanner.isFilterDone() &amp;&amp; results.isEmpty()) {<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>            moreResults = false;<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>            results = null;<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>          } else {<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>            addResults(builder, results, controller,<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>                RegionReplicaUtil.isDefaultReplica(region.getRegionInfo()),<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>                isClientCellBlockSupport(context));<a name="line.2739"></a>
 <span class="sourceLineNo">2740</span>          }<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>          throw e;<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>        } finally {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>          if (context != null) {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>            context.setCallBack(rsh.shippedCallback);<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>          }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>          // Adding resets expiration time on lease.<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>          if (scanners.containsKey(scannerName)) {<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>            ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>            // When context != null, adding back the lease will be done in callback set above.<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>            if (context == null) {<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>              if (lease != null) regionServer.leases.addLease(lease);<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>            }<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>          }<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>        }<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>      }<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span><a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>      if (!moreResults || closeScanner) {<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        ttl = 0;<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        moreResults = false;<a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>        if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>          if (region.getCoprocessorHost().preScannerClose(scanner)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>            return builder.build(); // bypass<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>          }<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>        }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>        rsh = scanners.remove(scannerName);<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>        if (rsh != null) {<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>          if (context != null) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>            context.setCallBack(rsh.closeCallBack);<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>          } else {<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>            rsh.s.close();<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>          }<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>          try {<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>          } catch (LeaseException le) {<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>            // No problem, ignore<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>            if (LOG.isTraceEnabled()) {<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>              LOG.trace("Un-able to cancel lease of scanner. It could already be closed.");<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>            }<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>          }<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>            region.getCoprocessorHost().postScannerClose(scanner);<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>          }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>        }<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      }<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span><a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>      if (ttl &gt; 0) {<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        builder.setTtl(ttl);<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>      builder.setScannerId(scannerId);<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      builder.setMoreResults(moreResults);<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      return builder.build();<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>    } catch (IOException ie) {<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>      if (scannerName != null &amp;&amp; ie instanceof NotServingRegionException) {<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        RegionScannerHolder rsh = scanners.remove(scannerName);<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>        if (rsh != null) {<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>          try {<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>            RegionScanner scanner = rsh.s;<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>            LOG.warn(scannerName + " encountered " + ie.getMessage() + ", closing ...");<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>            scanner.close();<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>          } catch (IOException e) {<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>           LOG.warn("Getting exception closing " + scannerName, e);<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>          }<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        }<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>      }<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>      throw new ServiceException(ie);<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>    } finally {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>      if (quota != null) {<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        quota.close();<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>      }<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>    }<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>  }<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span><a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>  @Override<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>  public CoprocessorServiceResponse execRegionServerService(RpcController controller,<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      CoprocessorServiceRequest request) throws ServiceException {<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>    return regionServer.execRegionServerService(controller, request);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>  }<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span><a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>  @Override<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>  public UpdateConfigurationResponse updateConfiguration(<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>      RpcController controller, UpdateConfigurationRequest request)<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>      throws ServiceException {<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>    try {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>      this.regionServer.updateConfiguration();<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    } catch (Exception e) {<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>      throw new ServiceException(e);<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    }<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>    return UpdateConfigurationResponse.getDefaultInstance();<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>  }<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>}<a name="line.2831"></a>
+<span class="sourceLineNo">2741</span>        } catch (IOException e) {<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>          // if we have an exception on scanner next and we are using the callSeq<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>          // we should rollback because the client will retry with the same callSeq<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>          // and get an OutOfOrderScannerNextException if we don't do so.<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>          if (rsh != null &amp;&amp; request.hasNextCallSeq()) {<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>            rsh.rollbackNextCallSeq();<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>          }<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>          throw e;<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>        } finally {<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>          if (context != null) {<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>            context.setCallBack(rsh.shippedCallback);<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>          }<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>          // Adding resets expiration time on lease.<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>          if (scanners.containsKey(scannerName)) {<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>            ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>            // When context != null, adding back the lease will be done in callback set above.<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>            if (context == null) {<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>              if (lease != null) regionServer.leases.addLease(lease);<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>            }<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>          }<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>        }<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>      }<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span><a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>      if (!moreResults || closeScanner) {<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>        ttl = 0;<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>        moreResults = false;<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>        if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>          if (region.getCoprocessorHost().preScannerClose(scanner)) {<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>            return builder.build(); // bypass<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>          }<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>        }<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>        rsh = scanners.remove(scannerName);<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>        if (rsh != null) {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>          if (context != null) {<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>            context.setCallBack(rsh.closeCallBack);<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>          } else {<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>            rsh.s.close();<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>          }<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>          try {<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>          } catch (LeaseException le) {<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>            // No problem, ignore<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>            if (LOG.isTraceEnabled()) {<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>              LOG.trace("Un-able to cancel lease of scanner. It could already be closed.");<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>            }<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>          }<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>            region.getCoprocessorHost().postScannerClose(scanner);<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>          }<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>        }<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>      }<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span><a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>      if (ttl &gt; 0) {<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>        builder.setTtl(ttl);<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>      builder.setScannerId(scannerId);<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>      builder.setMoreResults(moreResults);<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>      return builder.build();<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>    } catch (IOException ie) {<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>      if (scannerName != null &amp;&amp; ie instanceof NotServingRegionException) {<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>        RegionScannerHolder rsh = scanners.remove(scannerName);<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>        if (rsh != null) {<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>          try {<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>            RegionScanner scanner = rsh.s;<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>            LOG.warn(scannerName + " encountered " + ie.getMessage() + ", closing ...");<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>            scanner.close();<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>          } catch (IOException e) {<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>           LOG.warn("Getting exception closing " + scannerName, e);<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>          }<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>        }<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>      }<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>      throw new ServiceException(ie);<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>    } finally {<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>      if (quota != null) {<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>        quota.close();<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>      }<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>    }<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>  }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span><a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>  @Override<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>  public CoprocessorServiceResponse execRegionServerService(RpcController controller,<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>      CoprocessorServiceRequest request) throws ServiceException {<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>    return regionServer.execRegionServerService(controller, request);<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>  }<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span><a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>  @Override<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>  public UpdateConfigurationResponse updateConfiguration(<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>      RpcController controller, UpdateConfigurationRequest request)<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>      throws ServiceException {<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>    try {<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>      this.regionServer.updateConfiguration();<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>    } catch (Exception e) {<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>      throw new ServiceException(e);<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>    }<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>    return UpdateConfigurationResponse.getDefaultInstance();<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>  }<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>}<a name="line.2838"></a>
 
 
 


[06/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index 8aa73b4..dcb564f 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Team list</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -785,7 +785,7 @@ window.onLoad = init();
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index 3ab8cdc..527b3c9 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -528,7 +528,6 @@
 <li><a href="org/apache/hadoop/hbase/util/TestBloomFilterChunk.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestBloomFilterChunk</a></li>
 <li><a href="org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestBoundedArrayQueue</a></li>
 <li><a href="org/apache/hadoop/hbase/io/TestBoundedByteBufferPool.html" title="class in org.apache.hadoop.hbase.io" target="classFrame">TestBoundedByteBufferPool</a></li>
-<li><a href="org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestBoundedConcurrentLinkedQueue</a></li>
 <li><a href="org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestBoundedPriorityBlockingQueue</a></li>
 <li><a href="org/apache/hadoop/hbase/wal/TestBoundedRegionGroupingStrategy.html" title="class in org.apache.hadoop.hbase.wal" target="classFrame">TestBoundedRegionGroupingStrategy</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/bucket/TestBucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket" target="classFrame">TestBucketCache</a></li>
@@ -946,6 +945,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/TestKeyValueScanFixture.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestKeyValueScanFixture</a></li>
 <li><a href="org/apache/hadoop/hbase/codec/keyvalue/TestKeyValueTool.html" title="class in org.apache.hadoop.hbase.codec.keyvalue" target="classFrame">TestKeyValueTool</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/TestLazyDataBlockDecompression.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">TestLazyDataBlockDecompression</a></li>
+<li><a href="org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestLeaseRenewal</a></li>
 <li><a href="org/apache/hadoop/hbase/io/encoding/TestLoadAndSwitchEncodeOnDisk.html" title="class in org.apache.hadoop.hbase.io.encoding" target="classFrame">TestLoadAndSwitchEncodeOnDisk</a></li>
 <li><a href="org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFiles.html" title="class in org.apache.hadoop.hbase.mapreduce" target="classFrame">TestLoadIncrementalHFiles</a></li>
 <li><a href="org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.html" title="class in org.apache.hadoop.hbase.mapreduce" target="classFrame">TestLoadIncrementalHFilesSplitRecovery</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index 0eb419d..201bf30 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -528,7 +528,6 @@
 <li><a href="org/apache/hadoop/hbase/util/TestBloomFilterChunk.html" title="class in org.apache.hadoop.hbase.util">TestBloomFilterChunk</a></li>
 <li><a href="org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedArrayQueue</a></li>
 <li><a href="org/apache/hadoop/hbase/io/TestBoundedByteBufferPool.html" title="class in org.apache.hadoop.hbase.io">TestBoundedByteBufferPool</a></li>
-<li><a href="org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedConcurrentLinkedQueue</a></li>
 <li><a href="org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedPriorityBlockingQueue</a></li>
 <li><a href="org/apache/hadoop/hbase/wal/TestBoundedRegionGroupingStrategy.html" title="class in org.apache.hadoop.hbase.wal">TestBoundedRegionGroupingStrategy</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/bucket/TestBucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">TestBucketCache</a></li>
@@ -946,6 +945,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/TestKeyValueScanFixture.html" title="class in org.apache.hadoop.hbase.regionserver">TestKeyValueScanFixture</a></li>
 <li><a href="org/apache/hadoop/hbase/codec/keyvalue/TestKeyValueTool.html" title="class in org.apache.hadoop.hbase.codec.keyvalue">TestKeyValueTool</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/TestLazyDataBlockDecompression.html" title="class in org.apache.hadoop.hbase.io.hfile">TestLazyDataBlockDecompression</a></li>
+<li><a href="org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></li>
 <li><a href="org/apache/hadoop/hbase/io/encoding/TestLoadAndSwitchEncodeOnDisk.html" title="class in org.apache.hadoop.hbase.io.encoding">TestLoadAndSwitchEncodeOnDisk</a></li>
 <li><a href="org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFiles.html" title="class in org.apache.hadoop.hbase.mapreduce">TestLoadIncrementalHFiles</a></li>
 <li><a href="org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.html" title="class in org.apache.hadoop.hbase.mapreduce">TestLoadIncrementalHFilesSplitRecovery</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/constant-values.html b/testdevapidocs/constant-values.html
index ad0d1ff..a8392e1 100644
--- a/testdevapidocs/constant-values.html
+++ b/testdevapidocs/constant-values.html
@@ -2804,6 +2804,25 @@
 </li>
 <li class="blockList">
 <table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
+<caption><span>org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th scope="col">Constant Field</th>
+<th class="colLast" scope="col">Value</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.client.TestLeaseRenewal.leaseTimeout">
+<!--   -->
+</a><code>private&nbsp;static&nbsp;final&nbsp;int</code></td>
+<td><code><a href="org/apache/hadoop/hbase/client/TestLeaseRenewal.html#leaseTimeout">leaseTimeout</a></code></td>
+<td class="colLast"><code>15000</code></td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestMultiParallel.html" title="class in org.apache.hadoop.hbase.client">TestMultiParallel</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
@@ -11524,25 +11543,6 @@
 </li>
 <li class="blockList">
 <table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
-<caption><span>org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedConcurrentLinkedQueue</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th scope="col">Constant Field</th>
-<th class="colLast" scope="col">Value</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.util.TestBoundedConcurrentLinkedQueue.CAPACITY">
-<!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;int</code></td>
-<td><code><a href="org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#CAPACITY">CAPACITY</a></code></td>
-<td class="colLast"><code>16</code></td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedPriorityBlockingQueue</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 9163829..3aa61cc 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -862,6 +862,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestFromClientSide3.html#ANOTHERROW">ANOTHERROW</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestFromClientSide3.html" title="class in org.apache.hadoop.hbase.client">TestFromClientSide3</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html#ANOTHERROW">ANOTHERROW</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/GenericTestUtils.DelayAnswer.html#answer(org.mockito.invocation.InvocationOnMock)">answer(InvocationOnMock)</a></span> - Method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/GenericTestUtils.DelayAnswer.html" title="class in org.apache.hadoop.hbase">GenericTestUtils.DelayAnswer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/GenericTestUtils.DelegateAnswer.html#answer(org.mockito.invocation.InvocationOnMock)">answer(InvocationOnMock)</a></span> - Method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/GenericTestUtils.DelegateAnswer.html" title="class in org.apache.hadoop.hbase">GenericTestUtils.DelegateAnswer</a></dt>
@@ -2345,8 +2347,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.html#canonicalizeMetricName(java.lang.String)">canonicalizeMetricName(String)</a></span> - Method in class org.apache.hadoop.hbase.test.<a href="./org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.html" title="class in org.apache.hadoop.hbase.test">MetricsAssertHelperImpl</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#CAPACITY">CAPACITY</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html#CAPACITY">CAPACITY</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedPriorityBlockingQueue</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/TestBucketCache.html#capacitySize">capacitySize</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/TestBucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">TestBucketCache</a></dt>
@@ -3583,6 +3583,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestFromClientSide3.html#COL_QUAL">COL_QUAL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestFromClientSide3.html" title="class in org.apache.hadoop.hbase.client">TestFromClientSide3</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html#COL_QUAL">COL_QUAL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/IntegrationTestIngestWithACL.html#COLON">COLON</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/IntegrationTestIngestWithACL.html" title="class in org.apache.hadoop.hbase">IntegrationTestIngestWithACL</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/IntegrationTestIngestWithMOB.html#COLON">COLON</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/IntegrationTestIngestWithMOB.html" title="class in org.apache.hadoop.hbase">IntegrationTestIngestWithMOB</a></dt>
@@ -8280,6 +8282,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#FAMILY">FAMILY</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html" title="class in org.apache.hadoop.hbase.client">TestHTableMultiplexerFlushCache</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html#FAMILY">FAMILY</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestMultiParallel.html#FAMILY">FAMILY</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestMultiParallel.html" title="class in org.apache.hadoop.hbase.client">TestMultiParallel</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#FAMILY">FAMILY</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html" title="class in org.apache.hadoop.hbase.client">TestMultiRespectsLimits</a></dt>
@@ -15125,6 +15129,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html#LEADER_ZNODE">LEADER_ZNODE</a></span> - Static variable in class org.apache.hadoop.hbase.zookeeper.<a href="./org/apache/hadoop/hbase/zookeeper/TestZKLeaderManager.html" title="class in org.apache.hadoop.hbase.zookeeper">TestZKLeaderManager</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html#leaseTimeout">leaseTimeout</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/TestHTableDescriptor.html#legalTableNames">legalTableNames</a></span> - Variable in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/TestHTableDescriptor.html" title="class in org.apache.hadoop.hbase">TestHTableDescriptor</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestTableName.html#legalTableNames">legalTableNames</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestTableName.html" title="class in org.apache.hadoop.hbase.util">TestTableName</a></dt>
@@ -15433,6 +15439,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html" title="class in org.apache.hadoop.hbase.client">TestHTableMultiplexerFlushCache</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html#LOG">LOG</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestMetaWithReplicas.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestMetaWithReplicas.html" title="class in org.apache.hadoop.hbase.client">TestMetaWithReplicas</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestMobCloneSnapshotFromClient.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestMobCloneSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.client">TestMobCloneSnapshotFromClient</a></dt>
@@ -21708,8 +21716,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html#queue">queue</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestBoundedArrayQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedArrayQueue</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#queue">queue</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html#queue">queue</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedPriorityBlockingQueue</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/filter/TestSingleColumnValueFilter.html#QUICK_PATTERN">QUICK_PATTERN</a></span> - Static variable in class org.apache.hadoop.hbase.filter.<a href="./org/apache/hadoop/hbase/filter/TestSingleColumnValueFilter.html" title="class in org.apache.hadoop.hbase.filter">TestSingleColumnValueFilter</a></dt>
@@ -23465,6 +23471,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestFromClientSide3.html#ROW_BYTES">ROW_BYTES</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestFromClientSide3.html" title="class in org.apache.hadoop.hbase.client">TestFromClientSide3</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html#ROW_BYTES">ROW_BYTES</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/filter/TestInvocationRecordFilter.html#ROW_BYTES">ROW_BYTES</a></span> - Static variable in class org.apache.hadoop.hbase.filter.<a href="./org/apache/hadoop/hbase/filter/TestInvocationRecordFilter.html" title="class in org.apache.hadoop.hbase.filter">TestInvocationRecordFilter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.html#ROW_BYTES">ROW_BYTES</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.html" title="class in org.apache.hadoop.hbase.regionserver">TestScanWithBloomError</a></dt>
@@ -23734,6 +23742,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/MockRegionServerServices.html#rpcServer">rpcServer</a></span> - Variable 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="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html#rpcServer">rpcServer</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html" title="class in org.apache.hadoop.hbase.regionserver">TestRSStatusServlet</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/security/token/TestTokenAuthentication.TokenServer.html#rpcServer">rpcServer</a></span> - Variable in class org.apache.hadoop.hbase.security.token.<a href="./org/apache/hadoop/hbase/security/token/TestTokenAuthentication.TokenServer.html" title="class in org.apache.hadoop.hbase.security.token">TestTokenAuthentication.TokenServer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/IntegrationTestRpcClient.Cluster.html#rpcServers">rpcServers</a></span> - Variable in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/IntegrationTestRpcClient.Cluster.html" title="class in org.apache.hadoop.hbase.ipc">IntegrationTestRpcClient.Cluster</a></dt>
@@ -25147,6 +25157,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestFromClientSide3.html#setUp()">setUp()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestFromClientSide3.html" title="class in org.apache.hadoop.hbase.client">TestFromClientSide3</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html#setUp()">setUp()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestMetaWithReplicas.html#setup()">setup()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestMetaWithReplicas.html" title="class in org.apache.hadoop.hbase.client">TestMetaWithReplicas</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestMultipleTimestamps.html#setUp()">setUp()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestMultipleTimestamps.html" title="class in org.apache.hadoop.hbase.client">TestMultipleTimestamps</a></dt>
@@ -25632,8 +25644,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/types/TestCopyOnWriteMaps.html#setUp()">setUp()</a></span> - Method in class org.apache.hadoop.hbase.types.<a href="./org/apache/hadoop/hbase/types/TestCopyOnWriteMaps.html" title="class in org.apache.hadoop.hbase.types">TestCopyOnWriteMaps</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#setUp()">setUp()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html#setUp()">setUp()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedPriorityBlockingQueue</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestByteBufferUtils.html#setUp()">setUp()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestByteBufferUtils.html" title="class in org.apache.hadoop.hbase.util">TestByteBufferUtils</a></dt>
@@ -25734,6 +25744,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#setUpBeforeClass()">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html" title="class in org.apache.hadoop.hbase.client">TestHTableMultiplexerFlushCache</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html#setUpBeforeClass()">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestMobCloneSnapshotFromClient.html#setUpBeforeClass()">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestMobCloneSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.client">TestMobCloneSnapshotFromClient</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestMultipleTimestamps.html#setUpBeforeClass()">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestMultipleTimestamps.html" title="class in org.apache.hadoop.hbase.client">TestMultipleTimestamps</a></dt>
@@ -28825,6 +28837,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestFromClientSide3.html#tearDown()">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestFromClientSide3.html" title="class in org.apache.hadoop.hbase.client">TestFromClientSide3</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html#tearDown()">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestMetaWithReplicas.html#tearDown()">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestMetaWithReplicas.html" title="class in org.apache.hadoop.hbase.client">TestMetaWithReplicas</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestMultipleTimestamps.html#tearDown()">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestMultipleTimestamps.html" title="class in org.apache.hadoop.hbase.client">TestMultipleTimestamps</a></dt>
@@ -29179,6 +29193,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#tearDownAfterClass()">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html" title="class in org.apache.hadoop.hbase.client">TestHTableMultiplexerFlushCache</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html#tearDownAfterClass()">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestMultipleTimestamps.html#tearDownAfterClass()">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestMultipleTimestamps.html" title="class in org.apache.hadoop.hbase.client">TestMultipleTimestamps</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#tearDownAfterClass()">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html" title="class in org.apache.hadoop.hbase.client">TestMultiRespectsLimits</a></dt>
@@ -29945,6 +29961,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestIntraRowPagination.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestIntraRowPagination.html" title="class in org.apache.hadoop.hbase.client">TestIntraRowPagination</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestMetaWithReplicas.html#TEST_UTIL">TEST_UTIL</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestMetaWithReplicas.html" title="class in org.apache.hadoop.hbase.client">TestMetaWithReplicas</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestMultipleTimestamps.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestMultipleTimestamps.html" title="class in org.apache.hadoop.hbase.client">TestMultipleTimestamps</a></dt>
@@ -31433,10 +31451,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/TestBoundedByteBufferPool.html#TestBoundedByteBufferPool()">TestBoundedByteBufferPool()</a></span> - Constructor for class org.apache.hadoop.hbase.io.<a href="./org/apache/hadoop/hbase/io/TestBoundedByteBufferPool.html" title="class in org.apache.hadoop.hbase.io">TestBoundedByteBufferPool</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">TestBoundedConcurrentLinkedQueue</span></a> - Class in <a href="./org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#TestBoundedConcurrentLinkedQueue()">TestBoundedConcurrentLinkedQueue()</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">TestBoundedPriorityBlockingQueue</span></a> - Class in <a href="./org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html#TestBoundedPriorityBlockingQueue()">TestBoundedPriorityBlockingQueue()</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedPriorityBlockingQueue</a></dt>
@@ -32207,8 +32221,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/zookeeper/TestZooKeeperNodeTracker.html#testCleanZNode()">testCleanZNode()</a></span> - Method in class org.apache.hadoop.hbase.zookeeper.<a href="./org/apache/hadoop/hbase/zookeeper/TestZooKeeperNodeTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">TestZooKeeperNodeTracker</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#testClear()">testClear()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestStripeStoreFileManager.html#testClearFiles()">testClearFiles()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestStripeStoreFileManager.html" title="class in org.apache.hadoop.hbase.regionserver">TestStripeStoreFileManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestHRegion.html#testClearForceSplit()">testClearForceSplit()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestHRegion.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegion</a></dt>
@@ -33979,8 +33991,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/coprocessor/TestRowProcessorEndpoint.html#testDoubleScan()">testDoubleScan()</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="./org/apache/hadoop/hbase/coprocessor/TestRowProcessorEndpoint.html" title="class in org.apache.hadoop.hbase.coprocessor">TestRowProcessorEndpoint</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#testDrain()">testDrain()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/util/TestDrainBarrier.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">TestDrainBarrier</span></a> - Class in <a href="./org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestDrainBarrier.html#TestDrainBarrier()">TestDrainBarrier()</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestDrainBarrier.html" title="class in org.apache.hadoop.hbase.util">TestDrainBarrier</a></dt>
@@ -37135,7 +37145,11 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/vint/TestFIntTool.html#testLeadingZeros()">testLeadingZeros()</a></span> - Method in class org.apache.hadoop.hbase.util.vint.<a href="./org/apache/hadoop/hbase/util/vint/TestFIntTool.html" title="class in org.apache.hadoop.hbase.util.vint">TestFIntTool</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestFromClientSide3.html#testLeaseRenewal()">testLeaseRenewal()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestFromClientSide3.html" title="class in org.apache.hadoop.hbase.client">TestFromClientSide3</a></dt>
+<dt><a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">TestLeaseRenewal</span></a> - Class in <a href="./org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html#TestLeaseRenewal()">TestLeaseRenewal()</a></span> - Constructor for class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html#testLeaseRenewal()">testLeaseRenewal()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.html#testLegacyRecovery()">testLegacyRecovery()</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="./org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.html" title="class in org.apache.hadoop.hbase.coprocessor">TestRegionObserverInterface</a></dt>
 <dd>&nbsp;</dd>
@@ -38831,8 +38845,6 @@
 <dd>
 <div class="block">Creates a new instance of this class while copying all values.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#testMultiThread()">testMultiThread()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestPoolMap.TestReusablePoolType.html#testMultiThreadedClients()">testMultiThreadedClients()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestPoolMap.TestReusablePoolType.html" title="class in org.apache.hadoop.hbase.util">TestPoolMap.TestReusablePoolType</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestPoolMap.TestRoundRobinPoolType.html#testMultiThreadedClients()">testMultiThreadedClients()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestPoolMap.TestRoundRobinPoolType.html" title="class in org.apache.hadoop.hbase.util">TestPoolMap.TestRoundRobinPoolType</a></dt>
@@ -39232,8 +39244,6 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/crypto/TestEncryption.html#testOddSizedBlocks()">testOddSizedBlocks()</a></span> - Method in class org.apache.hadoop.hbase.io.crypto.<a href="./org/apache/hadoop/hbase/io/crypto/TestEncryption.html" title="class in org.apache.hadoop.hbase.io.crypto">TestEncryption</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html#testOfferAndPoll()">testOfferAndPoll()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestBoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestStealJobQueue.html#testOfferInStealJobQueueShouldUnblock()">testOfferInStealJobQueueShouldUnblock()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestStealJobQueue.html" title="class in org.apache.hadoop.hbase.util">TestStealJobQueue</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestStealJobQueue.html#testOfferInStealQueueFromShouldUnblock()">testOfferInStealQueueFromShouldUnblock()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestStealJobQueue.html" title="class in org.apache.hadoop.hbase.util">TestStealJobQueue</a></dt>
@@ -47423,6 +47433,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestFromClientSide3.html#VAL_BYTES">VAL_BYTES</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestFromClientSide3.html" title="class in org.apache.hadoop.hbase.client">TestFromClientSide3</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html#VAL_BYTES">VAL_BYTES</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#validate()">validate()</a></span> - Method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility.SeenRowTracker</a></dt>
 <dd>
 <div class="block">Validate that all the rows between startRow and stopRow are seen exactly once, and

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
index 1ee007e..8323c92 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
@@ -598,42 +598,46 @@
 <td class="colLast"><span class="strong">TestPutWithDelete.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestPutWithDelete.html#TEST_UTIL">TEST_UTIL</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><span class="strong">TestLeaseRenewal.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html#TEST_UTIL">TEST_UTIL</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="strong">TestSizeFailures.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestSizeFailures.html#TEST_UTIL">TEST_UTIL</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="strong">AbstractTestShell.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestShell.html#TEST_UTIL">TEST_UTIL</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="strong">TestClientOperationInterrupt.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestClientOperationInterrupt.html#util">util</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="strong">TestSnapshotMetadata.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotMetadata.html#UTIL">UTIL</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="strong">TestClientPushback.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestClientPushback.html#UTIL">UTIL</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="strong">TestTableSnapshotScanner.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestTableSnapshotScanner.html#UTIL">UTIL</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="strong">TestMultiParallel.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestMultiParallel.html#UTIL">UTIL</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="strong">TestShortCircuitConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestShortCircuitConnection.html#UTIL">UTIL</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="strong">TestRpcControllerFactory.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestRpcControllerFactory.html#UTIL">UTIL</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="strong">TestSnapshotFromClient.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotFromClient.html#UTIL">UTIL</a></strong></code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/client/TestFromClientSide3.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestFromClientSide3.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestFromClientSide3.html
index e0b095e..274a5d6 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestFromClientSide3.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestFromClientSide3.html
@@ -263,10 +263,6 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestFromClientSide3.html#testHTableExistsMethodSingleRegionSingleGet()">testHTableExistsMethodSingleRegionSingleGet</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestFromClientSide3.html#testLeaseRenewal()">testLeaseRenewal</a></strong>()</code>&nbsp;</td>
-</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
@@ -601,7 +597,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <a name="testGetEmptyRow()">
 <!--   -->
 </a>
-<ul class="blockList">
+<ul class="blockListLast">
 <li class="blockList">
 <h4>testGetEmptyRow</h4>
 <pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide3.html#line.452">testGetEmptyRow</a>()
@@ -610,18 +606,6 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
 </li>
 </ul>
-<a name="testLeaseRenewal()">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>testLeaseRenewal</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestFromClientSide3.html#line.481">testLeaseRenewal</a>()
-                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
-</li>
-</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/client/TestIntraRowPagination.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestIntraRowPagination.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestIntraRowPagination.html
index 3b453d0..eb57ff4 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestIntraRowPagination.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestIntraRowPagination.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestIncrement.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestMetaWithReplicas.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestIntraRowPagination.html" target="_top">Frames</a></li>
@@ -254,7 +254,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestIncrement.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestMetaWithReplicas.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestIntraRowPagination.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/client/TestLeaseRenewal.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestLeaseRenewal.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestLeaseRenewal.html
new file mode 100644
index 0000000..ec96a7b
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestLeaseRenewal.html
@@ -0,0 +1,451 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestLeaseRenewal (Apache HBase 2.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="TestLeaseRenewal (Apache HBase 2.0.0-SNAPSHOT Test API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestLeaseRenewal.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestIntraRowPagination.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestMetaWithReplicas.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestLeaseRenewal.html" target="_top">Frames</a></li>
+<li><a href="TestLeaseRenewal.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.client</div>
+<h2 title="Class TestLeaseRenewal" class="title">Class TestLeaseRenewal</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.client.TestLeaseRenewal</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html#line.43">TestLeaseRenewal</a>
+extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static byte[]</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html#ANOTHERROW">ANOTHERROW</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static byte[]</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html#COL_QUAL">COL_QUAL</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static byte[]</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html#FAMILY">FAMILY</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html#leaseTimeout">leaseTimeout</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) org.apache.commons.logging.Log</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html#LOG">LOG</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static byte[]</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html#ROW_BYTES">ROW_BYTES</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html#TEST_UTIL">TEST_UTIL</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static byte[]</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html#VAL_BYTES">VAL_BYTES</a></strong></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html#TestLeaseRenewal()">TestLeaseRenewal</a></strong>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html#setUp()">setUp</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html#setUpBeforeClass()">setUpBeforeClass</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html#tearDown()">tearDown</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html#tearDownAfterClass()">tearDownAfterClass</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html#testLeaseRenewal()">testLeaseRenewal</a></strong>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang
 /Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="LOG">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>LOG</h4>
+<pre>final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html#line.44">LOG</a></pre>
+</li>
+</ul>
+<a name="TEST_UTIL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TEST_UTIL</h4>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html#line.45">TEST_UTIL</a></pre>
+</li>
+</ul>
+<a name="FAMILY">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>FAMILY</h4>
+<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html#line.46">FAMILY</a></pre>
+</li>
+</ul>
+<a name="ANOTHERROW">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ANOTHERROW</h4>
+<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html#line.47">ANOTHERROW</a></pre>
+</li>
+</ul>
+<a name="COL_QUAL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>COL_QUAL</h4>
+<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html#line.48">COL_QUAL</a></pre>
+</li>
+</ul>
+<a name="VAL_BYTES">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>VAL_BYTES</h4>
+<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html#line.49">VAL_BYTES</a></pre>
+</li>
+</ul>
+<a name="ROW_BYTES">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ROW_BYTES</h4>
+<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html#line.50">ROW_BYTES</a></pre>
+</li>
+</ul>
+<a name="leaseTimeout">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>leaseTimeout</h4>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html#line.51">leaseTimeout</a></pre>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.TestLeaseRenewal.leaseTimeout">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="TestLeaseRenewal()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestLeaseRenewal</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html#line.43">TestLeaseRenewal</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="setUpBeforeClass()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setUpBeforeClass</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html#line.58">setUpBeforeClass</a>()
+                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="tearDownAfterClass()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tearDownAfterClass</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html#line.68">tearDownAfterClass</a>()
+                               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="setUp()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setUp</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html#line.76">setUp</a>()
+           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="tearDown()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tearDown</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html#line.84">tearDown</a>()
+              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="testLeaseRenewal()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testLeaseRenewal</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestLeaseRenewal.html#line.92">testLeaseRenewal</a>()
+                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestLeaseRenewal.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestIntraRowPagination.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestMetaWithReplicas.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestLeaseRenewal.html" target="_top">Frames</a></li>
+<li><a href="TestLeaseRenewal.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2015 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/testdevapidocs/org/apache/hadoop/hbase/client/TestMetaWithReplicas.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestMetaWithReplicas.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestMetaWithReplicas.html
index 1e261eb..87d57da 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestMetaWithReplicas.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestMetaWithReplicas.html
@@ -35,7 +35,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestIntraRowPagination.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestMetricsConnection.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -550,7 +550,7 @@ private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestIntraRowPagination.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestMetricsConnection.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">


[40/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html
index 818db94..a1ecbbe 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html
@@ -104,7 +104,7 @@
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.35">ServerMetricsTmplImpl</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.37">ServerMetricsTmplImpl</a>
 extends org.jamon.AbstractTemplateImpl
 implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.Intf.html" title="interface in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl.Intf</a></pre>
 </li>
@@ -126,6 +126,10 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#mServerWrap">mServerWrap</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#mWrap">mWrap</a></strong></code>&nbsp;</td>
 </tr>
@@ -174,8 +178,9 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#__jamon_innerUnit__queueStats(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">__jamon_innerUnit__queueStats</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
-                                                          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#__jamon_innerUnit__queueStats(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper,%20org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">__jamon_innerUnit__queueStats</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+                                                          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap,
+                                                          <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
@@ -232,10 +237,19 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <a name="mWrap">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>mWrap</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.40">mWrap</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.42">mWrap</a></pre>
+</li>
+</ul>
+<a name="mServerWrap">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>mServerWrap</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.43">mServerWrap</a></pre>
 </li>
 </ul>
 </li>
@@ -252,7 +266,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ServerMetricsTmplImpl</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.45">ServerMetricsTmplImpl</a>(org.jamon.TemplateManager&nbsp;p_templateManager,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.48">ServerMetricsTmplImpl</a>(org.jamon.TemplateManager&nbsp;p_templateManager,
                      <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl.ImplData</a>&nbsp;p_implData)</pre>
 </li>
 </ul>
@@ -270,7 +284,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>__jamon_setOptionalArguments</h4>
-<pre>protected static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl.ImplData</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.41">__jamon_setOptionalArguments</a>(<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl.ImplData</a>&nbsp;p_implData)</pre>
+<pre>protected static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl.ImplData</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.44">__jamon_setOptionalArguments</a>(<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl.ImplData</a>&nbsp;p_implData)</pre>
 </li>
 </ul>
 <a name="renderNoFlush(java.io.Writer)">
@@ -279,7 +293,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>renderNoFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.51">renderNoFlush</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.55">renderNoFlush</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter)
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -294,21 +308,22 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>__jamon_innerUnit__requestStats</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.102">__jamon_innerUnit__requestStats</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.106">__jamon_innerUnit__requestStats</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
                                    <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)
                                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
 </li>
 </ul>
-<a name="__jamon_innerUnit__queueStats(java.io.Writer, org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">
+<a name="__jamon_innerUnit__queueStats(java.io.Writer, org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper, org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>__jamon_innerUnit__queueStats</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.123">__jamon_innerUnit__queueStats</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
-                                 <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.127">__jamon_innerUnit__queueStats</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+                                 <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap,
+                                 <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)
                                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -320,7 +335,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>__jamon_innerUnit__memoryStats</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.140">__jamon_innerUnit__memoryStats</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.149">__jamon_innerUnit__memoryStats</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
                                   <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)
                                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -333,7 +348,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>__jamon_innerUnit__baseStats</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.169">__jamon_innerUnit__baseStats</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.178">__jamon_innerUnit__baseStats</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
                                 <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)
                                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -346,7 +361,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>__jamon_innerUnit__walStats</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.198">__jamon_innerUnit__walStats</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.207">__jamon_innerUnit__walStats</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
                                <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)
                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -359,7 +374,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>__jamon_innerUnit__storeStats</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.215">__jamon_innerUnit__storeStats</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#line.224">__jamon_innerUnit__storeStats</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
                                  <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)
                                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/util/BoundedCompletionService.QueueingFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/BoundedCompletionService.QueueingFuture.html b/devapidocs/org/apache/hadoop/hbase/util/BoundedCompletionService.QueueingFuture.html
index 3f25926..1aebd9f 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/BoundedCompletionService.QueueingFuture.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/BoundedCompletionService.QueueingFuture.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedCompletionService.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/BoundedCompletionService.QueueingFuture.html" target="_top">Frames</a></li>
@@ -235,7 +235,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/F
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedCompletionService.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/BoundedCompletionService.QueueingFuture.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html b/devapidocs/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html
deleted file mode 100644
index b445e71..0000000
--- a/devapidocs/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html
+++ /dev/null
@@ -1,518 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>BoundedConcurrentLinkedQueue (Apache HBase 2.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<script type="text/javascript"><!--
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="BoundedConcurrentLinkedQueue (Apache HBase 2.0.0-SNAPSHOT API)";
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar_top">
-<!--   -->
-</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/BoundedConcurrentLinkedQueue.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedCompletionService.QueueingFuture.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" target="_top">Frames</a></li>
-<li><a href="BoundedConcurrentLinkedQueue.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method_summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method_detail">Method</a></li>
-</ul>
-</div>
-<a name="skip-navbar_top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.util</div>
-<h2 title="Class BoundedConcurrentLinkedQueue" class="title">Class BoundedConcurrentLinkedQueue&lt;T&gt;</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li><a href="http://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">java.util.AbstractCollection</a>&lt;E&gt;</li>
-<li>
-<ul class="inheritance">
-<li><a href="http://docs.oracle.com/javase/7/docs/api/java/util/AbstractQueue.html?is-external=true" title="class or interface in java.util">java.util.AbstractQueue</a>&lt;E&gt;</li>
-<li>
-<ul class="inheritance">
-<li><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true" title="class or interface in java.util.concurrent">java.util.concurrent.ConcurrentLinkedQueue</a>&lt;T&gt;</li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.util.BoundedConcurrentLinkedQueue&lt;T&gt;</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>All Implemented Interfaces:</dt>
-<dd><a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;T&gt;, <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;T&gt;, <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</a>&lt;T&gt;</dd>
-</dl>
-<hr>
-<br>
-<pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Stable.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceStability.Stable</a>
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#line.32">BoundedConcurrentLinkedQueue</a>&lt;T&gt;
-extends <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentLinkedQueue</a>&lt;T&gt;</pre>
-<div class="block">A ConcurrentLinkedQueue that enforces a maximum queue size.</div>
-<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../serialized-form.html#org.apache.hadoop.hbase.util.BoundedConcurrentLinkedQueue">Serialized Form</a></dd></dl>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field_summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private long</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#maxSize">maxSize</a></strong></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static long</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#serialVersionUID">serialVersionUID</a></strong></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a></code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#size">size</a></strong></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor_summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#BoundedConcurrentLinkedQueue()">BoundedConcurrentLinkedQueue</a></strong>()</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#BoundedConcurrentLinkedQueue(long)">BoundedConcurrentLinkedQueue</a></strong>(long&nbsp;maxSize)</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method_summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#addAll(java.util.Collection)">addAll</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;&nbsp;c)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#clear()">clear</a></strong>()</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#drainTo(java.util.Collection)">drainTo</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;&nbsp;list)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#offer(T)">offer</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&nbsp;e)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a></code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#poll()">poll</a></strong>()</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#remainingCapacity()">remainingCapacity</a></strong>()</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#remove(java.lang.Object)">remove</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>int</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#size()">size</a></strong>()</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods_inherited_from_class_java.util.concurrent.ConcurrentLinkedQueue">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.util.concurrent.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentLinkedQueue</a></h3>
-<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true#add(E)" title="class or interface in java.util.concurrent">add</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util.concurrent">contains</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true#isEmpty()" title="class or interface in java.util.concurrent">isEmpty</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true#iterator()" title="class or interface in java.util.concurrent">iterator</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true#peek()" title="class or interface in java.util.concurrent">peek</a>, <a href="http://docs.oracle.com/ja
 vase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true#toArray()" title="class or interface in java.util.concurrent">toArray</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true#toArray(T[])" title="class or interface in java.util.concurrent">toArray</a></code></li>
-</ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods_inherited_from_class_java.util.AbstractQueue">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.util.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/AbstractQueue.html?is-external=true" title="class or interface in java.util">AbstractQueue</a></h3>
-<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/AbstractQueue.html?is-external=true#element()" title="class or interface in java.util">element</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/util/AbstractQueue.html?is-external=true#remove()" title="class or interface in java.util">remove</a></code></li>
-</ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods_inherited_from_class_java.util.AbstractCollection">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.util.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</a></h3>
-<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html?is-external=true#toString()" title="class or interface in java.util">toString</a></code></li>
-</ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang
 /Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods_inherited_from_class_java.util.Queue">
-<!--   -->
-</a>
-<h3>Methods inherited from interface&nbsp;java.util.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</a></h3>
-<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html?is-external=true#element()" title="class or interface in java.util">element</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html?is-external=true#remove()" title="class or interface in java.util">remove</a></code></li>
-</ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods_inherited_from_class_java.util.Collection">
-<!--   -->
-</a>
-<h3>Methods inherited from interface&nbsp;java.util.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a></h3>
-<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field_detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="serialVersionUID">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>serialVersionUID</h4>
-<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#line.33">serialVersionUID</a></pre>
-<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.BoundedConcurrentLinkedQueue.serialVersionUID">Constant Field Values</a></dd></dl>
-</li>
-</ul>
-<a name="size">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>size</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/util/BoundedConcurrentLinkedQueue.html#line.34">size</a></pre>
-</li>
-</ul>
-<a name="maxSize">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>maxSize</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#line.35">maxSize</a></pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor_detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="BoundedConcurrentLinkedQueue()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>BoundedConcurrentLinkedQueue</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#line.37">BoundedConcurrentLinkedQueue</a>()</pre>
-</li>
-</ul>
-<a name="BoundedConcurrentLinkedQueue(long)">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>BoundedConcurrentLinkedQueue</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#line.41">BoundedConcurrentLinkedQueue</a>(long&nbsp;maxSize)</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method_detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="addAll(java.util.Collection)">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>addAll</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#line.47">addAll</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;&nbsp;c)</pre>
-<dl>
-<dt><strong>Specified by:</strong></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;</code></dd>
-<dt><strong>Overrides:</strong></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util.concurrent">addAll</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentLinkedQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;</code></dd>
-</dl>
-</li>
-</ul>
-<a name="clear()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>clear</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#line.62">clear</a>()</pre>
-<dl>
-<dt><strong>Specified by:</strong></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;</code></dd>
-<dt><strong>Overrides:</strong></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/AbstractQueue.html?is-external=true#clear()" title="class or interface in java.util">clear</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/AbstractQueue.html?is-external=true" title="class or interface in java.util">AbstractQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;</code></dd>
-</dl>
-</li>
-</ul>
-<a name="offer(java.lang.Object)">
-<!--   -->
-</a><a name="offer(T)">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>offer</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#line.72">offer</a>(<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&nbsp;e)</pre>
-<dl>
-<dt><strong>Specified by:</strong></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html?is-external=true#offer(E)" title="class or interface in java.util">offer</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;</code></dd>
-<dt><strong>Overrides:</strong></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true#offer(E)" title="class or interface in java.util.concurrent">offer</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentLinkedQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;</code></dd>
-</dl>
-</li>
-</ul>
-<a name="poll()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>poll</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#line.86">poll</a>()</pre>
-<dl>
-<dt><strong>Specified by:</strong></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html?is-external=true#poll()" title="class or interface in java.util">poll</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;</code></dd>
-<dt><strong>Overrides:</strong></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true#poll()" title="class or interface in java.util.concurrent">poll</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentLinkedQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;</code></dd>
-</dl>
-</li>
-</ul>
-<a name="remove(java.lang.Object)">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>remove</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#line.95">remove</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
-<dl>
-<dt><strong>Specified by:</strong></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;</code></dd>
-<dt><strong>Overrides:</strong></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util.concurrent">remove</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentLinkedQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;</code></dd>
-</dl>
-</li>
-</ul>
-<a name="size()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>size</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#line.104">size</a>()</pre>
-<dl>
-<dt><strong>Specified by:</strong></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;</code></dd>
-<dt><strong>Overrides:</strong></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true#size()" title="class or interface in java.util.concurrent">size</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentLinkedQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;</code></dd>
-</dl>
-</li>
-</ul>
-<a name="drainTo(java.util.Collection)">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>drainTo</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#line.108">drainTo</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;&nbsp;list)</pre>
-</li>
-</ul>
-<a name="remainingCapacity()">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>remainingCapacity</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#line.119">remainingCapacity</a>()</pre>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar_bottom">
-<!--   -->
-</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/BoundedConcurrentLinkedQueue.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedCompletionService.QueueingFuture.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" target="_top">Frames</a></li>
-<li><a href="BoundedConcurrentLinkedQueue.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method_summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method_detail">Method</a></li>
-</ul>
-</div>
-<a name="skip-navbar_bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2015 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html b/devapidocs/org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html
index 49d3cda..a2c32ef 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html
@@ -35,7 +35,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedCompletionService.QueueingFuture.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -652,7 +652,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedCompletionService.QueueingFuture.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/util/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-frame.html b/devapidocs/org/apache/hadoop/hbase/util/package-frame.html
index be01703..0d2ac4e 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-frame.html
@@ -48,7 +48,6 @@
 <li><a href="BloomFilterUtil.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">BloomFilterUtil</a></li>
 <li><a href="BoundedArrayQueue.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">BoundedArrayQueue</a></li>
 <li><a href="BoundedCompletionService.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">BoundedCompletionService</a></li>
-<li><a href="BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">BoundedConcurrentLinkedQueue</a></li>
 <li><a href="BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">BoundedPriorityBlockingQueue</a></li>
 <li><a href="BoundedPriorityBlockingQueue.PriorityQueue.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">BoundedPriorityBlockingQueue.PriorityQueue</a></li>
 <li><a href="ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">ByteBufferArray</a></li>


[45/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/client/HTable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/HTable.html b/devapidocs/org/apache/hadoop/hbase/client/HTable.html
index d73095e..ee210ac 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/HTable.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/HTable.html
@@ -890,7 +890,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/HTableInterfac
 <li class="blockList">
 <h4>HTable</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.153">HTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.154">HTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                 <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;connection,
                                 <a href="../../../../../org/apache/hadoop/hbase/client/TableConfiguration.html" title="class in org.apache.hadoop.hbase.client">TableConfiguration</a>&nbsp;tableConfig,
                                 <a href="../../../../../org/apache/hadoop/hbase/client/RpcRetryingCallerFactory.html" title="class in org.apache.hadoop.hbase.client">RpcRetryingCallerFactory</a>&nbsp;rpcCallerFactory,
@@ -911,7 +911,7 @@ protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/H
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HTable</h4>
-<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.185">HTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;conn,
+<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.186">HTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;conn,
       <a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutatorParams.html" title="class in org.apache.hadoop.hbase.client">BufferedMutatorParams</a>&nbsp;params)
           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">For internal testing. Uses Connection provided in <code>params</code>.</div>
@@ -943,7 +943,7 @@ public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/c
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxKeyValueSize</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.198">getMaxKeyValueSize</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.199">getMaxKeyValueSize</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>maxKeyValueSize from configuration.</dd></dl>
 </li>
 </ul>
@@ -953,7 +953,7 @@ public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/c
 <ul class="blockList">
 <li class="blockList">
 <h4>finishSetup</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.205">finishSetup</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.206">finishSetup</a>()
                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">setup this HTable's parameter based on the passed configuration</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -966,7 +966,7 @@ public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/c
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.230">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.231">getConfiguration</a>()</pre>
 <div class="block">Returns the <code>Configuration</code> object used by this instance.
  <p>
  The reference returned is not a copy, so any change made to it will
@@ -983,7 +983,7 @@ public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/c
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableName</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.238">getTableName</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.239">getTableName</a>()</pre>
 <div class="block">Gets the name of this table.</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -997,7 +997,7 @@ public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/c
 <ul class="blockList">
 <li class="blockList">
 <h4>getName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.243">getName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.244">getName</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Table.html#getName()">Table</a></code></strong></div>
 <div class="block">Gets the fully qualified table name instance of this table.</div>
 <dl>
@@ -1013,7 +1013,7 @@ public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/c
 <li class="blockList">
 <h4>getConnection</h4>
 <pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.256">getConnection</a>()</pre>
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.257">getConnection</a>()</pre>
 <div class="block"><span class="strong">Deprecated.</span>&nbsp;<i>This method will be changed from public to package protected.</i></div>
 <div class="block"><em>INTERNAL</em> Used by unit tests and tools to do low-level
  manipulations.</div>
@@ -1026,7 +1026,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.264">getTableDescriptor</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.265">getTableDescriptor</a>()
                                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Gets the <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase"><code>table descriptor</code></a> for this table.</div>
 <dl>
@@ -1042,7 +1042,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>executeMasterCallable</h4>
-<pre>private&nbsp;&lt;V&gt;&nbsp;V&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.272">executeMasterCallable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/MasterCallable.html" title="class in org.apache.hadoop.hbase.client">MasterCallable</a>&lt;V&gt;&nbsp;callable)
+<pre>private&nbsp;&lt;V&gt;&nbsp;V&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.273">executeMasterCallable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/MasterCallable.html" title="class in org.apache.hadoop.hbase.client">MasterCallable</a>&lt;V&gt;&nbsp;callable)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -1054,7 +1054,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getKeysAndRegionsInRange</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;,<a href="http://docs.oracle.com/javase/7/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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.292">getKeysAndRegionsInRange</a>(byte[]&nbsp;startKey,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;,<a href="http://docs.oracle.com/javase/7/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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.293">getKeysAndRegionsInRange</a>(byte[]&nbsp;startKey,
                                                                 byte[]&nbsp;endKey,
                                                                 boolean&nbsp;includeEndKey)
                                                                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1074,7 +1074,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getKeysAndRegionsInRange</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;,<a href="http://docs.oracle.com/javase/7/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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.310">getKeysAndRegionsInRange</a>(byte[]&nbsp;startKey,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;,<a href="http://docs.oracle.com/javase/7/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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.311">getKeysAndRegionsInRange</a>(byte[]&nbsp;startKey,
                                                                 byte[]&nbsp;endKey,
                                                                 boolean&nbsp;includeEndKey,
                                                                 boolean&nbsp;reload)
@@ -1095,7 +1095,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanner</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ResultScanner.html" title="interface in org.apache.hadoop.hbase.client">ResultScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.339">getScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ResultScanner.html" title="interface in org.apache.hadoop.hbase.client">ResultScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.340">getScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">The underlying <a href="../../../../../org/apache/hadoop/hbase/client/HTable.html" title="class in org.apache.hadoop.hbase.client"><code>HTable</code></a> must not be closed.
  <a href="../../../../../org/apache/hadoop/hbase/client/Table.html#getScanner(org.apache.hadoop.hbase.client.Scan)"><code>Table.getScanner(Scan)</code></a> has other usage details.</div>
@@ -1114,7 +1114,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanner</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ResultScanner.html" title="interface in org.apache.hadoop.hbase.client">ResultScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.390">getScanner</a>(byte[]&nbsp;family)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ResultScanner.html" title="interface in org.apache.hadoop.hbase.client">ResultScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.391">getScanner</a>(byte[]&nbsp;family)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">The underlying <a href="../../../../../org/apache/hadoop/hbase/client/HTable.html" title="class in org.apache.hadoop.hbase.client"><code>HTable</code></a> must not be closed.
  <a href="../../../../../org/apache/hadoop/hbase/client/Table.html#getScanner(byte[])"><code>Table.getScanner(byte[])</code></a> has other usage details.</div>
@@ -1133,7 +1133,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanner</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ResultScanner.html" title="interface in org.apache.hadoop.hbase.client">ResultScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.401">getScanner</a>(byte[]&nbsp;family,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ResultScanner.html" title="interface in org.apache.hadoop.hbase.client">ResultScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.402">getScanner</a>(byte[]&nbsp;family,
                        byte[]&nbsp;qualifier)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">The underlying <a href="../../../../../org/apache/hadoop/hbase/client/HTable.html" title="class in org.apache.hadoop.hbase.client"><code>HTable</code></a> must not be closed.
@@ -1153,7 +1153,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.412">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.413">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)
            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Extracts certain cells from a given row.</div>
 <dl>
@@ -1173,7 +1173,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.416">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.417">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
          boolean&nbsp;checkExistenceOnly)
             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -1186,7 +1186,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.464">get</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&gt;&nbsp;gets)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.465">get</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&gt;&nbsp;gets)
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Extracts certain cells from the given rows, in batch.</div>
 <dl>
@@ -1207,7 +1207,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>batch</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.490">batch</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;actions,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.491">batch</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;actions,
          <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&nbsp;results)
            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                   <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1232,7 +1232,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>batchCallback</h4>
-<pre>public&nbsp;&lt;R&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.503">batchCallback</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;actions,
+<pre>public&nbsp;&lt;R&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.504">batchCallback</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;actions,
                      <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&nbsp;results,
                      <a href="../../../../../org/apache/hadoop/hbase/client/coprocessor/Batch.Callback.html" title="interface in org.apache.hadoop.hbase.client.coprocessor">Batch.Callback</a>&lt;R&gt;&nbsp;callback)
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -1252,7 +1252,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.513">delete</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Delete.html" title="class in org.apache.hadoop.hbase.client">Delete</a>&nbsp;delete)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.514">delete</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Delete.html" title="class in org.apache.hadoop.hbase.client">Delete</a>&nbsp;delete)
             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Deletes the specified cells/row.</div>
 <dl>
@@ -1269,7 +1269,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.540">delete</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Delete.html" title="class in org.apache.hadoop.hbase.client">Delete</a>&gt;&nbsp;deletes)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.541">delete</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Delete.html" title="class in org.apache.hadoop.hbase.client">Delete</a>&gt;&nbsp;deletes)
             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Deletes the specified cells/rows in bulk.</div>
 <dl>
@@ -1291,7 +1291,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>put</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.565">put</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.566">put</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)
          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Puts some data in the table.</div>
 <dl>
@@ -1308,7 +1308,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>put</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.577">put</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&gt;&nbsp;puts)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.578">put</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&gt;&nbsp;puts)
          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Puts some data in the table, in batch.
  <p>
@@ -1332,7 +1332,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>mutateRow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.588">mutateRow</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RowMutations.html" title="class in org.apache.hadoop.hbase.client">RowMutations</a>&nbsp;rm)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.589">mutateRow</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RowMutations.html" title="class in org.apache.hadoop.hbase.client">RowMutations</a>&nbsp;rm)
                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Performs multiple mutations atomically on a single row. Currently
  <a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client"><code>Put</code></a> and <a href="../../../../../org/apache/hadoop/hbase/client/Delete.html" title="class in org.apache.hadoop.hbase.client"><code>Delete</code></a> are supported.</div>
@@ -1350,7 +1350,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.624">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;append)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.625">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;append)
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Appends values to one or more columns within a single row.
  <p>
@@ -1374,7 +1374,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>increment</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.657">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;increment)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.658">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;increment)
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Increments one or more columns within a single row.
  <p>
@@ -1398,7 +1398,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementColumnValue</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.688">incrementColumnValue</a>(byte[]&nbsp;row,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.689">incrementColumnValue</a>(byte[]&nbsp;row,
                         byte[]&nbsp;family,
                         byte[]&nbsp;qualifier,
                         long&nbsp;amount)
@@ -1422,7 +1422,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementColumnValue</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.698">incrementColumnValue</a>(byte[]&nbsp;row,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.699">incrementColumnValue</a>(byte[]&nbsp;row,
                         byte[]&nbsp;family,
                         byte[]&nbsp;qualifier,
                         long&nbsp;amount,
@@ -1451,7 +1451,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndPut</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.743">checkAndPut</a>(byte[]&nbsp;row,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.744">checkAndPut</a>(byte[]&nbsp;row,
                   byte[]&nbsp;family,
                   byte[]&nbsp;qualifier,
                   byte[]&nbsp;value,
@@ -1475,7 +1475,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndPut</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.772">checkAndPut</a>(byte[]&nbsp;row,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.773">checkAndPut</a>(byte[]&nbsp;row,
                   byte[]&nbsp;family,
                   byte[]&nbsp;qualifier,
                   <a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter">CompareFilter.CompareOp</a>&nbsp;compareOp,
@@ -1500,7 +1500,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndDelete</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.802">checkAndDelete</a>(byte[]&nbsp;row,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.803">checkAndDelete</a>(byte[]&nbsp;row,
                      byte[]&nbsp;family,
                      byte[]&nbsp;qualifier,
                      byte[]&nbsp;value,
@@ -1524,7 +1524,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndDelete</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.831">checkAndDelete</a>(byte[]&nbsp;row,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.832">checkAndDelete</a>(byte[]&nbsp;row,
                      byte[]&nbsp;family,
                      byte[]&nbsp;qualifier,
                      <a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter">CompareFilter.CompareOp</a>&nbsp;compareOp,
@@ -1549,7 +1549,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndMutate</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.861">checkAndMutate</a>(byte[]&nbsp;row,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.862">checkAndMutate</a>(byte[]&nbsp;row,
                      byte[]&nbsp;family,
                      byte[]&nbsp;qualifier,
                      <a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter">CompareFilter.CompareOp</a>&nbsp;compareOp,
@@ -1574,7 +1574,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>exists</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.899">exists</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.900">exists</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)
                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Test for the existence of columns in the table, as specified by the Get.
  <p>
@@ -1599,7 +1599,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>existsAll</h4>
-<pre>public&nbsp;boolean[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.909">existsAll</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&gt;&nbsp;gets)
+<pre>public&nbsp;boolean[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.910">existsAll</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&gt;&nbsp;gets)
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Test for the existence of columns in the table, as specified by the Gets.
  <p>
@@ -1625,7 +1625,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>flushCommits</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.943">flushCommits</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.944">flushCommits</a>()
                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Executes all the buffered <a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client"><code>Put</code></a> operations.
  <p>
@@ -1645,7 +1645,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>processBatchCallback</h4>
-<pre>public&nbsp;&lt;R&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.962">processBatchCallback</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;list,
+<pre>public&nbsp;&lt;R&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.963">processBatchCallback</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;list,
                             <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&nbsp;results,
                             <a href="../../../../../org/apache/hadoop/hbase/client/coprocessor/Batch.Callback.html" title="interface in org.apache.hadoop.hbase.client.coprocessor">Batch.Callback</a>&lt;R&gt;&nbsp;callback)
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -1667,7 +1667,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>processBatch</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.973">processBatch</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;list,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.974">processBatch</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;list,
                 <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&nbsp;results)
                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                          <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -1684,7 +1684,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.980">close</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.981">close</a>()
            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Table.html#close()">Table</a></code></strong></div>
 <div class="block">Releases any resources held or pending changes in internal buffers.</div>
@@ -1705,7 +1705,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>validatePut</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1007">validatePut</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1008">validatePut</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code></dd></dl>
@@ -1717,7 +1717,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>validatePut</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1012">validatePut</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1013">validatePut</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put,
                int&nbsp;maxKeyValueSize)
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -1730,7 +1730,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isAutoFlush</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1031">isAutoFlush</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1032">isAutoFlush</a>()</pre>
 <div class="block">Tells whether or not 'auto-flush' is turned on.</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -1746,7 +1746,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setAutoFlushTo</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1039">setAutoFlushTo</a>(boolean&nbsp;autoFlush)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1040">setAutoFlushTo</a>(boolean&nbsp;autoFlush)</pre>
 <div class="block">Set the autoFlush behavior, without changing the value of <code>clearBufferOnFail</code>.</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -1760,7 +1760,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setAutoFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1047">setAutoFlush</a>(boolean&nbsp;autoFlush,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1048">setAutoFlush</a>(boolean&nbsp;autoFlush,
                 boolean&nbsp;clearBufferOnFail)</pre>
 <div class="block">Turns 'auto-flush' on or off.
  <p>
@@ -1799,7 +1799,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getWriteBufferSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1059">getWriteBufferSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1060">getWriteBufferSize</a>()</pre>
 <div class="block">Returns the maximum size in bytes of the write buffer for this HTable.
  <p>
  The default value comes from the configuration parameter
@@ -1818,7 +1818,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setWriteBufferSize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1076">setWriteBufferSize</a>(long&nbsp;writeBufferSize)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1077">setWriteBufferSize</a>(long&nbsp;writeBufferSize)
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Sets the size of the buffer in bytes.
  <p>
@@ -1840,7 +1840,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getPool</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1085">getPool</a>()</pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1086">getPool</a>()</pre>
 <div class="block">The pool is used for mutli requests for this HTable</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the pool used for mutli</dd></dl>
 </li>
@@ -1851,7 +1851,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>clearRegionCache</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1093">clearRegionCache</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1094">clearRegionCache</a>()</pre>
 <div class="block">Explicitly clears the region cache to fetch the latest value from META.
  This is a power user function: avoid unless you know the ramifications.</div>
 </li>
@@ -1862,7 +1862,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorService</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/CoprocessorRpcChannel.html" title="class in org.apache.hadoop.hbase.ipc">CoprocessorRpcChannel</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1101">coprocessorService</a>(byte[]&nbsp;row)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/CoprocessorRpcChannel.html" title="class in org.apache.hadoop.hbase.ipc">CoprocessorRpcChannel</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1102">coprocessorService</a>(byte[]&nbsp;row)</pre>
 <div class="block">Creates and returns a <code>RpcChannel</code> instance connected to the
  table region containing the specified row.  The row given does not actually have
  to exist.  Whichever region would contain the row based on start and end keys will
@@ -1898,7 +1898,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorService</h4>
-<pre>public&nbsp;&lt;T extends com.google.protobuf.Service,R&gt;&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1109">coprocessorService</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;service,
+<pre>public&nbsp;&lt;T extends com.google.protobuf.Service,R&gt;&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1110">coprocessorService</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;service,
                                                                          byte[]&nbsp;startKey,
                                                                          byte[]&nbsp;endKey,
                                                                          <a href="../../../../../org/apache/hadoop/hbase/client/coprocessor/Batch.Call.html" title="interface in org.apache.hadoop.hbase.client.coprocessor">Batch.Call</a>&lt;T,R&gt;&nbsp;callable)
@@ -1927,7 +1927,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorService</h4>
-<pre>public&nbsp;&lt;T extends com.google.protobuf.Service,R&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1129">coprocessorService</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;service,
+<pre>public&nbsp;&lt;T extends com.google.protobuf.Service,R&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1130">coprocessorService</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;service,
                                                                 byte[]&nbsp;startKey,
                                                                 byte[]&nbsp;endKey,
                                                                 <a href="../../../../../org/apache/hadoop/hbase/client/coprocessor/Batch.Call.html" title="interface in org.apache.hadoop.hbase.client.coprocessor">Batch.Call</a>&lt;T,R&gt;&nbsp;callable,
@@ -1959,7 +1959,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartKeysInRange</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1170">getStartKeysInRange</a>(byte[]&nbsp;start,
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1171">getStartKeysInRange</a>(byte[]&nbsp;start,
                                byte[]&nbsp;end)
                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -1972,7 +1972,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setOperationTimeout</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1181">setOperationTimeout</a>(int&nbsp;operationTimeout)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1182">setOperationTimeout</a>(int&nbsp;operationTimeout)</pre>
 </li>
 </ul>
 <a name="getOperationTimeout()">
@@ -1981,7 +1981,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getOperationTimeout</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1185">getOperationTimeout</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1186">getOperationTimeout</a>()</pre>
 </li>
 </ul>
 <a name="toString()">
@@ -1990,7 +1990,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/HTable.html#line.1190">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/HTable.html#line.1191">toString</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -2005,7 +2005,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>batchCoprocessorService</h4>
-<pre>public&nbsp;&lt;R extends com.google.protobuf.Message&gt;&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1198">batchCoprocessorService</a>(com.google.protobuf.Descriptors.MethodDescriptor&nbsp;methodDescriptor,
+<pre>public&nbsp;&lt;R extends com.google.protobuf.Message&gt;&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1199">batchCoprocessorService</a>(com.google.protobuf.Descriptors.MethodDescriptor&nbsp;methodDescriptor,
                                                                             com.google.protobuf.Message&nbsp;request,
                                                                             byte[]&nbsp;startKey,
                                                                             byte[]&nbsp;endKey,
@@ -2036,7 +2036,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>batchCoprocessorService</h4>
-<pre>public&nbsp;&lt;R extends com.google.protobuf.Message&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1220">batchCoprocessorService</a>(com.google.protobuf.Descriptors.MethodDescriptor&nbsp;methodDescriptor,
+<pre>public&nbsp;&lt;R extends com.google.protobuf.Message&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1221">batchCoprocessorService</a>(com.google.protobuf.Descriptors.MethodDescriptor&nbsp;methodDescriptor,
                                                                    com.google.protobuf.Message&nbsp;request,
                                                                    byte[]&nbsp;startKey,
                                                                    byte[]&nbsp;endKey,
@@ -2071,7 +2071,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionLocator</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client">RegionLocator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1303">getRegionLocator</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client">RegionLocator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1304">getRegionLocator</a>()</pre>
 </li>
 </ul>
 <a name="getBufferedMutator()">
@@ -2080,7 +2080,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getBufferedMutator</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutator.html" title="interface in org.apache.hadoop.hbase.client">BufferedMutator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1308">getBufferedMutator</a>()
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutator.html" title="interface in org.apache.hadoop.hbase.client">BufferedMutator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTable.html#line.1309">getBufferedMutator</a>()
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/client/ReversedScannerCallable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/ReversedScannerCallable.html b/devapidocs/org/apache/hadoop/hbase/client/ReversedScannerCallable.html
index fd1c19c..2c5f3bb 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/ReversedScannerCallable.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/ReversedScannerCallable.html
@@ -143,7 +143,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.h
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#cConnection">cConnection</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#closed">closed</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#controller">controller</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#controllerFactory">controllerFactory</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#heartbeatMessage">heartbeatMessage</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#id">id</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#instantiated">instantiated</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#isRegionServerRemote">isRegionServerRemote</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#LOG">LOG</a>, <a href="../../../../../org/apache/hadoop
 /hbase/client/ScannerCallable.html#LOG_SCANNER_ACTIVITY">LOG_SCANNER_ACTIVITY</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#LOG_SCANNER_LATENCY_CUTOFF">LOG_SCANNER_LATENCY_CUTOFF</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#scanMetrics">scanMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#scannerId">scannerId</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#serverHasMoreResults">serverHasMoreResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#serverHasMoreResultsContext">serverHasMoreResultsContext</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#cConnection">cConnection</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#closed">closed</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#controller">controller</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#controllerFactory">controllerFactory</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#heartbeatMessage">heartbeatMessage</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#id">id</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#instantiated">instantiated</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#isRegionServerRemote">isRegionServerRemote</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#LOG">LOG</a>, <a href="../../../../../org/apache/hadoop
 /hbase/client/ScannerCallable.html#LOG_SCANNER_ACTIVITY">LOG_SCANNER_ACTIVITY</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#LOG_SCANNER_LATENCY_CUTOFF">LOG_SCANNER_LATENCY_CUTOFF</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#renew">renew</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#scanMetrics">scanMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#scannerId">scannerId</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#serverHasMoreResults">serverHasMoreResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#serverHasMoreResultsContext">serverHasMoreResultsContext</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields_inherited_from_class_org.apache.hadoop.hbase.client.RegionServerCallable">
@@ -234,7 +234,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.h
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#call(int)">call</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#checkIfRegionServerIsRemote()">checkIfRegionServerIsRemote</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getCaching()">getCaching</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getConnection()">getConnection</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getController()">getController</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getHRegionInfo()">getHRegionInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getScan()">getScan</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getServerHasMoreResults()">getServerHasMoreResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#ha
 sMoreResultsContext()">hasMoreResultsContext</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#isHeartbeatMessage()">isHeartbeatMessage</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#openScanner()">openScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setCaching(int)">setCaching</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setClose()">setClose</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setHasMoreResultsContext(boolean)">setHasMoreResultsContext</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setHeartbeatMessage(boolean)">setHeartbeatMessage</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setServerHasMoreResults(boolean)">setServerHasMoreResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#updateResultsMetric
 s(org.apache.hadoop.hbase.client.Result[])">updateResultsMetrics</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#call(int)">call</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#checkIfRegionServerIsRemote()">checkIfRegionServerIsRemote</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getCaching()">getCaching</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getConnection()">getConnection</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getController()">getController</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getHRegionInfo()">getHRegionInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getScan()">getScan</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#getServerHasMoreResults()">getServerHasMoreResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#ha
 sMoreResultsContext()">hasMoreResultsContext</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#isHeartbeatMessage()">isHeartbeatMessage</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#openScanner()">openScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setCaching(int)">setCaching</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setClose()">setClose</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setHasMoreResultsContext(boolean)">setHasMoreResultsContext</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setHeartbeatMessage(boolean)">setHeartbeatMessage</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setRenew(boolean)">setRenew</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#setServerHasMoreResults(boolean)">setServerHasMor
 eResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html#updateResultsMetrics(org.apache.hadoop.hbase.client.Result[])">updateResultsMetrics</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.client.RegionServerCallable">


[41/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
index b75a171..fdd7250 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -323,31 +323,31 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <!--   -->
 </a>
 <h3>Field Detail</h3>
-<a name="metaLocation">
+<a name="deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>metaLocation</h4>
-<pre>protected&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/tmpl/master/MasterStatusTmpl.html#line.275">metaLocation</a></pre>
+<h4>deadServers</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.275">deadServers</a></pre>
 </li>
 </ul>
-<a name="frags">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>frags</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.282">frags</a></pre>
+<h4>format</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.html#line.282">format</a></pre>
 </li>
 </ul>
-<a name="assignmentManager">
+<a name="metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>assignmentManager</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.289">assignmentManager</a></pre>
+<h4>metaLocation</h4>
+<pre>protected&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/tmpl/master/MasterStatusTmpl.html#line.289">metaLocation</a></pre>
 </li>
 </ul>
 <a name="serverManager">
@@ -359,22 +359,22 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.296">serverManager</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>format</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.html#line.303">format</a></pre>
+<h4>frags</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.303">frags</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>servers</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.310">servers</a></pre>
+<h4>filter</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.html#line.310">filter</a></pre>
 </li>
 </ul>
 <a name="catalogJanitorEnabled">
@@ -386,22 +386,22 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.317">catalogJanitorEnabled</a></pre>
 </li>
 </ul>
-<a name="deadServers">
+<a name="servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>deadServers</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.324">deadServers</a></pre>
+<h4>servers</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.324">servers</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="assignmentManager">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>filter</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.html#line.331">filter</a></pre>
+<h4>assignmentManager</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.331">assignmentManager</a></pre>
 </li>
 </ul>
 </li>
@@ -473,31 +473,31 @@ extends org.jamon.AbstractTemplateProxy</pre>
 </dl>
 </li>
 </ul>
-<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
+<a name="setDeadServers(java.util.Set)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setMetaLocation</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.276">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;p_metaLocation)</pre>
+<h4>setDeadServers</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.276">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_deadServers)</pre>
 </li>
 </ul>
-<a name="setFrags(java.util.Map)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFrags</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.283">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;p_frags)</pre>
+<h4>setFormat</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.283">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
 </li>
 </ul>
-<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
+<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setAssignmentManager</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.290">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;p_assignmentManager)</pre>
+<h4>setMetaLocation</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.290">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;p_metaLocation)</pre>
 </li>
 </ul>
 <a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
@@ -509,22 +509,22 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.297">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;p_serverManager)</pre>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setFrags(java.util.Map)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.304">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
+<h4>setFrags</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.304">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;p_frags)</pre>
 </li>
 </ul>
-<a name="setServers(java.util.List)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServers</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.311">setServers</a>(<a href="http://docs.oracle.com/javase/7/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;p_servers)</pre>
+<h4>setFilter</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.311">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
 </li>
 </ul>
 <a name="setCatalogJanitorEnabled(boolean)">
@@ -536,22 +536,22 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.318">setCatalogJanitorEnabled</a>(boolean&nbsp;p_catalogJanitorEnabled)</pre>
 </li>
 </ul>
-<a name="setDeadServers(java.util.Set)">
+<a name="setServers(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setDeadServers</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.325">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_deadServers)</pre>
+<h4>setServers</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.325">setServers</a>(<a href="http://docs.oracle.com/javase/7/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;p_servers)</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.332">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.332">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;p_assignmentManager)</pre>
 </li>
 </ul>
 <a name="constructImpl(java.lang.Class)">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
index 011937d..7179e90 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
@@ -264,31 +264,31 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/Master
 <pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.62">master</a></pre>
 </li>
 </ul>
-<a name="metaLocation">
+<a name="deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>metaLocation</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/tmpl/master/MasterStatusTmplImpl.html#line.63">metaLocation</a></pre>
+<h4>deadServers</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.63">deadServers</a></pre>
 </li>
 </ul>
-<a name="frags">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>frags</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.64">frags</a></pre>
+<h4>format</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmplImpl.html#line.64">format</a></pre>
 </li>
 </ul>
-<a name="assignmentManager">
+<a name="metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>assignmentManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.65">assignmentManager</a></pre>
+<h4>metaLocation</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/tmpl/master/MasterStatusTmplImpl.html#line.65">metaLocation</a></pre>
 </li>
 </ul>
 <a name="serverManager">
@@ -300,22 +300,22 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/Master
 <pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.66">serverManager</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>format</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmplImpl.html#line.67">format</a></pre>
+<h4>frags</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.67">frags</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>servers</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.68">servers</a></pre>
+<h4>filter</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmplImpl.html#line.68">filter</a></pre>
 </li>
 </ul>
 <a name="catalogJanitorEnabled">
@@ -327,22 +327,22 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/Master
 <pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.69">catalogJanitorEnabled</a></pre>
 </li>
 </ul>
-<a name="deadServers">
+<a name="servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>deadServers</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.70">deadServers</a></pre>
+<h4>servers</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.70">servers</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="assignmentManager">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>filter</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmplImpl.html#line.71">filter</a></pre>
+<h4>assignmentManager</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.71">assignmentManager</a></pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
index 880b127..a891cba 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
@@ -279,76 +279,76 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.71">m_regionServer</a></pre>
 </li>
 </ul>
-<a name="m_bcv">
+<a name="m_filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcv</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.83">m_bcv</a></pre>
+<h4>m_filter</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.83">m_filter</a></pre>
 </li>
 </ul>
-<a name="m_bcv__IsNotDefault">
+<a name="m_filter__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcv__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.88">m_bcv__IsNotDefault</a></pre>
+<h4>m_filter__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.88">m_filter__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_filter">
+<a name="m_bcv">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_filter</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.100">m_filter</a></pre>
+<h4>m_bcv</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.100">m_bcv</a></pre>
 </li>
 </ul>
-<a name="m_filter__IsNotDefault">
+<a name="m_bcv__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_filter__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.105">m_filter__IsNotDefault</a></pre>
+<h4>m_bcv__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.105">m_bcv__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_bcn">
+<a name="m_format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcn</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.117">m_bcn</a></pre>
+<h4>m_format</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.117">m_format</a></pre>
 </li>
 </ul>
-<a name="m_bcn__IsNotDefault">
+<a name="m_format__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcn__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.122">m_bcn__IsNotDefault</a></pre>
+<h4>m_format__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.122">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_format">
+<a name="m_bcn">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.134">m_format</a></pre>
+<h4>m_bcn</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.134">m_bcn</a></pre>
 </li>
 </ul>
-<a name="m_format__IsNotDefault">
+<a name="m_bcn__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>m_format__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.139">m_format__IsNotDefault</a></pre>
+<h4>m_bcn__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.139">m_bcn__IsNotDefault</a></pre>
 </li>
 </ul>
 </li>
@@ -394,112 +394,112 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.67">getRegionServer</a>()</pre>
 </li>
 </ul>
-<a name="setBcv(java.lang.String)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcv</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.73">setBcv</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;bcv)</pre>
+<h4>setFilter</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.73">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
 </li>
 </ul>
-<a name="getBcv()">
+<a name="getFilter()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcv</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.79">getBcv</a>()</pre>
+<h4>getFilter</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.79">getFilter</a>()</pre>
 </li>
 </ul>
-<a name="getBcv__IsNotDefault()">
+<a name="getFilter__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcv__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.84">getBcv__IsNotDefault</a>()</pre>
+<h4>getFilter__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.84">getFilter__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setBcv(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.90">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
+<h4>setBcv</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.90">setBcv</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;bcv)</pre>
 </li>
 </ul>
-<a name="getFilter()">
+<a name="getBcv()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFilter</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.96">getFilter</a>()</pre>
+<h4>getBcv</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.96">getBcv</a>()</pre>
 </li>
 </ul>
-<a name="getFilter__IsNotDefault()">
+<a name="getBcv__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFilter__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.101">getFilter__IsNotDefault</a>()</pre>
+<h4>getBcv__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.101">getBcv__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setBcn(java.lang.String)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcn</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.107">setBcn</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;bcn)</pre>
+<h4>setFormat</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.107">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
 </li>
 </ul>
-<a name="getBcn()">
+<a name="getFormat()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcn</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.113">getBcn</a>()</pre>
+<h4>getFormat</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.113">getFormat</a>()</pre>
 </li>
 </ul>
-<a name="getBcn__IsNotDefault()">
+<a name="getFormat__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcn__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.118">getBcn__IsNotDefault</a>()</pre>
+<h4>getFormat__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.118">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setBcn(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.124">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
+<h4>setBcn</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.124">setBcn</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;bcn)</pre>
 </li>
 </ul>
-<a name="getFormat()">
+<a name="getBcn()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.130">getFormat</a>()</pre>
+<h4>getBcn</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.130">getBcn</a>()</pre>
 </li>
 </ul>
-<a name="getFormat__IsNotDefault()">
+<a name="getBcn__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getFormat__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.135">getFormat__IsNotDefault</a>()</pre>
+<h4>getBcn__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.135">getBcn__IsNotDefault</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
index c066f34..af2fcba 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
@@ -283,40 +283,40 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <!--   -->
 </a>
 <h3>Field Detail</h3>
-<a name="bcv">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcv</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.151">bcv</a></pre>
+<h4>filter</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.151">filter</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="bcv">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>filter</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.158">filter</a></pre>
+<h4>bcv</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.158">bcv</a></pre>
 </li>
 </ul>
-<a name="bcn">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcn</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.165">bcn</a></pre>
+<h4>format</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.165">format</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="bcn">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>format</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.172">format</a></pre>
+<h4>bcn</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.172">bcn</a></pre>
 </li>
 </ul>
 </li>
@@ -388,40 +388,40 @@ extends org.jamon.AbstractTemplateProxy</pre>
 </dl>
 </li>
 </ul>
-<a name="setBcv(java.lang.String)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcv</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.152">setBcv</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_bcv)</pre>
+<h4>setFilter</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.152">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setBcv(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.159">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
+<h4>setBcv</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.159">setBcv</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_bcv)</pre>
 </li>
 </ul>
-<a name="setBcn(java.lang.String)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcn</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.166">setBcn</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_bcn)</pre>
+<h4>setFormat</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.166">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setBcn(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.173">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
+<h4>setBcn</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.173">setBcn</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_bcn)</pre>
 </li>
 </ul>
 <a name="constructImpl(java.lang.Class)">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
index f32b631..b13aad9 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
@@ -224,40 +224,40 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html#line.28">regionServer</a></pre>
 </li>
 </ul>
-<a name="bcv">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcv</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.29">bcv</a></pre>
+<h4>filter</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.29">filter</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="bcv">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>filter</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.30">filter</a></pre>
+<h4>bcv</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.30">bcv</a></pre>
 </li>
 </ul>
-<a name="bcn">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcn</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.31">bcn</a></pre>
+<h4>format</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.31">format</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="bcn">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>format</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.32">format</a></pre>
+<h4>bcn</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.32">bcn</a></pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html
index 77d3eef..072ffdf 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html
@@ -104,7 +104,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.65">ServerMetricsTmpl.ImplData</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.68">ServerMetricsTmpl.ImplData</a>
 extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 </li>
 </ul>
@@ -125,6 +125,10 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#m_mServerWrap">m_mServerWrap</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#m_mWrap">m_mWrap</a></strong></code>&nbsp;</td>
 </tr>
@@ -161,9 +165,17 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#getMServerWrap()">getMServerWrap</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#getMWrap()">getMWrap</a></strong>()</code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#setMServerWrap(org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">setMServerWrap</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)</code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#setMWrap(org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">setMWrap</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)</code>&nbsp;</td>
@@ -193,10 +205,19 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <a name="m_mWrap">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>m_mWrap</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#line.78">m_mWrap</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#line.81">m_mWrap</a></pre>
+</li>
+</ul>
+<a name="m_mServerWrap">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>m_mServerWrap</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#line.92">m_mServerWrap</a></pre>
 </li>
 </ul>
 </li>
@@ -213,7 +234,7 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ServerMetricsTmpl.ImplData</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#line.65">ServerMetricsTmpl.ImplData</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#line.68">ServerMetricsTmpl.ImplData</a>()</pre>
 </li>
 </ul>
 </li>
@@ -230,16 +251,34 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>setMWrap</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#line.69">setMWrap</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#line.72">setMWrap</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)</pre>
 </li>
 </ul>
 <a name="getMWrap()">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>getMWrap</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#line.74">getMWrap</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#line.77">getMWrap</a>()</pre>
+</li>
+</ul>
+<a name="setMServerWrap(org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setMServerWrap</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#line.83">setMServerWrap</a>(<a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)</pre>
+</li>
+</ul>
+<a name="getMServerWrap()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getMServerWrap</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#line.88">getMServerWrap</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.Intf.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.Intf.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.Intf.html
index 7e39085..9a4cde7 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.Intf.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.Intf.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.58">ServerMetricsTmpl.Intf</a>
+<pre>public static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.61">ServerMetricsTmpl.Intf</a>
 extends org.jamon.AbstractTemplateProxy.Intf</pre>
 </li>
 </ul>
@@ -144,7 +144,7 @@ extends org.jamon.AbstractTemplateProxy.Intf</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>renderNoFlush</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.Intf.html#line.62">renderNoFlush</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter)
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.Intf.html#line.65">renderNoFlush</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter)
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html
index 40f0bab..6c0a71d 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html
@@ -100,7 +100,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.39">ServerMetricsTmpl</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.42">ServerMetricsTmpl</a>
 extends org.jamon.AbstractTemplateProxy</pre>
 </li>
 </ul>
@@ -195,17 +195,20 @@ extends org.jamon.AbstractTemplateProxy</pre>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>org.jamon.Renderer</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#makeRenderer(org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">makeRenderer</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#makeRenderer(org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper,%20org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">makeRenderer</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap,
+                        <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#render(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">render</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
-            <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#render(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper,%20org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">render</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+            <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap,
+            <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#renderNoFlush(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">renderNoFlush</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
-                          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#renderNoFlush(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper,%20org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">renderNoFlush</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+                          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap,
+                          <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -242,7 +245,7 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>ServerMetricsTmpl</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.43">ServerMetricsTmpl</a>(org.jamon.TemplateManager&nbsp;p_manager)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.46">ServerMetricsTmpl</a>(org.jamon.TemplateManager&nbsp;p_manager)</pre>
 </li>
 </ul>
 <a name="ServerMetricsTmpl(java.lang.String)">
@@ -251,7 +254,7 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>ServerMetricsTmpl</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.48">ServerMetricsTmpl</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_path)</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.51">ServerMetricsTmpl</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_path)</pre>
 </li>
 </ul>
 <a name="ServerMetricsTmpl()">
@@ -260,7 +263,7 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ServerMetricsTmpl</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.53">ServerMetricsTmpl</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.56">ServerMetricsTmpl</a>()</pre>
 </li>
 </ul>
 </li>
@@ -277,7 +280,7 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>makeImplData</h4>
-<pre>protected&nbsp;org.jamon.AbstractTemplateProxy.ImplData&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.81">makeImplData</a>()</pre>
+<pre>protected&nbsp;org.jamon.AbstractTemplateProxy.ImplData&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.95">makeImplData</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>makeImplData</code>&nbsp;in class&nbsp;<code>org.jamon.AbstractTemplateProxy</code></dd>
@@ -290,7 +293,7 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getImplData</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl.ImplData</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.85">getImplData</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl.ImplData</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.99">getImplData</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code>getImplData</code>&nbsp;in class&nbsp;<code>org.jamon.AbstractTemplateProxy</code></dd>
@@ -303,7 +306,7 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>constructImpl</h4>
-<pre>public&nbsp;org.jamon.AbstractTemplateImpl&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.92">constructImpl</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends org.jamon.AbstractTemplateImpl&gt;&nbsp;p_class)</pre>
+<pre>public&nbsp;org.jamon.AbstractTemplateImpl&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.106">constructImpl</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends org.jamon.AbstractTemplateImpl&gt;&nbsp;p_class)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>constructImpl</code>&nbsp;in class&nbsp;<code>org.jamon.AbstractTemplateProxy</code></dd>
@@ -316,43 +319,46 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>constructImpl</h4>
-<pre>protected&nbsp;org.jamon.AbstractTemplateImpl&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.110">constructImpl</a>()</pre>
+<pre>protected&nbsp;org.jamon.AbstractTemplateImpl&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.124">constructImpl</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>constructImpl</code>&nbsp;in class&nbsp;<code>org.jamon.AbstractTemplateProxy</code></dd>
 </dl>
 </li>
 </ul>
-<a name="makeRenderer(org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">
+<a name="makeRenderer(org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper, org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>makeRenderer</h4>
-<pre>public&nbsp;org.jamon.Renderer&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.113">makeRenderer</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)</pre>
+<pre>public&nbsp;org.jamon.Renderer&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.127">makeRenderer</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap,
+                              <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)</pre>
 </li>
 </ul>
-<a name="render(java.io.Writer, org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">
+<a name="render(java.io.Writer, org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper, org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>render</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.125">render</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
-          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.139">render</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap,
+          <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)
             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
 </li>
 </ul>
-<a name="renderNoFlush(java.io.Writer, org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">
+<a name="renderNoFlush(java.io.Writer, org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper, org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>renderNoFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.131">renderNoFlush</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
-                 <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#line.145">renderNoFlush</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</a>&nbsp;jamonWriter,
+                 <a href="../../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a>&nbsp;mWrap,
+                 <a href="../../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapper</a>&nbsp;mServerWrap)
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>


[12/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html
index f3aed1b..0597160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html
@@ -1513,810 +1513,816 @@
 <span class="sourceLineNo">1505</span>      if (maxSeqIdInStores == null || maxSeqIdInStores.isEmpty()) {<a name="line.1505"></a>
 <span class="sourceLineNo">1506</span>        return;<a name="line.1506"></a>
 <span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        if (!CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          // or the master was crashed before and we can not get the information.<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>          if (maxSeqId != null &amp;&amp; maxSeqId.longValue() &gt;= logEntry.getKey().getLogSeqNum()) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>            skippedCells.add(cell);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>          }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      }<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (!skippedCells.isEmpty()) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        logEntry.getEdit().getCells().removeAll(skippedCells);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1508</span>      // Create the array list for the cells that aren't filtered.<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // We make the assumption that most cells will be kept.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      ArrayList&lt;Cell&gt; keptCells = new ArrayList&lt;Cell&gt;(logEntry.getEdit().getCells().size());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>          keptCells.add(cell);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        } else {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          // or the master was crashed before and we can not get the information.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>          if (maxSeqId == null || maxSeqId.longValue() &lt; logEntry.getKey().getLogSeqNum()) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>            keptCells.add(cell);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      }<a name="line.1523"></a>
 <span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    @Override<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (entries.isEmpty()) {<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        return;<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      WriterAndPath wap = null;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      long startTime = System.nanoTime();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      try {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        int editsCount = 0;<a name="line.1537"></a>
+<span class="sourceLineNo">1525</span>      // Anything in the keptCells array list is still live.<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // So rather than removing the cells from the array list<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      // which would be an O(n^2) operation, we just replace the list<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      logEntry.getEdit().setCells(keptCells);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    @Override<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      if (entries.isEmpty()) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>        return;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      }<a name="line.1537"></a>
 <span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        for (Entry logEntry : entries) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          if (wap == null) {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>            wap = getWriterAndPath(logEntry);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>            if (wap == null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>              if (LOG.isDebugEnabled()) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>              }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>              return;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          filterCellByStore(logEntry);<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            wap.w.append(logEntry);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            editsCount++;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          } else {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>            wap.incrementSkippedEdits(1);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>          }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        // Pass along summary statistics<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        wap.incrementEdits(editsCount);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      } catch (IOException e) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          e = e instanceof RemoteException ?<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>        throw e;<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    }<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span><a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    /**<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>     */<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    @Override<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      synchronized (writers) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>        }<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      return ret;<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span><a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    @Override<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    public int getNumberOfRecoveredRegions() {<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      return writers.size();<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>  }<a name="line.1587"></a>
+<span class="sourceLineNo">1539</span>      WriterAndPath wap = null;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      long startTime = System.nanoTime();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      try {<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        int editsCount = 0;<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span><a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>        for (Entry logEntry : entries) {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>          if (wap == null) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>            wap = getWriterAndPath(logEntry);<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>            if (wap == null) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>              if (LOG.isDebugEnabled()) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>              }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>              return;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>            }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          filterCellByStore(logEntry);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            wap.w.append(logEntry);<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            editsCount++;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          } else {<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>            wap.incrementSkippedEdits(1);<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>          }<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        // Pass along summary statistics<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        wap.incrementEdits(editsCount);<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      } catch (IOException e) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>          e = e instanceof RemoteException ?<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>        throw e;<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    }<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span><a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>    /**<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>     */<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    @Override<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      synchronized (writers) {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      return ret;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    }<a name="line.1587"></a>
 <span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  /**<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>   */<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  public abstract static class SinkWriter {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    /* Count of edits written to this path */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    long editsWritten = 0;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    /* Count of edits skipped to this path */<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    long editsSkipped = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    /* Number of nanos spent writing to this log */<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    long nanosSpent = 0;<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    void incrementEdits(int edits) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      editsWritten += edits;<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    void incrementSkippedEdits(int skipped) {<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      editsSkipped += skipped;<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span><a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    void incrementNanoTime(long nanos) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      nanosSpent += nanos;<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    }<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  }<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span><a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>  /**<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * data written to this output.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   */<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    final Path p;<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    final Writer w;<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      this.p = p;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      this.w = w;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>  }<a name="line.1625"></a>
+<span class="sourceLineNo">1589</span>    @Override<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    public int getNumberOfRecoveredRegions() {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      return writers.size();<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  }<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span><a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>  /**<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>   */<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>  public abstract static class SinkWriter {<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    /* Count of edits written to this path */<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    long editsWritten = 0;<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    /* Count of edits skipped to this path */<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    long editsSkipped = 0;<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    /* Number of nanos spent writing to this log */<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    long nanosSpent = 0;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span><a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    void incrementEdits(int edits) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      editsWritten += edits;<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>    void incrementSkippedEdits(int skipped) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      editsSkipped += skipped;<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span><a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    void incrementNanoTime(long nanos) {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      nanosSpent += nanos;<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span><a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>  /**<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>   * data written to this output.<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>   */<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    final Path p;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    final Writer w;<a name="line.1625"></a>
 <span class="sourceLineNo">1626</span><a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>  /**<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>   */<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    private static final String KEY_DELIMITER = "#";<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    private long waitRegionOnlineTimeOut;<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    // online encoded region name -&gt; region location map<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span><a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>    /**<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>     * Map key -&gt; value layout<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>     */<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span><a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        int numWriters) {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      super(controller, entryBuffers, numWriters);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      this.waitRegionOnlineTimeOut =<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>        entryBuffers, numWriters);<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span><a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>    @Override<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      if (entries.isEmpty()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        return;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span><a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      // check if current region in a disabling or disabled table<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        // need fall back to old way<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>        // store regions we have recovered so far<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        return;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      }<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span><a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      // group entries by region servers<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      groupEditsByServer(entries);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span><a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      // process workitems<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      String maxLocKey = null;<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      int maxSize = 0;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>            maxSize = curQueue.size();<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>            maxQueue = curQueue;<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>            maxLocKey = entry.getKey();<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>          }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        if (maxSize &lt; minBatchSize<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>          // buffer more to process<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>          return;<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        } else if (maxSize &gt; 0) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>        }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span><a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>      if (maxSize &gt; 0) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>        recoveredRegions.add(encodedRegionName);<a name="line.1721"></a>
+<span class="sourceLineNo">1627</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      this.p = p;<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      this.w = w;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>    }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>  }<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span><a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>  /**<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>   */<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    private static final String KEY_DELIMITER = "#";<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>    private long waitRegionOnlineTimeOut;<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    // online encoded region name -&gt; region location map<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span><a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>    /**<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>     * Map key -&gt; value layout<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>     */<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span><a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span><a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>        int numWriters) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      super(controller, entryBuffers, numWriters);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      this.waitRegionOnlineTimeOut =<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>        entryBuffers, numWriters);<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    @Override<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (entries.isEmpty()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        return;<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      }<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span><a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      // check if current region in a disabling or disabled table<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // need fall back to old way<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>        // store regions we have recovered so far<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        return;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span><a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      // group entries by region servers<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      groupEditsByServer(entries);<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span><a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      // process workitems<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      String maxLocKey = null;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>      int maxSize = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>            maxSize = curQueue.size();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>            maxQueue = curQueue;<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>            maxLocKey = entry.getKey();<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>          }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>        }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        if (maxSize &lt; minBatchSize<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>          // buffer more to process<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>          return;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        } else if (maxSize &gt; 0) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span><a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      if (maxSize &gt; 0) {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
 <span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
 <span class="sourceLineNo">1724</span><a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    /**<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>     * Helper function to group WALEntries to individual region servers<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>     * @throws IOException<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>     */<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      for (Entry entry : entries) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>        WALEdit edit = entry.getEdit();<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        TableName table = entry.getKey().getTablename();<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>        // clear scopes which isn't needed for recovery<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>        entry.getKey().setScopes(null);<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>        // skip edits of non-existent tables<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>          this.skippedEdits.incrementAndGet();<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>          continue;<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        }<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span><a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        boolean needSkip = false;<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        HRegionLocation loc = null;<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        String locKey = null;<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span><a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>        for (Cell cell : cells) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>          boolean isCompactionEntry = false;<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>              try {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>                  .toByteArray());<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>                row = regionName[1]; // startKey of the region<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>                isCompactionEntry = true;<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>              } catch (Exception ex) {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>                skippedCells.add(cell);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>                continue;<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>              }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>            } else {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>              skippedCells.add(cell);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>              continue;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>            }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>          try {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>            loc =<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>                  encodeRegionNameStr);<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            // skip replaying the compaction if the region is gone<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>                  + encodeRegionNameStr);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>              needSkip = true;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>            }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>          } catch (TableNotFoundException ex) {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>            // table has been deleted so skip edits of the table<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>                + encodeRegionNameStr);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>            if (nonExistentTables == null) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>            }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            nonExistentTables.add(table);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>            this.skippedEdits.incrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>            needSkip = true;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>            break;<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          }<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span><a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          cachedLastFlushedSequenceId =<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          if (cachedLastFlushedSequenceId != null<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            // skip the whole WAL entry<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            this.skippedEdits.incrementAndGet();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            needSkip = true;<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            break;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } else {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            if (maxStoreSequenceIds == null) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>              maxStoreSequenceIds =<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            }<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            if (maxStoreSequenceIds != null) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>                skippedCells.add(cell);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                continue;<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>              }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>            }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>          }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        }<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>        // skip the edit<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        if (loc == null || needSkip) continue;<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>        if (!skippedCells.isEmpty()) {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          cells.removeAll(skippedCells);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        synchronized (serverToBufferQueueMap) {<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>          if (queue == null) {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>            queue =<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>          }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>        }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        // store regions we have recovered so far<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      }<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    }<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span><a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    /**<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>     * destination region is online for replay.<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>     * @throws IOException<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>     */<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>      // fetch location from cache<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      if(loc != null) return loc;<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      if (loc == null) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>            + " of table:" + table);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      // check if current row moves to a different region due to region merge/split<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        // originalEncodedRegionName should have already flushed<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      }<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span><a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      Long lastFlushedSequenceId = -1l;<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      if (!isRecovering.get()) {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>        // been moved to somewhere before hosting RS fails<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>            + " because it's not in recovering.");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      } else {<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>        Long cachedLastFlushedSequenceId =<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span><a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        // update the value for the region<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>        RegionStoreSequenceIds ids =<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>              loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        if (ids != null) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>          }<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        }<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        if (cachedLastFlushedSequenceId == null<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>            || lastFlushedSequenceId &gt; cachedLastFlushedSequenceId) {<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>          lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), lastFlushedSequenceId);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        }<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      }<a name="line.1903"></a>
+<span class="sourceLineNo">1725</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>        recoveredRegions.add(encodedRegionName);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    }<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span><a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>    /**<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>     * Helper function to group WALEntries to individual region servers<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>     * @throws IOException<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>     */<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      for (Entry entry : entries) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        WALEdit edit = entry.getEdit();<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>        TableName table = entry.getKey().getTablename();<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        // clear scopes which isn't needed for recovery<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        entry.getKey().setScopes(null);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // skip edits of non-existent tables<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>          this.skippedEdits.incrementAndGet();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>          continue;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        boolean needSkip = false;<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        HRegionLocation loc = null;<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        String locKey = null;<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span><a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        for (Cell cell : cells) {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>          boolean isCompactionEntry = false;<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>              try {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>                  .toByteArray());<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>                row = regionName[1]; // startKey of the region<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>                isCompactionEntry = true;<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>              } catch (Exception ex) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>                skippedCells.add(cell);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>                continue;<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>              }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            } else {<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>              skippedCells.add(cell);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>              continue;<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>            }<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          }<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span><a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          try {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>            loc =<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>                  encodeRegionNameStr);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>            // skip replaying the compaction if the region is gone<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>                  + encodeRegionNameStr);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>              needSkip = true;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>            }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>          } catch (TableNotFoundException ex) {<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>            // table has been deleted so skip edits of the table<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>                + encodeRegionNameStr);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>            if (nonExistentTables == null) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>            }<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>            nonExistentTables.add(table);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>            this.skippedEdits.incrementAndGet();<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>            needSkip = true;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>            break;<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          }<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span><a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>          cachedLastFlushedSequenceId =<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>          if (cachedLastFlushedSequenceId != null<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            // skip the whole WAL entry<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>            this.skippedEdits.incrementAndGet();<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>            needSkip = true;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            break;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>          } else {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>            if (maxStoreSequenceIds == null) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>              maxStoreSequenceIds =<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>            }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            if (maxStoreSequenceIds != null) {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>                skippedCells.add(cell);<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                continue;<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              }<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>            }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>          }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        }<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>        // skip the edit<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        if (loc == null || needSkip) continue;<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span><a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (!skippedCells.isEmpty()) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          cells.removeAll(skippedCells);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>        synchronized (serverToBufferQueueMap) {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>          if (queue == null) {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            queue =<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>        }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>        // store regions we have recovered so far<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span><a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    /**<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>     * destination region is online for replay.<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>     * @throws IOException<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>     */<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      // fetch location from cache<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      if(loc != null) return loc;<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      if (loc == null) {<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>            + " of table:" + table);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      }<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      // check if current row moves to a different region due to region merge/split<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        // originalEncodedRegionName should have already flushed<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      Long lastFlushedSequenceId = -1l;<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      if (!isRecovering.get()) {<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>        // been moved to somewhere before hosting RS fails<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>            + " because it's not in recovering.");<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      } else {<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        Long cachedLastFlushedSequenceId =<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        // update the value for the region<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>        RegionStoreSequenceIds ids =<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>              loc.getRegionInfo().getEncodedName());<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>        if (ids != null) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>          }<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        }<a name="line.1903"></a>
 <span class="sourceLineNo">1904</span><a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      onlineRegions.put(loc.getRegionInfo().getEncodedName(), loc);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      return loc;<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span><a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>    private void processWorkItems(String key, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; actions)<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>        throws IOException {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>      RegionServerWriter rsw = null;<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span><a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long startTime = System.nanoTime();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      try {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        rsw = getRegionServerWriter(key);<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>        rsw.sink.replayEntries(actions);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>        // Pass along summary statistics<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        rsw.incrementEdits(actions.size());<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>        rsw.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      } catch (IOException e) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        throw e;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    /**<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>     * Wait until region is online on the destination region server<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>     * @param loc<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>     * @param row<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>     * @param timeout How long to wait<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>     * @param isRecovering Recovering state of the region interested on destination region server.<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>     * @return True when region is online on the destination region server<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>     * @throws InterruptedException<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>     */<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    private HRegionLocation waitUntilRegionOnline(HRegionLocation loc, byte[] row,<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>        final long timeout, AtomicBoolean isRecovering)<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>        throws IOException {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      final long endTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      final long pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      boolean reloadLocation = false;<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      TableName tableName = loc.getRegionInfo().getTable();<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      int tries = 0;<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      Throwable cause = null;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>      while (endTime &gt; EnvironmentEdgeManager.currentTime()) {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>        try {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          // Try and get regioninfo from the hosting server.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          HConnection hconn = getConnectionByTableName(tableName);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          if(reloadLocation) {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            loc = hconn.getRegionLocation(tableName, row, true);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          }<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          BlockingInterface remoteSvr = hconn.getAdmin(loc.getServerName());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          HRegionInfo region = loc.getRegionInfo();<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>          try {<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>            GetRegionInfoRequest request =<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>                RequestConverter.buildGetRegionInfoRequest(region.getRegionName());<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            GetRegionInfoResponse response = remoteSvr.getRegionInfo(null, request);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>            if (HRegionInfo.convert(response.getRegionInfo()) != null) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>              isRecovering.set((response.hasIsRecovering()) ? response.getIsRecovering() : true);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>              return loc;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            }<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          } catch (ServiceException se) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>          }<a 

<TRUNCATED>

[23/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
index 0278bf1..5ca346b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
@@ -33,10 +33,10 @@
 <span class="sourceLineNo">025</span>  requiredArguments = {<a name="line.25"></a>
 <span class="sourceLineNo">026</span>    @org.jamon.annotations.Argument(name = "regionServer", type = "HRegionServer")},<a name="line.26"></a>
 <span class="sourceLineNo">027</span>  optionalArguments = {<a name="line.27"></a>
-<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.29"></a>
-<span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String"),<a name="line.30"></a>
-<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.28"></a>
+<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.30"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -77,74 +77,74 @@
 <span class="sourceLineNo">069</span>      return m_regionServer;<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    }<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    private HRegionServer m_regionServer;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    // 24, 1<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    public void setBcv(String bcv)<a name="line.73"></a>
+<span class="sourceLineNo">072</span>    // 21, 1<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    public void setFilter(String filter)<a name="line.73"></a>
 <span class="sourceLineNo">074</span>    {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      // 24, 1<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      m_bcv = bcv;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      m_bcv__IsNotDefault = true;<a name="line.77"></a>
+<span class="sourceLineNo">075</span>      // 21, 1<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      m_filter = filter;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      m_filter__IsNotDefault = true;<a name="line.77"></a>
 <span class="sourceLineNo">078</span>    }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public String getBcv()<a name="line.79"></a>
+<span class="sourceLineNo">079</span>    public String getFilter()<a name="line.79"></a>
 <span class="sourceLineNo">080</span>    {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      return m_bcv;<a name="line.81"></a>
+<span class="sourceLineNo">081</span>      return m_filter;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>    }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    private String m_bcv;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public boolean getBcv__IsNotDefault()<a name="line.84"></a>
+<span class="sourceLineNo">083</span>    private String m_filter;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public boolean getFilter__IsNotDefault()<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      return m_bcv__IsNotDefault;<a name="line.86"></a>
+<span class="sourceLineNo">086</span>      return m_filter__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    private boolean m_bcv__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 21, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setFilter(String filter)<a name="line.90"></a>
+<span class="sourceLineNo">088</span>    private boolean m_filter__IsNotDefault;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    // 24, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setBcv(String bcv)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 21, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_filter = filter;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_filter__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 24, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_bcv = bcv;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_bcv__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getFilter()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getBcv()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_filter;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_bcv;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_filter;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getFilter__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_bcv;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getBcv__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_filter__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_bcv__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_filter__IsNotDefault;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    // 23, 1<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void setBcn(String bcn)<a name="line.107"></a>
+<span class="sourceLineNo">105</span>    private boolean m_bcv__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    // 22, 1<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    public void setFormat(String format)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      // 23, 1<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      m_bcn = bcn;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      m_bcn__IsNotDefault = true;<a name="line.111"></a>
+<span class="sourceLineNo">109</span>      // 22, 1<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      m_format = format;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      m_format__IsNotDefault = true;<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    public String getBcn()<a name="line.113"></a>
+<span class="sourceLineNo">113</span>    public String getFormat()<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      return m_bcn;<a name="line.115"></a>
+<span class="sourceLineNo">115</span>      return m_format;<a name="line.115"></a>
 <span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    private String m_bcn;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public boolean getBcn__IsNotDefault()<a name="line.118"></a>
+<span class="sourceLineNo">117</span>    private String m_format;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    public boolean getFormat__IsNotDefault()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_bcn__IsNotDefault;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_format__IsNotDefault;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    private boolean m_bcn__IsNotDefault;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // 22, 1<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void setFormat(String format)<a name="line.124"></a>
+<span class="sourceLineNo">122</span>    private boolean m_format__IsNotDefault;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    // 23, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setBcn(String bcn)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 22, 1<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      m_format = format;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      m_format__IsNotDefault = true;<a name="line.128"></a>
+<span class="sourceLineNo">126</span>      // 23, 1<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      m_bcn = bcn;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      m_bcn__IsNotDefault = true;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getFormat()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getBcn()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_format;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_bcn;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    private String m_format;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getFormat__IsNotDefault()<a name="line.135"></a>
+<span class="sourceLineNo">134</span>    private String m_bcn;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    public boolean getBcn__IsNotDefault()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_format__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_bcn__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_format__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_bcn__IsNotDefault;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
 <span class="sourceLineNo">142</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.142"></a>
@@ -156,31 +156,31 @@
 <span class="sourceLineNo">148</span>    return (ImplData) super.getImplData();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>  }<a name="line.149"></a>
 <span class="sourceLineNo">150</span>  <a name="line.150"></a>
-<span class="sourceLineNo">151</span>  protected String bcv;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.152"></a>
+<span class="sourceLineNo">151</span>  protected String filter;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.152"></a>
 <span class="sourceLineNo">153</span>  {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    (getImplData()).setBcv(p_bcv);<a name="line.154"></a>
+<span class="sourceLineNo">154</span>    (getImplData()).setFilter(p_filter);<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    return this;<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>  protected String filter;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String bcv;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setFilter(p_filter);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setBcv(p_bcv);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<a name="line.162"></a>
 <span class="sourceLineNo">163</span>  }<a name="line.163"></a>
 <span class="sourceLineNo">164</span>  <a name="line.164"></a>
-<span class="sourceLineNo">165</span>  protected String bcn;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.166"></a>
+<span class="sourceLineNo">165</span>  protected String format;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.166"></a>
 <span class="sourceLineNo">167</span>  {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    (getImplData()).setBcn(p_bcn);<a name="line.168"></a>
+<span class="sourceLineNo">168</span>    (getImplData()).setFormat(p_format);<a name="line.168"></a>
 <span class="sourceLineNo">169</span>    return this;<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>  protected String format;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.173"></a>
+<span class="sourceLineNo">172</span>  protected String bcn;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setFormat(p_format);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setBcn(p_bcn);<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    return this;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>  <a name="line.178"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
index 0278bf1..5ca346b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
@@ -33,10 +33,10 @@
 <span class="sourceLineNo">025</span>  requiredArguments = {<a name="line.25"></a>
 <span class="sourceLineNo">026</span>    @org.jamon.annotations.Argument(name = "regionServer", type = "HRegionServer")},<a name="line.26"></a>
 <span class="sourceLineNo">027</span>  optionalArguments = {<a name="line.27"></a>
-<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.29"></a>
-<span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String"),<a name="line.30"></a>
-<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.28"></a>
+<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.30"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -77,74 +77,74 @@
 <span class="sourceLineNo">069</span>      return m_regionServer;<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    }<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    private HRegionServer m_regionServer;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    // 24, 1<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    public void setBcv(String bcv)<a name="line.73"></a>
+<span class="sourceLineNo">072</span>    // 21, 1<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    public void setFilter(String filter)<a name="line.73"></a>
 <span class="sourceLineNo">074</span>    {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      // 24, 1<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      m_bcv = bcv;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      m_bcv__IsNotDefault = true;<a name="line.77"></a>
+<span class="sourceLineNo">075</span>      // 21, 1<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      m_filter = filter;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      m_filter__IsNotDefault = true;<a name="line.77"></a>
 <span class="sourceLineNo">078</span>    }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public String getBcv()<a name="line.79"></a>
+<span class="sourceLineNo">079</span>    public String getFilter()<a name="line.79"></a>
 <span class="sourceLineNo">080</span>    {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      return m_bcv;<a name="line.81"></a>
+<span class="sourceLineNo">081</span>      return m_filter;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>    }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    private String m_bcv;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public boolean getBcv__IsNotDefault()<a name="line.84"></a>
+<span class="sourceLineNo">083</span>    private String m_filter;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public boolean getFilter__IsNotDefault()<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      return m_bcv__IsNotDefault;<a name="line.86"></a>
+<span class="sourceLineNo">086</span>      return m_filter__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    private boolean m_bcv__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 21, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setFilter(String filter)<a name="line.90"></a>
+<span class="sourceLineNo">088</span>    private boolean m_filter__IsNotDefault;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    // 24, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setBcv(String bcv)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 21, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_filter = filter;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_filter__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 24, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_bcv = bcv;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_bcv__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getFilter()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getBcv()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_filter;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_bcv;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_filter;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getFilter__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_bcv;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getBcv__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_filter__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_bcv__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_filter__IsNotDefault;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    // 23, 1<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void setBcn(String bcn)<a name="line.107"></a>
+<span class="sourceLineNo">105</span>    private boolean m_bcv__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    // 22, 1<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    public void setFormat(String format)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      // 23, 1<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      m_bcn = bcn;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      m_bcn__IsNotDefault = true;<a name="line.111"></a>
+<span class="sourceLineNo">109</span>      // 22, 1<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      m_format = format;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      m_format__IsNotDefault = true;<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    public String getBcn()<a name="line.113"></a>
+<span class="sourceLineNo">113</span>    public String getFormat()<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      return m_bcn;<a name="line.115"></a>
+<span class="sourceLineNo">115</span>      return m_format;<a name="line.115"></a>
 <span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    private String m_bcn;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public boolean getBcn__IsNotDefault()<a name="line.118"></a>
+<span class="sourceLineNo">117</span>    private String m_format;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    public boolean getFormat__IsNotDefault()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_bcn__IsNotDefault;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_format__IsNotDefault;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    private boolean m_bcn__IsNotDefault;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // 22, 1<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void setFormat(String format)<a name="line.124"></a>
+<span class="sourceLineNo">122</span>    private boolean m_format__IsNotDefault;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    // 23, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setBcn(String bcn)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 22, 1<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      m_format = format;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      m_format__IsNotDefault = true;<a name="line.128"></a>
+<span class="sourceLineNo">126</span>      // 23, 1<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      m_bcn = bcn;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      m_bcn__IsNotDefault = true;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getFormat()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getBcn()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_format;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_bcn;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    private String m_format;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getFormat__IsNotDefault()<a name="line.135"></a>
+<span class="sourceLineNo">134</span>    private String m_bcn;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    public boolean getBcn__IsNotDefault()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_format__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_bcn__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_format__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_bcn__IsNotDefault;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
 <span class="sourceLineNo">142</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.142"></a>
@@ -156,31 +156,31 @@
 <span class="sourceLineNo">148</span>    return (ImplData) super.getImplData();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>  }<a name="line.149"></a>
 <span class="sourceLineNo">150</span>  <a name="line.150"></a>
-<span class="sourceLineNo">151</span>  protected String bcv;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.152"></a>
+<span class="sourceLineNo">151</span>  protected String filter;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.152"></a>
 <span class="sourceLineNo">153</span>  {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    (getImplData()).setBcv(p_bcv);<a name="line.154"></a>
+<span class="sourceLineNo">154</span>    (getImplData()).setFilter(p_filter);<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    return this;<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>  protected String filter;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String bcv;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setFilter(p_filter);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setBcv(p_bcv);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<a name="line.162"></a>
 <span class="sourceLineNo">163</span>  }<a name="line.163"></a>
 <span class="sourceLineNo">164</span>  <a name="line.164"></a>
-<span class="sourceLineNo">165</span>  protected String bcn;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.166"></a>
+<span class="sourceLineNo">165</span>  protected String format;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.166"></a>
 <span class="sourceLineNo">167</span>  {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    (getImplData()).setBcn(p_bcn);<a name="line.168"></a>
+<span class="sourceLineNo">168</span>    (getImplData()).setFormat(p_format);<a name="line.168"></a>
 <span class="sourceLineNo">169</span>    return this;<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>  protected String format;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.173"></a>
+<span class="sourceLineNo">172</span>  protected String bcn;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setFormat(p_format);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setBcn(p_bcn);<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    return this;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>  <a name="line.178"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
index 3b4e3df..8d3af77 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
@@ -34,27 +34,27 @@
 <span class="sourceLineNo">026</span><a name="line.26"></a>
 <span class="sourceLineNo">027</span>{<a name="line.27"></a>
 <span class="sourceLineNo">028</span>  private final HRegionServer regionServer;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>  private final String bcv;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>  private final String filter;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>  private final String bcn;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>  private final String format;<a name="line.32"></a>
+<span class="sourceLineNo">029</span>  private final String filter;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>  private final String bcv;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>  private final String format;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>  private final String bcn;<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  protected static org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl.ImplData p_implData)<a name="line.33"></a>
 <span class="sourceLineNo">034</span>  {<a name="line.34"></a>
-<span class="sourceLineNo">035</span>    if(! p_implData.getBcv__IsNotDefault())<a name="line.35"></a>
+<span class="sourceLineNo">035</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.35"></a>
 <span class="sourceLineNo">036</span>    {<a name="line.36"></a>
-<span class="sourceLineNo">037</span>      p_implData.setBcv("");<a name="line.37"></a>
+<span class="sourceLineNo">037</span>      p_implData.setFilter("general");<a name="line.37"></a>
 <span class="sourceLineNo">038</span>    }<a name="line.38"></a>
-<span class="sourceLineNo">039</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.39"></a>
+<span class="sourceLineNo">039</span>    if(! p_implData.getBcv__IsNotDefault())<a name="line.39"></a>
 <span class="sourceLineNo">040</span>    {<a name="line.40"></a>
-<span class="sourceLineNo">041</span>      p_implData.setFilter("general");<a name="line.41"></a>
+<span class="sourceLineNo">041</span>      p_implData.setBcv("");<a name="line.41"></a>
 <span class="sourceLineNo">042</span>    }<a name="line.42"></a>
-<span class="sourceLineNo">043</span>    if(! p_implData.getBcn__IsNotDefault())<a name="line.43"></a>
+<span class="sourceLineNo">043</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.43"></a>
 <span class="sourceLineNo">044</span>    {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>      p_implData.setBcn("");<a name="line.45"></a>
+<span class="sourceLineNo">045</span>      p_implData.setFormat("html");<a name="line.45"></a>
 <span class="sourceLineNo">046</span>    }<a name="line.46"></a>
-<span class="sourceLineNo">047</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.47"></a>
+<span class="sourceLineNo">047</span>    if(! p_implData.getBcn__IsNotDefault())<a name="line.47"></a>
 <span class="sourceLineNo">048</span>    {<a name="line.48"></a>
-<span class="sourceLineNo">049</span>      p_implData.setFormat("html");<a name="line.49"></a>
+<span class="sourceLineNo">049</span>      p_implData.setBcn("");<a name="line.49"></a>
 <span class="sourceLineNo">050</span>    }<a name="line.50"></a>
 <span class="sourceLineNo">051</span>    return p_implData;<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  }<a name="line.52"></a>
@@ -62,10 +62,10 @@
 <span class="sourceLineNo">054</span>  {<a name="line.54"></a>
 <span class="sourceLineNo">055</span>    super(p_templateManager, __jamon_setOptionalArguments(p_implData));<a name="line.55"></a>
 <span class="sourceLineNo">056</span>    regionServer = p_implData.getRegionServer();<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    bcv = p_implData.getBcv();<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    filter = p_implData.getFilter();<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    bcn = p_implData.getBcn();<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    format = p_implData.getFormat();<a name="line.60"></a>
+<span class="sourceLineNo">057</span>    filter = p_implData.getFilter();<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    bcv = p_implData.getBcv();<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    format = p_implData.getFormat();<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    bcn = p_implData.getBcn();<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  }<a name="line.61"></a>
 <span class="sourceLineNo">062</span>  <a name="line.62"></a>
 <span class="sourceLineNo">063</span>  @Override public void renderNoFlush(final java.io.Writer jamonWriter)<a name="line.63"></a>
@@ -94,8 +94,8 @@
 <span class="sourceLineNo">086</span>      // 41, 3<a name="line.86"></a>
 <span class="sourceLineNo">087</span>      {<a name="line.87"></a>
 <span class="sourceLineNo">088</span>        org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl __jamon__var_1 = new org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl(this.getTemplateManager());<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        __jamon__var_1.setFilter(filter);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        __jamon__var_1.setFormat("json" );<a name="line.90"></a>
+<span class="sourceLineNo">089</span>        __jamon__var_1.setFormat("json" );<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        __jamon__var_1.setFilter(filter);<a name="line.90"></a>
 <span class="sourceLineNo">091</span>        __jamon__var_1.renderNoFlush(jamonWriter);<a name="line.91"></a>
 <span class="sourceLineNo">092</span>      }<a name="line.92"></a>
 <span class="sourceLineNo">093</span>      // 41, 68<a name="line.93"></a>
@@ -136,124 +136,124 @@
 <span class="sourceLineNo">128</span>    // 107, 5<a name="line.128"></a>
 <span class="sourceLineNo">129</span>    {<a name="line.129"></a>
 <span class="sourceLineNo">130</span>      org.apache.hadoop.hbase.tmpl.regionserver.ServerMetricsTmpl __jamon__var_2 = new org.apache.hadoop.hbase.tmpl.regionserver.ServerMetricsTmpl(this.getTemplateManager());<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      __jamon__var_2.renderNoFlush(jamonWriter, regionServer.getRegionServerMetrics().getRegionServerWrapper());<a name="line.131"></a>
+<span class="sourceLineNo">131</span>      __jamon__var_2.renderNoFlush(jamonWriter, regionServer.getRegionServerMetrics().getRegionServerWrapper(), regionServer.getRpcServer().getMetrics().getHBaseServerWrapper());<a name="line.131"></a>
 <span class="sourceLineNo">132</span>    }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    // 107, 101<a name="line.133"></a>
+<span class="sourceLineNo">133</span>    // 108, 89<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    jamonWriter.write("\n    &lt;/section&gt;\n\n    &lt;section&gt;\n    ");<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    // 111, 5<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    // 112, 5<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
 <span class="sourceLineNo">137</span>      org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl __jamon__var_3 = new org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl(this.getTemplateManager());<a name="line.137"></a>
 <span class="sourceLineNo">138</span>      __jamon__var_3.setFilter(filter );<a name="line.138"></a>
 <span class="sourceLineNo">139</span>      __jamon__var_3.renderNoFlush(jamonWriter);<a name="line.139"></a>
 <span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    // 111, 53<a name="line.141"></a>
+<span class="sourceLineNo">141</span>    // 112, 53<a name="line.141"></a>
 <span class="sourceLineNo">142</span>    jamonWriter.write("\n    &lt;/section&gt;\n\n    &lt;section&gt;\n    &lt;h2&gt;Block Cache&lt;/h2&gt;\n    ");<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    // 116, 5<a name="line.143"></a>
+<span class="sourceLineNo">143</span>    // 117, 5<a name="line.143"></a>
 <span class="sourceLineNo">144</span>    {<a name="line.144"></a>
 <span class="sourceLineNo">145</span>      org.apache.hadoop.hbase.tmpl.regionserver.BlockCacheTmpl __jamon__var_4 = new org.apache.hadoop.hbase.tmpl.regionserver.BlockCacheTmpl(this.getTemplateManager());<a name="line.145"></a>
 <span class="sourceLineNo">146</span>      __jamon__var_4.renderNoFlush(jamonWriter, regionServer.getCacheConfig(), regionServer.getConfiguration() );<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    // 116, 112<a name="line.148"></a>
+<span class="sourceLineNo">148</span>    // 117, 112<a name="line.148"></a>
 <span class="sourceLineNo">149</span>    jamonWriter.write("\n    &lt;/section&gt;\n\n    &lt;section&gt;\n    &lt;h2&gt;Regions&lt;/h2&gt;\n    ");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    // 121, 5<a name="line.150"></a>
+<span class="sourceLineNo">150</span>    // 122, 5<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    {<a name="line.151"></a>
 <span class="sourceLineNo">152</span>      org.apache.hadoop.hbase.tmpl.regionserver.RegionListTmpl __jamon__var_5 = new org.apache.hadoop.hbase.tmpl.regionserver.RegionListTmpl(this.getTemplateManager());<a name="line.152"></a>
 <span class="sourceLineNo">153</span>      __jamon__var_5.renderNoFlush(jamonWriter, regionServer, onlineRegions);<a name="line.153"></a>
 <span class="sourceLineNo">154</span>    }<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // 121, 86<a name="line.155"></a>
+<span class="sourceLineNo">155</span>    // 122, 86<a name="line.155"></a>
 <span class="sourceLineNo">156</span>    jamonWriter.write("\n    &lt;/section&gt;\n\n\n    &lt;section&gt;\n    &lt;h2&gt;Software Attributes&lt;/h2&gt;\n    &lt;table id=\"attributes_table\" class=\"table table-striped\"&gt;\n        &lt;tr&gt;\n            &lt;th&gt;Attribute Name&lt;/th&gt;\n            &lt;th&gt;Value&lt;/th&gt;\n            &lt;th&gt;Description&lt;/th&gt;\n        &lt;/tr&gt;\n        &lt;tr&gt;\n            &lt;td&gt;HBase Version&lt;/td&gt;\n            &lt;td&gt;");<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    // 135, 17<a name="line.157"></a>
+<span class="sourceLineNo">157</span>    // 136, 17<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.hbase.util.VersionInfo.getVersion()), jamonWriter);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    // 135, 76<a name="line.159"></a>
+<span class="sourceLineNo">159</span>    // 136, 76<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    jamonWriter.write(", revision=");<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    // 135, 87<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    // 136, 87<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.hbase.util.VersionInfo.getRevision()), jamonWriter);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    // 135, 147<a name="line.163"></a>
+<span class="sourceLineNo">163</span>    // 136, 147<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    jamonWriter.write("&lt;/td&gt;\n            &lt;td&gt;HBase version and revision&lt;/td&gt;\n        &lt;/tr&gt;\n        &lt;tr&gt;\n            &lt;td&gt;HBase Compiled&lt;/td&gt;\n            &lt;td&gt;");<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    // 140, 17<a name="line.165"></a>
+<span class="sourceLineNo">165</span>    // 141, 17<a name="line.165"></a>
 <span class="sourceLineNo">166</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.hbase.util.VersionInfo.getDate()), jamonWriter);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    // 140, 73<a name="line.167"></a>
+<span class="sourceLineNo">167</span>    // 141, 73<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    jamonWriter.write(", ");<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    // 140, 75<a name="line.169"></a>
+<span class="sourceLineNo">169</span>    // 141, 75<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.hbase.util.VersionInfo.getUser()), jamonWriter);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    // 140, 131<a name="line.171"></a>
+<span class="sourceLineNo">171</span>    // 141, 131<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    jamonWriter.write("&lt;/td&gt;\n            &lt;td&gt;When HBase version was compiled and by whom&lt;/td&gt;\n        &lt;/tr&gt;\n        &lt;tr&gt;\n            &lt;td&gt;HBase Source Checksum&lt;/td&gt;\n            &lt;td&gt;");<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    // 145, 17<a name="line.173"></a>
+<span class="sourceLineNo">173</span>    // 146, 17<a name="line.173"></a>
 <span class="sourceLineNo">174</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.hbase.util.VersionInfo.getSrcChecksum()), jamonWriter);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    // 145, 80<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    // 146, 80<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    jamonWriter.write("&lt;/td&gt;\n            &lt;td&gt;HBase source MD5 checksum&lt;/td&gt;\n        &lt;/tr&gt;\n        &lt;tr&gt;\n            &lt;td&gt;Hadoop Version&lt;/td&gt;\n            &lt;td&gt;");<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    // 150, 17<a name="line.177"></a>
+<span class="sourceLineNo">177</span>    // 151, 17<a name="line.177"></a>
 <span class="sourceLineNo">178</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.util.VersionInfo.getVersion()), jamonWriter);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // 150, 70<a name="line.179"></a>
+<span class="sourceLineNo">179</span>    // 151, 70<a name="line.179"></a>
 <span class="sourceLineNo">180</span>    jamonWriter.write(", revision=");<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // 150, 81<a name="line.181"></a>
+<span class="sourceLineNo">181</span>    // 151, 81<a name="line.181"></a>
 <span class="sourceLineNo">182</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.util.VersionInfo.getRevision()), jamonWriter);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    // 150, 135<a name="line.183"></a>
+<span class="sourceLineNo">183</span>    // 151, 135<a name="line.183"></a>
 <span class="sourceLineNo">184</span>    jamonWriter.write("&lt;/td&gt;\n            &lt;td&gt;Hadoop version and revision&lt;/td&gt;\n        &lt;/tr&gt;\n        &lt;tr&gt;\n            &lt;td&gt;Hadoop Compiled&lt;/td&gt;\n            &lt;td&gt;");<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    // 155, 17<a name="line.185"></a>
+<span class="sourceLineNo">185</span>    // 156, 17<a name="line.185"></a>
 <span class="sourceLineNo">186</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.util.VersionInfo.getDate()), jamonWriter);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    // 155, 67<a name="line.187"></a>
+<span class="sourceLineNo">187</span>    // 156, 67<a name="line.187"></a>
 <span class="sourceLineNo">188</span>    jamonWriter.write(", ");<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    // 155, 69<a name="line.189"></a>
+<span class="sourceLineNo">189</span>    // 156, 69<a name="line.189"></a>
 <span class="sourceLineNo">190</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.util.VersionInfo.getUser()), jamonWriter);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    // 155, 119<a name="line.191"></a>
+<span class="sourceLineNo">191</span>    // 156, 119<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    jamonWriter.write("&lt;/td&gt;\n            &lt;td&gt;When Hadoop version was compiled and by whom&lt;/td&gt;\n        &lt;/tr&gt;\n        &lt;tr&gt;\n            &lt;td&gt;Hadoop Source Checksum&lt;/td&gt;\n            &lt;td&gt;");<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    // 160, 17<a name="line.193"></a>
+<span class="sourceLineNo">193</span>    // 161, 17<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.hadoop.util.VersionInfo.getSrcChecksum()), jamonWriter);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    // 160, 74<a name="line.195"></a>
+<span class="sourceLineNo">195</span>    // 161, 74<a name="line.195"></a>
 <span class="sourceLineNo">196</span>    jamonWriter.write("&lt;/td&gt;\n            &lt;td&gt;Hadoop source MD5 checksum&lt;/td&gt;\n        &lt;/tr&gt;\n        &lt;tr&gt;\n            &lt;td&gt;ZooKeeper Client Version&lt;/td&gt;\n            &lt;td&gt;");<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // 165, 17<a name="line.197"></a>
+<span class="sourceLineNo">197</span>    // 166, 17<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.zookeeper.Version.getVersion()), jamonWriter);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    // 165, 64<a name="line.199"></a>
+<span class="sourceLineNo">199</span>    // 166, 64<a name="line.199"></a>
 <span class="sourceLineNo">200</span>    jamonWriter.write(", revision=");<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    // 165, 75<a name="line.201"></a>
+<span class="sourceLineNo">201</span>    // 166, 75<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.zookeeper.Version.getRevision()), jamonWriter);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    // 165, 123<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    // 166, 123<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    jamonWriter.write("&lt;/td&gt;\n            &lt;td&gt;ZooKeeper client version and revision&lt;/td&gt;\n        &lt;/tr&gt;\n        &lt;tr&gt;\n            &lt;td&gt;ZooKeeper Client Compiled&lt;/td&gt;\n            &lt;td&gt;");<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    // 170, 17<a name="line.205"></a>
+<span class="sourceLineNo">205</span>    // 171, 17<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(org.apache.zookeeper.Version.getBuildDate()), jamonWriter);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    // 170, 66<a name="line.207"></a>
+<span class="sourceLineNo">207</span>    // 171, 66<a name="line.207"></a>
 <span class="sourceLineNo">208</span>    jamonWriter.write("&lt;/td&gt;\n            &lt;td&gt;When ZooKeeper client version was compiled&lt;/td&gt;\n        &lt;/tr&gt;\n        &lt;tr&gt;\n            &lt;td&gt;Zookeeper Quorum&lt;/td&gt;\n            &lt;td&gt;");<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // 175, 17<a name="line.209"></a>
+<span class="sourceLineNo">209</span>    // 176, 17<a name="line.209"></a>
 <span class="sourceLineNo">210</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(regionServer.getZooKeeper().getQuorum()), jamonWriter);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    // 175, 62<a name="line.211"></a>
+<span class="sourceLineNo">211</span>    // 176, 62<a name="line.211"></a>
 <span class="sourceLineNo">212</span>    jamonWriter.write("&lt;/td&gt;\n            &lt;td&gt;Addresses of all registered ZK servers&lt;/td&gt;\n        &lt;/tr&gt;\n        &lt;tr&gt;\n            &lt;td&gt;Coprocessors&lt;/td&gt;\n            &lt;td&gt;");<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // 180, 17<a name="line.213"></a>
+<span class="sourceLineNo">213</span>    // 181, 17<a name="line.213"></a>
 <span class="sourceLineNo">214</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(java.util.Arrays.toString(regionServer.getRegionServerCoprocessors())), jamonWriter);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    // 180, 92<a name="line.215"></a>
+<span class="sourceLineNo">215</span>    // 181, 92<a name="line.215"></a>
 <span class="sourceLineNo">216</span>    jamonWriter.write("&lt;/td&gt;\n            &lt;td&gt;Coprocessors currently loaded by this regionserver&lt;/td&gt;\n        &lt;/tr&gt;\n        &lt;tr&gt;\n            &lt;td&gt;RS Start Time&lt;/td&gt;\n            &lt;td&gt;");<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    // 185, 17<a name="line.217"></a>
+<span class="sourceLineNo">217</span>    // 186, 17<a name="line.217"></a>
 <span class="sourceLineNo">218</span>    org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(new Date(regionServer.getStartcode())), jamonWriter);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    // 185, 60<a name="line.219"></a>
+<span class="sourceLineNo">219</span>    // 186, 60<a name="line.219"></a>
 <span class="sourceLineNo">220</span>    jamonWriter.write("&lt;/td&gt;\n            &lt;td&gt;Date stamp of when this region server was started&lt;/td&gt;\n        &lt;/tr&gt;\n        &lt;tr&gt;\n            &lt;td&gt;HBase Master&lt;/td&gt;\n            &lt;td&gt;\n                ");<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // 191, 17<a name="line.221"></a>
+<span class="sourceLineNo">221</span>    // 192, 17<a name="line.221"></a>
 <span class="sourceLineNo">222</span>    if (masterServerName == null )<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      // 191, 49<a name="line.224"></a>
+<span class="sourceLineNo">224</span>      // 192, 49<a name="line.224"></a>
 <span class="sourceLineNo">225</span>      jamonWriter.write("\n                No master found\n                ");<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    // 193, 17<a name="line.227"></a>
+<span class="sourceLineNo">227</span>    // 194, 17<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    else<a name="line.228"></a>
 <span class="sourceLineNo">229</span>    {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      // 193, 24<a name="line.230"></a>
+<span class="sourceLineNo">230</span>      // 194, 24<a name="line.230"></a>
 <span class="sourceLineNo">231</span>      jamonWriter.write("\n                ");<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      // 194, 17<a name="line.232"></a>
+<span class="sourceLineNo">232</span>      // 195, 17<a name="line.232"></a>
 <span class="sourceLineNo">233</span>      <a name="line.233"></a>
 <span class="sourceLineNo">234</span>                String host = masterServerName.getHostname() + ":" + infoPort;<a name="line.234"></a>
 <span class="sourceLineNo">235</span>                String url = "//" + host + "/master-status";<a name="line.235"></a>
 <span class="sourceLineNo">236</span>                <a name="line.236"></a>
-<span class="sourceLineNo">237</span>      // 198, 17<a name="line.237"></a>
+<span class="sourceLineNo">237</span>      // 199, 17<a name="line.237"></a>
 <span class="sourceLineNo">238</span>      jamonWriter.write("&lt;a href=\"");<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      // 198, 26<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      // 199, 26<a name="line.239"></a>
 <span class="sourceLineNo">240</span>      org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(url), jamonWriter);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      // 198, 35<a name="line.241"></a>
+<span class="sourceLineNo">241</span>      // 199, 35<a name="line.241"></a>
 <span class="sourceLineNo">242</span>      jamonWriter.write("\"&gt;");<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      // 198, 37<a name="line.243"></a>
+<span class="sourceLineNo">243</span>      // 199, 37<a name="line.243"></a>
 <span class="sourceLineNo">244</span>      org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(host), jamonWriter);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      // 198, 47<a name="line.245"></a>
+<span class="sourceLineNo">245</span>      // 199, 47<a name="line.245"></a>
 <span class="sourceLineNo">246</span>      jamonWriter.write("&lt;/a&gt;\n                ");<a name="line.246"></a>
 <span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    // 199, 23<a name="line.248"></a>
+<span class="sourceLineNo">248</span>    // 200, 23<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    jamonWriter.write("\n            &lt;/td&gt;\n            &lt;td&gt;Address of HBase Master&lt;/td&gt;\n        &lt;/tr&gt;\n    &lt;/table&gt;\n    &lt;/section&gt;\n    &lt;/div&gt;\n&lt;/div&gt;\n&lt;script src=\"/static/js/jquery.min.js\" type=\"text/javascript\"&gt;&lt;/script&gt;\n&lt;script src=\"/static/js/bootstrap.min.js\" type=\"text/javascript\"&gt;&lt;/script&gt;\n&lt;script src=\"/static/js/tab.js\" type=\"text/javascript\"&gt;&lt;/script&gt;\n&lt;/body&gt;\n&lt;/html&gt;\n");<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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html
index 00d7a34..87dabfe 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html
@@ -11,143 +11,158 @@
 <span class="sourceLineNo">003</span><a name="line.3"></a>
 <span class="sourceLineNo">004</span>package org.apache.hadoop.hbase.tmpl.regionserver;<a name="line.4"></a>
 <span class="sourceLineNo">005</span><a name="line.5"></a>
-<span class="sourceLineNo">006</span>// 23, 1<a name="line.6"></a>
+<span class="sourceLineNo">006</span>// 24, 1<a name="line.6"></a>
 <span class="sourceLineNo">007</span>import java.util.*;<a name="line.7"></a>
-<span class="sourceLineNo">008</span>// 24, 1<a name="line.8"></a>
+<span class="sourceLineNo">008</span>// 25, 1<a name="line.8"></a>
 <span class="sourceLineNo">009</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.9"></a>
-<span class="sourceLineNo">010</span>// 25, 1<a name="line.10"></a>
-<span class="sourceLineNo">011</span>import org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper;<a name="line.11"></a>
-<span class="sourceLineNo">012</span>// 26, 1<a name="line.12"></a>
-<span class="sourceLineNo">013</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.13"></a>
-<span class="sourceLineNo">014</span>// 27, 1<a name="line.14"></a>
-<span class="sourceLineNo">015</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.15"></a>
-<span class="sourceLineNo">016</span>// 28, 1<a name="line.16"></a>
-<span class="sourceLineNo">017</span>import org.apache.hadoop.hbase.ServerName;<a name="line.17"></a>
-<span class="sourceLineNo">018</span>// 29, 1<a name="line.18"></a>
-<span class="sourceLineNo">019</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.19"></a>
-<span class="sourceLineNo">020</span>// 30, 1<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>// 31, 1<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ServerInfo;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>// 32, 1<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>// 33, 1<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.util.DirectMemoryUtils;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>// 34, 1<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.util.StringUtils;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>// 35, 1<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import com.codahale.metrics.Snapshot;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>// 36, 1<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.lang.management.ManagementFactory;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>@org.jamon.annotations.Template(<a name="line.35"></a>
-<span class="sourceLineNo">036</span>  signature = "3EB466602F374B0C7D5132A481C93C4C",<a name="line.36"></a>
-<span class="sourceLineNo">037</span>  requiredArguments = {<a name="line.37"></a>
-<span class="sourceLineNo">038</span>    @org.jamon.annotations.Argument(name = "mWrap", type = "MetricsRegionServerWrapper")})<a name="line.38"></a>
-<span class="sourceLineNo">039</span>public class ServerMetricsTmpl<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  extends org.jamon.AbstractTemplateProxy<a name="line.40"></a>
-<span class="sourceLineNo">041</span>{<a name="line.41"></a>
-<span class="sourceLineNo">042</span>  <a name="line.42"></a>
-<span class="sourceLineNo">043</span>  public ServerMetricsTmpl(org.jamon.TemplateManager p_manager)<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>     super(p_manager);<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  }<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  <a name="line.47"></a>
-<span class="sourceLineNo">048</span>  protected ServerMetricsTmpl(String p_path)<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    super(p_path);<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  }<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  <a name="line.52"></a>
-<span class="sourceLineNo">053</span>  public ServerMetricsTmpl()<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  {<a name="line.54"></a>
-<span class="sourceLineNo">055</span>     super("/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl");<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  }<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  <a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public interface Intf<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    extends org.jamon.AbstractTemplateProxy.Intf<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  {<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    <a name="line.61"></a>
-<span class="sourceLineNo">062</span>    void renderNoFlush(final java.io.Writer jamonWriter) throws java.io.IOException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    <a name="line.63"></a>
-<span class="sourceLineNo">064</span>  }<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  public static class ImplData<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    extends org.jamon.AbstractTemplateProxy.ImplData<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    // 20, 1<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    public void setMWrap(MetricsRegionServerWrapper mWrap)<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      // 20, 1<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      m_mWrap = mWrap;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    }<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    public MetricsRegionServerWrapper getMWrap()<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      return m_mWrap;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    }<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    private MetricsRegionServerWrapper m_mWrap;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  @Override<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    return new ImplData();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  @Override public ImplData getImplData()<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    return (ImplData) super.getImplData();<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  <a name="line.89"></a>
-<span class="sourceLineNo">090</span>  <a name="line.90"></a>
-<span class="sourceLineNo">091</span>  @Override<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  public org.jamon.AbstractTemplateImpl constructImpl(Class&lt;? extends org.jamon.AbstractTemplateImpl&gt; p_class){<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    try<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      return p_class<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        .getConstructor(new Class [] { org.jamon.TemplateManager.class, ImplData.class })<a name="line.96"></a>
-<span class="sourceLineNo">097</span>        .newInstance(new Object [] { getTemplateManager(), getImplData()});<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    }<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    catch (RuntimeException e)<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      throw e;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    catch (Exception e)<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      throw new RuntimeException(e);<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>  <a name="line.108"></a>
-<span class="sourceLineNo">109</span>  @Override<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected org.jamon.AbstractTemplateImpl constructImpl(){<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    return new ServerMetricsTmplImpl(getTemplateManager(), getImplData());<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public org.jamon.Renderer makeRenderer(final MetricsRegionServerWrapper mWrap)<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return new org.jamon.AbstractRenderer() {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      @Override<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      public void renderTo(final java.io.Writer jamonWriter)<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        throws java.io.IOException<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        render(jamonWriter, mWrap);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    };<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  }<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  <a name="line.124"></a>
-<span class="sourceLineNo">125</span>  public void render(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    throws java.io.IOException<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    renderNoFlush(jamonWriter, mWrap);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    jamonWriter.flush();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public void renderNoFlush(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap)<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    throws java.io.IOException<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    ImplData implData = getImplData();<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    implData.setMWrap(mWrap);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    Intf instance = (Intf) getTemplateManager().constructImpl(this);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    instance.renderNoFlush(jamonWriter);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    reset();<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">010</span>// 26, 1<a name="line.10"></a>
+<span class="sourceLineNo">011</span>import org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper;<a name="line.11"></a>
+<span class="sourceLineNo">012</span>// 27, 1<a name="line.12"></a>
+<span class="sourceLineNo">013</span>import org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper;<a name="line.13"></a>
+<span class="sourceLineNo">014</span>// 28, 1<a name="line.14"></a>
+<span class="sourceLineNo">015</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.15"></a>
+<span class="sourceLineNo">016</span>// 29, 1<a name="line.16"></a>
+<span class="sourceLineNo">017</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.17"></a>
+<span class="sourceLineNo">018</span>// 30, 1<a name="line.18"></a>
+<span class="sourceLineNo">019</span>import org.apache.hadoop.hbase.ServerName;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>// 31, 1<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>// 32, 1<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>// 33, 1<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ServerInfo;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>// 34, 1<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>// 35, 1<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.util.DirectMemoryUtils;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>// 36, 1<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.util.StringUtils;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>// 37, 1<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import com.codahale.metrics.Snapshot;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>// 38, 1<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.lang.management.ManagementFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>@org.jamon.annotations.Template(<a name="line.37"></a>
+<span class="sourceLineNo">038</span>  signature = "B9C61EF1325C0BBC55600C5CBC6C51A0",<a name="line.38"></a>
+<span class="sourceLineNo">039</span>  requiredArguments = {<a name="line.39"></a>
+<span class="sourceLineNo">040</span>    @org.jamon.annotations.Argument(name = "mWrap", type = "MetricsRegionServerWrapper"),<a name="line.40"></a>
+<span class="sourceLineNo">041</span>    @org.jamon.annotations.Argument(name = "mServerWrap", type = "MetricsHBaseServerWrapper")})<a name="line.41"></a>
+<span class="sourceLineNo">042</span>public class ServerMetricsTmpl<a name="line.42"></a>
+<span class="sourceLineNo">043</span>  extends org.jamon.AbstractTemplateProxy<a name="line.43"></a>
+<span class="sourceLineNo">044</span>{<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  <a name="line.45"></a>
+<span class="sourceLineNo">046</span>  public ServerMetricsTmpl(org.jamon.TemplateManager p_manager)<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>     super(p_manager);<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  }<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  <a name="line.50"></a>
+<span class="sourceLineNo">051</span>  protected ServerMetricsTmpl(String p_path)<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    super(p_path);<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  }<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  <a name="line.55"></a>
+<span class="sourceLineNo">056</span>  public ServerMetricsTmpl()<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>     super("/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl");<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  <a name="line.60"></a>
+<span class="sourceLineNo">061</span>  public interface Intf<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    extends org.jamon.AbstractTemplateProxy.Intf<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    <a name="line.64"></a>
+<span class="sourceLineNo">065</span>    void renderNoFlush(final java.io.Writer jamonWriter) throws java.io.IOException;<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>  public static class ImplData<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    extends org.jamon.AbstractTemplateProxy.ImplData<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    // 20, 1<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    public void setMWrap(MetricsRegionServerWrapper mWrap)<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      // 20, 1<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      m_mWrap = mWrap;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    }<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    public MetricsRegionServerWrapper getMWrap()<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      return m_mWrap;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    }<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    private MetricsRegionServerWrapper m_mWrap;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    // 21, 1<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    public void setMServerWrap(MetricsHBaseServerWrapper mServerWrap)<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      // 21, 1<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      m_mServerWrap = mServerWrap;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    }<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    public MetricsHBaseServerWrapper getMServerWrap()<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      return m_mServerWrap;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    }<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    private MetricsHBaseServerWrapper m_mServerWrap;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  }<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  @Override<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    return new ImplData();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  @Override public ImplData getImplData()<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    return (ImplData) super.getImplData();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  <a name="line.103"></a>
+<span class="sourceLineNo">104</span>  <a name="line.104"></a>
+<span class="sourceLineNo">105</span>  @Override<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  public org.jamon.AbstractTemplateImpl constructImpl(Class&lt;? extends org.jamon.AbstractTemplateImpl&gt; p_class){<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    try<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      return p_class<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        .getConstructor(new Class [] { org.jamon.TemplateManager.class, ImplData.class })<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        .newInstance(new Object [] { getTemplateManager(), getImplData()});<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    catch (RuntimeException e)<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      throw e;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    catch (Exception e)<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      throw new RuntimeException(e);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  <a name="line.122"></a>
+<span class="sourceLineNo">123</span>  @Override<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  protected org.jamon.AbstractTemplateImpl constructImpl(){<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    return new ServerMetricsTmplImpl(getTemplateManager(), getImplData());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  public org.jamon.Renderer makeRenderer(final MetricsRegionServerWrapper mWrap, final MetricsHBaseServerWrapper mServerWrap)<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    return new org.jamon.AbstractRenderer() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      public void renderTo(final java.io.Writer jamonWriter)<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        throws java.io.IOException<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        render(jamonWriter, mWrap, mServerWrap);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      }<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    };<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  <a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public void render(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap, final MetricsHBaseServerWrapper mServerWrap)<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    throws java.io.IOException<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    renderNoFlush(jamonWriter, mWrap, mServerWrap);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    jamonWriter.flush();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  }<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  public void renderNoFlush(final java.io.Writer jamonWriter, final MetricsRegionServerWrapper mWrap, final MetricsHBaseServerWrapper mServerWrap)<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    throws java.io.IOException<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    ImplData implData = getImplData();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    implData.setMWrap(mWrap);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    implData.setMServerWrap(mServerWrap);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    Intf instance = (Intf) getTemplateManager().constructImpl(this);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    instance.renderNoFlush(jamonWriter);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    reset();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  <a name="line.155"></a>
+<span class="sourceLineNo">156</span>  <a name="line.156"></a>
+<span class="sourceLineNo">157</span>}<a name="line.157"></a>
 
 
 


[07/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/distribution-management.html
----------------------------------------------------------------------
diff --git a/distribution-management.html b/distribution-management.html
index e39f705..bf46dcf 100644
--- a/distribution-management.html
+++ b/distribution-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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Distribution Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -290,7 +290,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 0932155..a62c095 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -330,7 +330,7 @@ for more details.</p>
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/checkstyle.html b/hbase-annotations/checkstyle.html
index 73626e1..61bf46e 100644
--- a/hbase-annotations/checkstyle.html
+++ b/hbase-annotations/checkstyle.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependencies.html b/hbase-annotations/dependencies.html
index f423bda..820c8f2 100644
--- a/hbase-annotations/dependencies.html
+++ b/hbase-annotations/dependencies.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-convergence.html b/hbase-annotations/dependency-convergence.html
index 0320fef..45bf2d7 100644
--- a/hbase-annotations/dependency-convergence.html
+++ b/hbase-annotations/dependency-convergence.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>
@@ -1099,7 +1099,7 @@
 <td>
 <table border="0" class="bodyTable">
 <tr class="b">
-<td width="25%">3.4.7</td>
+<td width="25%">3.4.6</td>
 <td>
 <ol style="list-style-type: lower-alpha">
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-client">org.apache.hbase:hbase-client</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-info.html b/hbase-annotations/dependency-info.html
index 1adcc52..31ba32d 100644
--- a/hbase-annotations/dependency-info.html
+++ b/hbase-annotations/dependency-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-management.html b/hbase-annotations/dependency-management.html
index 7f3bb3b..a6b8f77 100644
--- a/hbase-annotations/dependency-management.html
+++ b/hbase-annotations/dependency-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>
@@ -398,7 +398,7 @@
 <tr class="a">
 <td>org.apache.zookeeper</td>
 <td>zookeeper</td>
-<td>3.4.7</td>
+<td>3.4.6</td>
 <td>jar</td>
 <td>-</td></tr>
 <tr class="b">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/distribution-management.html b/hbase-annotations/distribution-management.html
index 476f837..bd4e74d 100644
--- a/hbase-annotations/distribution-management.html
+++ b/hbase-annotations/distribution-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/index.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/index.html b/hbase-annotations/index.html
index 8402e6a..18ed310 100644
--- a/hbase-annotations/index.html
+++ b/hbase-annotations/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/integration.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/integration.html b/hbase-annotations/integration.html
index fbb27a8..4fce621 100644
--- a/hbase-annotations/integration.html
+++ b/hbase-annotations/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/issue-tracking.html b/hbase-annotations/issue-tracking.html
index 76005bd..778c097 100644
--- a/hbase-annotations/issue-tracking.html
+++ b/hbase-annotations/issue-tracking.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/license.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/license.html b/hbase-annotations/license.html
index fa241c9..55e59b3 100644
--- a/hbase-annotations/license.html
+++ b/hbase-annotations/license.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/mail-lists.html b/hbase-annotations/mail-lists.html
index 2990bce..5c9ad6c 100644
--- a/hbase-annotations/mail-lists.html
+++ b/hbase-annotations/mail-lists.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/plugin-management.html b/hbase-annotations/plugin-management.html
index bd96b1e..193b2ec 100644
--- a/hbase-annotations/plugin-management.html
+++ b/hbase-annotations/plugin-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/plugins.html b/hbase-annotations/plugins.html
index 58cb956..48c99bb 100644
--- a/hbase-annotations/plugins.html
+++ b/hbase-annotations/plugins.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-info.html b/hbase-annotations/project-info.html
index 89bcce3..831eef2 100644
--- a/hbase-annotations/project-info.html
+++ b/hbase-annotations/project-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-reports.html b/hbase-annotations/project-reports.html
index e32bd07..f835ef0 100644
--- a/hbase-annotations/project-reports.html
+++ b/hbase-annotations/project-reports.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-summary.html b/hbase-annotations/project-summary.html
index ab7d5f4..1942a57 100644
--- a/hbase-annotations/project-summary.html
+++ b/hbase-annotations/project-summary.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/source-repository.html b/hbase-annotations/source-repository.html
index ac30524..9cc249b 100644
--- a/hbase-annotations/source-repository.html
+++ b/hbase-annotations/source-repository.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-annotations/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/team-list.html b/hbase-annotations/team-list.html
index b28f39b..d5a33cb 100644
--- a/hbase-annotations/team-list.html
+++ b/hbase-annotations/team-list.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-spark/checkstyle.html b/hbase-spark/checkstyle.html
index f254738..fa3419c 100644
--- a/hbase-spark/checkstyle.html
+++ b/hbase-spark/checkstyle.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependencies.html b/hbase-spark/dependencies.html
index 93a38e4..005c51a 100644
--- a/hbase-spark/dependencies.html
+++ b/hbase-spark/dependencies.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>
@@ -686,7 +686,7 @@
 <tr class="a">
 <td>org.apache.zookeeper</td>
 <td>zookeeper</td>
-<td>3.4.7</td>
+<td>3.4.6</td>
 <td>jar</td>
 <td>-</td></tr>
 <tr class="b">
@@ -2568,7 +2568,7 @@ built on Jackson JSON processor</p>
 <p><b>Description: </b>A tracing framework for use with distributed systems written in java</p>
 <p><b>URL: </b><a class="externalLink" href="http://incubator.apache.org/projects/htrace.html">http://incubator.apache.org/projects/htrace.html</a></p>
 <p><b>Project License: </b><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">The Apache Software License, Version 2.0</a></p></td></tr></table></div></li>
-<li>org.apache.zookeeper:zookeeper:jar:3.4.7 (compile) <img id="_img255" src="./images/icon_info_sml.gif" alt="Information" onclick="toggleDependencyDetail( '_dep254', '_img255' );" style="cursor: pointer;vertical-align:text-bottom;"></img><div id="_dep254" style="display:none">
+<li>org.apache.zookeeper:zookeeper:jar:3.4.6 (compile) <img id="_img255" src="./images/icon_info_sml.gif" alt="Information" onclick="toggleDependencyDetail( '_dep254', '_img255' );" style="cursor: pointer;vertical-align:text-bottom;"></img><div id="_dep254" style="display:none">
 <table border="0" class="bodyTable">
 <tr class="a">
 <th>zookeeper</th></tr>
@@ -4097,10 +4097,10 @@ Jackson JSON processor's data binding functionality.</p>
 <td>-</td>
 <td>-</td></tr>
 <tr class="a">
-<td>zookeeper-3.4.7.jar</td>
-<td>785.21 kB</td>
-<td>471</td>
-<td>447</td>
+<td>zookeeper-3.4.6.jar</td>
+<td>774.38 kB</td>
+<td>464</td>
+<td>440</td>
 <td>19</td>
 <td>1.5</td>
 <td>debug</td>
@@ -4521,18 +4521,18 @@ Jackson JSON processor's data binding functionality.</p>
 <th>Sealed</th></tr>
 <tr class="b">
 <td>163</td>
-<td>138.84 MB</td>
-<td>82,461</td>
-<td>75,216</td>
+<td>138.83 MB</td>
+<td>82,454</td>
+<td>75,209</td>
 <td>2,094</td>
 <td>1.6</td>
 <td>141</td>
 <td>1</td></tr>
 <tr class="a">
 <td>compile: 89</td>
-<td>compile: 42.67 MB</td>
-<td>compile: 26,643</td>
-<td>compile: 23,964</td>
+<td>compile: 42.66 MB</td>
+<td>compile: 26,636</td>
+<td>compile: 23,957</td>
 <td>compile: 1,121</td>
 <td>-</td>
 <td>compile: 78</td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-convergence.html b/hbase-spark/dependency-convergence.html
index 936795b..0447c5a 100644
--- a/hbase-spark/dependency-convergence.html
+++ b/hbase-spark/dependency-convergence.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>
@@ -1099,7 +1099,7 @@
 <td>
 <table border="0" class="bodyTable">
 <tr class="b">
-<td width="25%">3.4.7</td>
+<td width="25%">3.4.6</td>
 <td>
 <ol style="list-style-type: lower-alpha">
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-client">org.apache.hbase:hbase-client</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-info.html b/hbase-spark/dependency-info.html
index 98d55b5..4f08f0e 100644
--- a/hbase-spark/dependency-info.html
+++ b/hbase-spark/dependency-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-management.html b/hbase-spark/dependency-management.html
index eb5e542..624cee3 100644
--- a/hbase-spark/dependency-management.html
+++ b/hbase-spark/dependency-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>
@@ -398,7 +398,7 @@
 <tr class="a">
 <td>org.apache.zookeeper</td>
 <td>zookeeper</td>
-<td>3.4.7</td>
+<td>3.4.6</td>
 <td>jar</td>
 <td>-</td></tr>
 <tr class="b">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/distribution-management.html b/hbase-spark/distribution-management.html
index ab28ec2..04fe276 100644
--- a/hbase-spark/distribution-management.html
+++ b/hbase-spark/distribution-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/index.html
----------------------------------------------------------------------
diff --git a/hbase-spark/index.html b/hbase-spark/index.html
index dea0604..1bae6fc 100644
--- a/hbase-spark/index.html
+++ b/hbase-spark/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/integration.html
----------------------------------------------------------------------
diff --git a/hbase-spark/integration.html b/hbase-spark/integration.html
index 31b123f..ecf8c75 100644
--- a/hbase-spark/integration.html
+++ b/hbase-spark/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-spark/issue-tracking.html b/hbase-spark/issue-tracking.html
index 91a98d3..e5617c5 100644
--- a/hbase-spark/issue-tracking.html
+++ b/hbase-spark/issue-tracking.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/license.html
----------------------------------------------------------------------
diff --git a/hbase-spark/license.html b/hbase-spark/license.html
index b02219c..72e013c 100644
--- a/hbase-spark/license.html
+++ b/hbase-spark/license.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-spark/mail-lists.html b/hbase-spark/mail-lists.html
index 9677307..1d0d03f 100644
--- a/hbase-spark/mail-lists.html
+++ b/hbase-spark/mail-lists.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/plugin-management.html b/hbase-spark/plugin-management.html
index f5cbc66..f9a66e3 100644
--- a/hbase-spark/plugin-management.html
+++ b/hbase-spark/plugin-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-spark/plugins.html b/hbase-spark/plugins.html
index b3bd23e..4a25b51 100644
--- a/hbase-spark/plugins.html
+++ b/hbase-spark/plugins.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-info.html b/hbase-spark/project-info.html
index 167882b..cbf1b26 100644
--- a/hbase-spark/project-info.html
+++ b/hbase-spark/project-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-reports.html b/hbase-spark/project-reports.html
index 697e28d..11513a9 100644
--- a/hbase-spark/project-reports.html
+++ b/hbase-spark/project-reports.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-summary.html b/hbase-spark/project-summary.html
index 6d0f5fa..70ded99 100644
--- a/hbase-spark/project-summary.html
+++ b/hbase-spark/project-summary.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-spark/source-repository.html b/hbase-spark/source-repository.html
index 7bba6c4..e942b63 100644
--- a/hbase-spark/source-repository.html
+++ b/hbase-spark/source-repository.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/hbase-spark/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-spark/team-list.html b/hbase-spark/team-list.html
index 51bc797..b6154e1 100644
--- a/hbase-spark/team-list.html
+++ b/hbase-spark/team-list.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-22 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-18</span>
+        <span id="publishDate">Last Published: 2015-12-22</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 45a778b..caae420 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -420,7 +420,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index 2fc56d0..09d78fe 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Continuous Integration</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -290,7 +290,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index f06cb8e..27da370 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Tracking</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -287,7 +287,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index d27da62..42373a0 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project License</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -490,7 +490,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 70e91e1..b16fab7 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -340,7 +340,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index 401e66a..5b2ce90 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -458,7 +458,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/modules.html
----------------------------------------------------------------------
diff --git a/modules.html b/modules.html
index 00c8ff4..9e7b46b 100644
--- a/modules.html
+++ b/modules.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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Modules</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -366,7 +366,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index a774b68..df07257 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -413,7 +413,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index c77f933..9e65ca0 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -423,7 +423,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 5f3ff59..6c0d4ac 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Build Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -366,7 +366,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 05b5db8..72bafb3 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Powered By Apache HBase™</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -309,6 +309,20 @@ under the License. -->
     HBase or external systems. Our production cluster has been running since Oct 2008.</dd>
 
   
+<dt><a class="externalLink" href="http://huaweibigdata.github.io/astro/">Project Astro</a></dt>
+  
+<dd>
+    Astro provides fast Spark SQL/DataFrame capabilities to HBase data,
+    featuring super-efficient access to multi-dimensional HBase rows through
+    native Spark execution in HBase coprocessor plus systematic and accurate
+    partition pruning and predicate pushdown from arbitrarily complex data
+    filtering logic. The batch load is optimized to run on the Spark execution
+    engine. Note that <a class="externalLink" href="http://spark-packages.org/package/Huawei-Spark/Spark-SQL-on-HBase">Spark-SQL-on-HBase</a>
+    is the release site. Interested parties are free to make clones and claim
+    to be &quot;latest(and active)&quot;, but they are not endorsed by the owner.
+  </dd>
+
+  
 <dt><a class="externalLink" href="http://axibase.com/products/axibase-time-series-database/">Axibase
     Time Series Database (ATSD)</a></dt>
   
@@ -754,7 +768,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index 01723d0..59b29ae 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -340,7 +340,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index a4c60a6..e62655a 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -310,7 +310,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 61e9627..e9a24dc 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -330,7 +330,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 8e0cfc7..b3d2db0 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -307,7 +307,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index ac1fc29..ad78144 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -302,7 +302,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 2941e67..47c24bc 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Other Apache HBase (TM) Resources</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -324,7 +324,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 00dba7a..f6bf51c 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Repository</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -298,7 +298,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 790d7a7..ed2afc9 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -306,8 +306,8 @@ under the License. -->
 <li><a class="externalLink" href="http://www.yourkit.com">YourKit</a> allows us to use their <a class="externalLink" href="http://www.yourkit.com/overview/index.jsp">Java Profiler</a>.</li>
 	
 <li>Some of us use <a class="externalLink" href="http://www.jetbrains.com/idea">IntelliJ IDEA</a> thanks to <a class="externalLink" href="http://www.jetbrains.com/">JetBrains</a>.</li>
-    
-<li>Thank you to Boris at <a class="externalLink" href="http://www.vectorportal.com/idea">Vector Portal</a> for granting us a license on the image on which our logo is based.</li>
+  
+<li>Thank you to Boris at <a class="externalLink" href="http://www.vectorportal.com/">Vector Portal</a> for granting us a license on the <a class="externalLink" href="http://www.vectorportal.com/subcategory/205/KILLER-WHALE-FREE-VECTOR.eps/ifile/9136/detailtest.asp">image</a> on which our logo is based.</li>
 </ul>
 
 </div>
@@ -332,7 +332,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index f39c248..f9be958 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -519,7 +519,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 


[19/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html
index f3aed1b..0597160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html
@@ -1513,810 +1513,816 @@
 <span class="sourceLineNo">1505</span>      if (maxSeqIdInStores == null || maxSeqIdInStores.isEmpty()) {<a name="line.1505"></a>
 <span class="sourceLineNo">1506</span>        return;<a name="line.1506"></a>
 <span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        if (!CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          // or the master was crashed before and we can not get the information.<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>          if (maxSeqId != null &amp;&amp; maxSeqId.longValue() &gt;= logEntry.getKey().getLogSeqNum()) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>            skippedCells.add(cell);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>          }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      }<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (!skippedCells.isEmpty()) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        logEntry.getEdit().getCells().removeAll(skippedCells);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1508</span>      // Create the array list for the cells that aren't filtered.<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // We make the assumption that most cells will be kept.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      ArrayList&lt;Cell&gt; keptCells = new ArrayList&lt;Cell&gt;(logEntry.getEdit().getCells().size());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>          keptCells.add(cell);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        } else {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          // or the master was crashed before and we can not get the information.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>          if (maxSeqId == null || maxSeqId.longValue() &lt; logEntry.getKey().getLogSeqNum()) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>            keptCells.add(cell);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      }<a name="line.1523"></a>
 <span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    @Override<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (entries.isEmpty()) {<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        return;<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      WriterAndPath wap = null;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      long startTime = System.nanoTime();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      try {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        int editsCount = 0;<a name="line.1537"></a>
+<span class="sourceLineNo">1525</span>      // Anything in the keptCells array list is still live.<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // So rather than removing the cells from the array list<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      // which would be an O(n^2) operation, we just replace the list<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      logEntry.getEdit().setCells(keptCells);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    @Override<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      if (entries.isEmpty()) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>        return;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      }<a name="line.1537"></a>
 <span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        for (Entry logEntry : entries) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          if (wap == null) {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>            wap = getWriterAndPath(logEntry);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>            if (wap == null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>              if (LOG.isDebugEnabled()) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>              }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>              return;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          filterCellByStore(logEntry);<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            wap.w.append(logEntry);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            editsCount++;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          } else {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>            wap.incrementSkippedEdits(1);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>          }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        // Pass along summary statistics<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        wap.incrementEdits(editsCount);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      } catch (IOException e) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          e = e instanceof RemoteException ?<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>        throw e;<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    }<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span><a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    /**<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>     */<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    @Override<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      synchronized (writers) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>        }<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      return ret;<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span><a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    @Override<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    public int getNumberOfRecoveredRegions() {<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      return writers.size();<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>  }<a name="line.1587"></a>
+<span class="sourceLineNo">1539</span>      WriterAndPath wap = null;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      long startTime = System.nanoTime();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      try {<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        int editsCount = 0;<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span><a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>        for (Entry logEntry : entries) {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>          if (wap == null) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>            wap = getWriterAndPath(logEntry);<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>            if (wap == null) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>              if (LOG.isDebugEnabled()) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>              }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>              return;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>            }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          filterCellByStore(logEntry);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            wap.w.append(logEntry);<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            editsCount++;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          } else {<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>            wap.incrementSkippedEdits(1);<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>          }<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        // Pass along summary statistics<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        wap.incrementEdits(editsCount);<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      } catch (IOException e) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>          e = e instanceof RemoteException ?<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>        throw e;<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    }<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span><a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>    /**<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>     */<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    @Override<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      synchronized (writers) {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      return ret;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    }<a name="line.1587"></a>
 <span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  /**<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>   */<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  public abstract static class SinkWriter {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    /* Count of edits written to this path */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    long editsWritten = 0;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    /* Count of edits skipped to this path */<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    long editsSkipped = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    /* Number of nanos spent writing to this log */<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    long nanosSpent = 0;<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    void incrementEdits(int edits) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      editsWritten += edits;<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    void incrementSkippedEdits(int skipped) {<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      editsSkipped += skipped;<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span><a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    void incrementNanoTime(long nanos) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      nanosSpent += nanos;<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    }<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  }<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span><a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>  /**<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * data written to this output.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   */<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    final Path p;<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    final Writer w;<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      this.p = p;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      this.w = w;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>  }<a name="line.1625"></a>
+<span class="sourceLineNo">1589</span>    @Override<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    public int getNumberOfRecoveredRegions() {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      return writers.size();<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  }<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span><a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>  /**<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>   */<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>  public abstract static class SinkWriter {<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    /* Count of edits written to this path */<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    long editsWritten = 0;<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    /* Count of edits skipped to this path */<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    long editsSkipped = 0;<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    /* Number of nanos spent writing to this log */<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    long nanosSpent = 0;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span><a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    void incrementEdits(int edits) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      editsWritten += edits;<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>    void incrementSkippedEdits(int skipped) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      editsSkipped += skipped;<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span><a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    void incrementNanoTime(long nanos) {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      nanosSpent += nanos;<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span><a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>  /**<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>   * data written to this output.<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>   */<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    final Path p;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    final Writer w;<a name="line.1625"></a>
 <span class="sourceLineNo">1626</span><a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>  /**<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>   */<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    private static final String KEY_DELIMITER = "#";<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    private long waitRegionOnlineTimeOut;<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    // online encoded region name -&gt; region location map<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span><a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>    /**<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>     * Map key -&gt; value layout<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>     */<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span><a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        int numWriters) {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      super(controller, entryBuffers, numWriters);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      this.waitRegionOnlineTimeOut =<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>        entryBuffers, numWriters);<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span><a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>    @Override<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      if (entries.isEmpty()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        return;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span><a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      // check if current region in a disabling or disabled table<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        // need fall back to old way<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>        // store regions we have recovered so far<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        return;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      }<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span><a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      // group entries by region servers<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      groupEditsByServer(entries);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span><a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      // process workitems<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      String maxLocKey = null;<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      int maxSize = 0;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>            maxSize = curQueue.size();<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>            maxQueue = curQueue;<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>            maxLocKey = entry.getKey();<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>          }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        if (maxSize &lt; minBatchSize<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>          // buffer more to process<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>          return;<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        } else if (maxSize &gt; 0) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>        }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span><a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>      if (maxSize &gt; 0) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>        recoveredRegions.add(encodedRegionName);<a name="line.1721"></a>
+<span class="sourceLineNo">1627</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      this.p = p;<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      this.w = w;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>    }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>  }<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span><a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>  /**<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>   */<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    private static final String KEY_DELIMITER = "#";<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>    private long waitRegionOnlineTimeOut;<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    // online encoded region name -&gt; region location map<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span><a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>    /**<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>     * Map key -&gt; value layout<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>     */<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span><a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span><a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>        int numWriters) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      super(controller, entryBuffers, numWriters);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      this.waitRegionOnlineTimeOut =<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>        entryBuffers, numWriters);<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    @Override<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (entries.isEmpty()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        return;<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      }<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span><a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      // check if current region in a disabling or disabled table<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // need fall back to old way<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>        // store regions we have recovered so far<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        return;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span><a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      // group entries by region servers<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      groupEditsByServer(entries);<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span><a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      // process workitems<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      String maxLocKey = null;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>      int maxSize = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>            maxSize = curQueue.size();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>            maxQueue = curQueue;<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>            maxLocKey = entry.getKey();<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>          }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>        }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        if (maxSize &lt; minBatchSize<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>          // buffer more to process<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>          return;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        } else if (maxSize &gt; 0) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span><a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      if (maxSize &gt; 0) {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
 <span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
 <span class="sourceLineNo">1724</span><a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    /**<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>     * Helper function to group WALEntries to individual region servers<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>     * @throws IOException<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>     */<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      for (Entry entry : entries) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>        WALEdit edit = entry.getEdit();<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        TableName table = entry.getKey().getTablename();<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>        // clear scopes which isn't needed for recovery<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>        entry.getKey().setScopes(null);<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>        // skip edits of non-existent tables<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>          this.skippedEdits.incrementAndGet();<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>          continue;<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        }<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span><a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        boolean needSkip = false;<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        HRegionLocation loc = null;<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        String locKey = null;<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span><a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>        for (Cell cell : cells) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>          boolean isCompactionEntry = false;<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>              try {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>                  .toByteArray());<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>                row = regionName[1]; // startKey of the region<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>                isCompactionEntry = true;<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>              } catch (Exception ex) {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>                skippedCells.add(cell);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>                continue;<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>              }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>            } else {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>              skippedCells.add(cell);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>              continue;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>            }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>          try {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>            loc =<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>                  encodeRegionNameStr);<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            // skip replaying the compaction if the region is gone<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>                  + encodeRegionNameStr);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>              needSkip = true;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>            }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>          } catch (TableNotFoundException ex) {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>            // table has been deleted so skip edits of the table<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>                + encodeRegionNameStr);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>            if (nonExistentTables == null) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>            }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            nonExistentTables.add(table);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>            this.skippedEdits.incrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>            needSkip = true;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>            break;<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          }<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span><a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          cachedLastFlushedSequenceId =<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          if (cachedLastFlushedSequenceId != null<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            // skip the whole WAL entry<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            this.skippedEdits.incrementAndGet();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            needSkip = true;<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            break;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } else {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            if (maxStoreSequenceIds == null) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>              maxStoreSequenceIds =<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            }<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            if (maxStoreSequenceIds != null) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>                skippedCells.add(cell);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                continue;<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>              }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>            }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>          }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        }<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>        // skip the edit<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        if (loc == null || needSkip) continue;<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>        if (!skippedCells.isEmpty()) {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          cells.removeAll(skippedCells);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        synchronized (serverToBufferQueueMap) {<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>          if (queue == null) {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>            queue =<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>          }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>        }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        // store regions we have recovered so far<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      }<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    }<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span><a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    /**<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>     * destination region is online for replay.<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>     * @throws IOException<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>     */<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>      // fetch location from cache<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      if(loc != null) return loc;<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      if (loc == null) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>            + " of table:" + table);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      // check if current row moves to a different region due to region merge/split<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        // originalEncodedRegionName should have already flushed<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      }<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span><a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      Long lastFlushedSequenceId = -1l;<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      if (!isRecovering.get()) {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>        // been moved to somewhere before hosting RS fails<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>            + " because it's not in recovering.");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      } else {<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>        Long cachedLastFlushedSequenceId =<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span><a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        // update the value for the region<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>        RegionStoreSequenceIds ids =<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>              loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        if (ids != null) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>          }<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        }<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        if (cachedLastFlushedSequenceId == null<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>            || lastFlushedSequenceId &gt; cachedLastFlushedSequenceId) {<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>          lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), lastFlushedSequenceId);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        }<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      }<a name="line.1903"></a>
+<span class="sourceLineNo">1725</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>        recoveredRegions.add(encodedRegionName);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    }<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span><a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>    /**<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>     * Helper function to group WALEntries to individual region servers<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>     * @throws IOException<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>     */<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      for (Entry entry : entries) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        WALEdit edit = entry.getEdit();<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>        TableName table = entry.getKey().getTablename();<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        // clear scopes which isn't needed for recovery<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        entry.getKey().setScopes(null);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // skip edits of non-existent tables<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>          this.skippedEdits.incrementAndGet();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>          continue;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        boolean needSkip = false;<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        HRegionLocation loc = null;<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        String locKey = null;<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span><a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        for (Cell cell : cells) {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>          boolean isCompactionEntry = false;<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>              try {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>                  .toByteArray());<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>                row = regionName[1]; // startKey of the region<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>                isCompactionEntry = true;<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>              } catch (Exception ex) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>                skippedCells.add(cell);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>                continue;<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>              }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            } else {<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>              skippedCells.add(cell);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>              continue;<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>            }<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          }<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span><a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          try {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>            loc =<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>                  encodeRegionNameStr);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>            // skip replaying the compaction if the region is gone<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>                  + encodeRegionNameStr);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>              needSkip = true;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>            }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>          } catch (TableNotFoundException ex) {<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>            // table has been deleted so skip edits of the table<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>                + encodeRegionNameStr);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>            if (nonExistentTables == null) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>            }<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>            nonExistentTables.add(table);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>            this.skippedEdits.incrementAndGet();<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>            needSkip = true;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>            break;<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          }<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span><a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>          cachedLastFlushedSequenceId =<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>          if (cachedLastFlushedSequenceId != null<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            // skip the whole WAL entry<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>            this.skippedEdits.incrementAndGet();<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>            needSkip = true;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            break;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>          } else {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>            if (maxStoreSequenceIds == null) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>              maxStoreSequenceIds =<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>            }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            if (maxStoreSequenceIds != null) {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>                skippedCells.add(cell);<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                continue;<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              }<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>            }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>          }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        }<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>        // skip the edit<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        if (loc == null || needSkip) continue;<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span><a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (!skippedCells.isEmpty()) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          cells.removeAll(skippedCells);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>        synchronized (serverToBufferQueueMap) {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>          if (queue == null) {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            queue =<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>        }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>        // store regions we have recovered so far<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span><a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    /**<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>     * destination region is online for replay.<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>     * @throws IOException<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>     */<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      // fetch location from cache<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      if(loc != null) return loc;<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      if (loc == null) {<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>            + " of table:" + table);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      }<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      // check if current row moves to a different region due to region merge/split<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        // originalEncodedRegionName should have already flushed<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      Long lastFlushedSequenceId = -1l;<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      if (!isRecovering.get()) {<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>        // been moved to somewhere before hosting RS fails<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>            + " because it's not in recovering.");<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      } else {<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        Long cachedLastFlushedSequenceId =<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        // update the value for the region<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>        RegionStoreSequenceIds ids =<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>              loc.getRegionInfo().getEncodedName());<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>        if (ids != null) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>          }<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        }<a name="line.1903"></a>
 <span class="sourceLineNo">1904</span><a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      onlineRegions.put(loc.getRegionInfo().getEncodedName(), loc);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      return loc;<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span><a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>    private void processWorkItems(String key, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; actions)<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>        throws IOException {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>      RegionServerWriter rsw = null;<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span><a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long startTime = System.nanoTime();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      try {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        rsw = getRegionServerWriter(key);<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>        rsw.sink.replayEntries(actions);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>        // Pass along summary statistics<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        rsw.incrementEdits(actions.size());<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>        rsw.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      } catch (IOException e) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        throw e;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    /**<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>     * Wait until region is online on the destination region server<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>     * @param loc<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>     * @param row<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>     * @param timeout How long to wait<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>     * @param isRecovering Recovering state of the region interested on destination region server.<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>     * @return True when region is online on the destination region server<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>     * @throws InterruptedException<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>     */<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    private HRegionLocation waitUntilRegionOnline(HRegionLocation loc, byte[] row,<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>        final long timeout, AtomicBoolean isRecovering)<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>        throws IOException {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      final long endTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      final long pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      boolean reloadLocation = false;<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      TableName tableName = loc.getRegionInfo().getTable();<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      int tries = 0;<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      Throwable cause = null;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>      while (endTime &gt; EnvironmentEdgeManager.currentTime()) {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>        try {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          // Try and get regioninfo from the hosting server.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          HConnection hconn = getConnectionByTableName(tableName);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          if(reloadLocation) {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            loc = hconn.getRegionLocation(tableName, row, true);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          }<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          BlockingInterface remoteSvr = hconn.getAdmin(loc.getServerName());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          HRegionInfo region = loc.getRegionInfo();<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>          try {<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>            GetRegionInfoRequest request =<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>                RequestConverter.buildGetRegionInfoRequest(region.getRegionName());<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            GetRegionInfoResponse response = remoteSvr.getRegionInfo(null, request);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>            if (HRegionInfo.convert(response.getRegionInfo()) != null) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>              isRecovering.set((response.hasIsRecovering()) ? response.getIsRecovering() : true);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>              return loc;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            }<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          } catch (ServiceException se) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>          }<a name="line.1966"></a>
-<span c

<TRUNCATED>

[34/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html
index 01efa15..c1dbf37 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html
@@ -106,326 +106,330 @@
 <span class="sourceLineNo">098</span>    currentScannerCallable.setClose();<a name="line.98"></a>
 <span class="sourceLineNo">099</span>  }<a name="line.99"></a>
 <span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  public void setCaching(int caching) {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    currentScannerCallable.setCaching(caching);<a name="line.102"></a>
+<span class="sourceLineNo">101</span>  public void setRenew(boolean val) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    currentScannerCallable.setRenew(val);<a name="line.102"></a>
 <span class="sourceLineNo">103</span>  }<a name="line.103"></a>
 <span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public int getCaching() {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    return currentScannerCallable.getCaching();<a name="line.106"></a>
+<span class="sourceLineNo">105</span>  public void setCaching(int caching) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    currentScannerCallable.setCaching(caching);<a name="line.106"></a>
 <span class="sourceLineNo">107</span>  }<a name="line.107"></a>
 <span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  public HRegionInfo getHRegionInfo() {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    return currentScannerCallable.getHRegionInfo();<a name="line.110"></a>
+<span class="sourceLineNo">109</span>  public int getCaching() {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    return currentScannerCallable.getCaching();<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>  public boolean getServerHasMoreResults() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    return currentScannerCallable.getServerHasMoreResults();<a name="line.114"></a>
+<span class="sourceLineNo">113</span>  public HRegionInfo getHRegionInfo() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    return currentScannerCallable.getHRegionInfo();<a name="line.114"></a>
 <span class="sourceLineNo">115</span>  }<a name="line.115"></a>
 <span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  public void setServerHasMoreResults(boolean serverHasMoreResults) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    currentScannerCallable.setServerHasMoreResults(serverHasMoreResults);<a name="line.118"></a>
+<span class="sourceLineNo">117</span>  public boolean getServerHasMoreResults() {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return currentScannerCallable.getServerHasMoreResults();<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>  public boolean hasMoreResultsContext() {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    return currentScannerCallable.hasMoreResultsContext();<a name="line.122"></a>
+<span class="sourceLineNo">121</span>  public void setServerHasMoreResults(boolean serverHasMoreResults) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    currentScannerCallable.setServerHasMoreResults(serverHasMoreResults);<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>  public void setHasMoreResultsContext(boolean serverHasMoreResultsContext) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    currentScannerCallable.setHasMoreResultsContext(serverHasMoreResultsContext);<a name="line.126"></a>
+<span class="sourceLineNo">125</span>  public boolean hasMoreResultsContext() {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    return currentScannerCallable.hasMoreResultsContext();<a name="line.126"></a>
 <span class="sourceLineNo">127</span>  }<a name="line.127"></a>
 <span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  @Override<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  public Result [] call(int timeout) throws IOException {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    // If the active replica callable was closed somewhere, invoke the RPC to<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    // really close it. In the case of regular scanners, this applies. We make couple<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    // of RPCs to a RegionServer, and when that region is exhausted, we set<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    // the closed flag. Then an RPC is required to actually close the scanner.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    if (currentScannerCallable != null &amp;&amp; currentScannerCallable.closed) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      // For closing we target that exact scanner (and not do replica fallback like in<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      // the case of normal reads)<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      if (LOG.isTraceEnabled()) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        LOG.trace("Closing scanner id=" + currentScannerCallable.scannerId);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      Result[] r = currentScannerCallable.call(timeout);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      currentScannerCallable = null;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      return r;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    }<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // We need to do the following:<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    //1. When a scan goes out to a certain replica (default or not), we need to<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    //   continue to hit that until there is a failure. So store the last successfully invoked<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    //   replica<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    //2. We should close the "losing" scanners (scanners other than the ones we hear back<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    //   from first)<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    //<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    RegionLocations rl = RpcRetryingCallerWithReadReplicas.getRegionLocations(true,<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        RegionReplicaUtil.DEFAULT_REPLICA_ID, cConnection, tableName,<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        currentScannerCallable.getRow());<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>    // allocate a boundedcompletion pool of some multiple of number of replicas.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    // We want to accomodate some RPCs for redundant replica scans (but are still in progress)<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    ResultBoundedCompletionService&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; cs =<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        new ResultBoundedCompletionService&lt;Pair&lt;Result[], ScannerCallable&gt;&gt;(<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            RpcRetryingCallerFactory.instantiate(ScannerCallableWithReplicas.this.conf), pool,<a name="line.160"></a>
-<span class="sourceLineNo">161</span>            rl.size() * 5);<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>    AtomicBoolean done = new AtomicBoolean(false);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    replicaSwitched.set(false);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    // submit call for the primary replica.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    addCallsForCurrentReplica(cs, rl);<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    try {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      // wait for the timeout to see whether the primary responds back<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      Future&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; f = cs.poll(timeBeforeReplicas,<a name="line.170"></a>
-<span class="sourceLineNo">171</span>          TimeUnit.MICROSECONDS); // Yes, microseconds<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      if (f != null) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        Pair&lt;Result[], ScannerCallable&gt; r = f.get(timeout, TimeUnit.MILLISECONDS);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        if (r != null &amp;&amp; r.getSecond() != null) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>          updateCurrentlyServingReplica(r.getSecond(), r.getFirst(), done, pool);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>        }<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        return r == null ? null : r.getFirst(); //great we got a response<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      }<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    } catch (ExecutionException e) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      RpcRetryingCallerWithReadReplicas.throwEnrichedException(e, retries);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    } catch (CancellationException e) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      throw new InterruptedIOException(e.getMessage());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    } catch (InterruptedException e) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      throw new InterruptedIOException(e.getMessage());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    } catch (TimeoutException e) {<a name="line.185"></a>
+<span class="sourceLineNo">129</span>  public void setHasMoreResultsContext(boolean serverHasMoreResultsContext) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    currentScannerCallable.setHasMoreResultsContext(serverHasMoreResultsContext);<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>  @Override<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  public Result [] call(int timeout) throws IOException {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // If the active replica callable was closed somewhere, invoke the RPC to<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    // really close it. In the case of regular scanners, this applies. We make couple<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    // of RPCs to a RegionServer, and when that region is exhausted, we set<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    // the closed flag. Then an RPC is required to actually close the scanner.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    if (currentScannerCallable != null &amp;&amp; currentScannerCallable.closed) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      // For closing we target that exact scanner (and not do replica fallback like in<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      // the case of normal reads)<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      if (LOG.isTraceEnabled()) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        LOG.trace("Closing scanner id=" + currentScannerCallable.scannerId);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      }<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      Result[] r = currentScannerCallable.call(timeout);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      currentScannerCallable = null;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      return r;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    // We need to do the following:<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    //1. When a scan goes out to a certain replica (default or not), we need to<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    //   continue to hit that until there is a failure. So store the last successfully invoked<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    //   replica<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    //2. We should close the "losing" scanners (scanners other than the ones we hear back<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    //   from first)<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    //<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    RegionLocations rl = RpcRetryingCallerWithReadReplicas.getRegionLocations(true,<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        RegionReplicaUtil.DEFAULT_REPLICA_ID, cConnection, tableName,<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        currentScannerCallable.getRow());<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    // allocate a boundedcompletion pool of some multiple of number of replicas.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    // We want to accomodate some RPCs for redundant replica scans (but are still in progress)<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    ResultBoundedCompletionService&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; cs =<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        new ResultBoundedCompletionService&lt;Pair&lt;Result[], ScannerCallable&gt;&gt;(<a name="line.163"></a>
+<span class="sourceLineNo">164</span>            RpcRetryingCallerFactory.instantiate(ScannerCallableWithReplicas.this.conf), pool,<a name="line.164"></a>
+<span class="sourceLineNo">165</span>            rl.size() * 5);<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>    AtomicBoolean done = new AtomicBoolean(false);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    replicaSwitched.set(false);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    // submit call for the primary replica.<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    addCallsForCurrentReplica(cs, rl);<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>    try {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      // wait for the timeout to see whether the primary responds back<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      Future&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; f = cs.poll(timeBeforeReplicas,<a name="line.174"></a>
+<span class="sourceLineNo">175</span>          TimeUnit.MICROSECONDS); // Yes, microseconds<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      if (f != null) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        Pair&lt;Result[], ScannerCallable&gt; r = f.get(timeout, TimeUnit.MILLISECONDS);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        if (r != null &amp;&amp; r.getSecond() != null) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          updateCurrentlyServingReplica(r.getSecond(), r.getFirst(), done, pool);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        return r == null ? null : r.getFirst(); //great we got a response<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    } catch (ExecutionException e) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      RpcRetryingCallerWithReadReplicas.throwEnrichedException(e, retries);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    } catch (CancellationException e) {<a name="line.185"></a>
 <span class="sourceLineNo">186</span>      throw new InterruptedIOException(e.getMessage());<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    // submit call for the all of the secondaries at once<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    // TODO: this may be an overkill for large region replication<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    addCallsForOtherReplicas(cs, rl, 0, rl.size() - 1);<a name="line.191"></a>
+<span class="sourceLineNo">187</span>    } catch (InterruptedException e) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      throw new InterruptedIOException(e.getMessage());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    } catch (TimeoutException e) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      throw new InterruptedIOException(e.getMessage());<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>    try {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      Future&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; f = cs.poll(timeout, TimeUnit.MILLISECONDS);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      if (f != null) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        Pair&lt;Result[], ScannerCallable&gt; r = f.get(timeout, TimeUnit.MILLISECONDS);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        if (r != null &amp;&amp; r.getSecond() != null) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>          updateCurrentlyServingReplica(r.getSecond(), r.getFirst(), done, pool);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>        return r == null ? null : r.getFirst(); // great we got an answer<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    } catch (ExecutionException e) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      RpcRetryingCallerWithReadReplicas.throwEnrichedException(e, retries);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    } catch (CancellationException e) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      throw new InterruptedIOException(e.getMessage());<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    } catch (InterruptedException e) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      throw new InterruptedIOException(e.getMessage());<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    } catch (TimeoutException e) {<a name="line.208"></a>
+<span class="sourceLineNo">193</span>    // submit call for the all of the secondaries at once<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    // TODO: this may be an overkill for large region replication<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    addCallsForOtherReplicas(cs, rl, 0, rl.size() - 1);<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>    try {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      Future&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; f = cs.poll(timeout, TimeUnit.MILLISECONDS);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      if (f != null) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        Pair&lt;Result[], ScannerCallable&gt; r = f.get(timeout, TimeUnit.MILLISECONDS);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        if (r != null &amp;&amp; r.getSecond() != null) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          updateCurrentlyServingReplica(r.getSecond(), r.getFirst(), done, pool);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        return r == null ? null : r.getFirst(); // great we got an answer<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    } catch (ExecutionException e) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      RpcRetryingCallerWithReadReplicas.throwEnrichedException(e, retries);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    } catch (CancellationException e) {<a name="line.208"></a>
 <span class="sourceLineNo">209</span>      throw new InterruptedIOException(e.getMessage());<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    } finally {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      // We get there because we were interrupted or because one or more of the<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      // calls succeeded or failed. In all case, we stop all our tasks.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      cs.cancelAll();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    return null; // unreachable<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  private void updateCurrentlyServingReplica(ScannerCallable scanner, Result[] result,<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      AtomicBoolean done, ExecutorService pool) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    if (done.compareAndSet(false, true)) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      if (currentScannerCallable != scanner) replicaSwitched.set(true);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      currentScannerCallable = scanner;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      // store where to start the replica scanner from if we need to.<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      if (result != null &amp;&amp; result.length != 0) this.lastResult = result[result.length - 1];<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      if (LOG.isTraceEnabled()) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        LOG.trace("Setting current scanner as id=" + currentScannerCallable.scannerId +<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            " associated with replica=" + currentScannerCallable.getHRegionInfo().getReplicaId());<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      // close all outstanding replica scanners but the one we heard back from<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      outstandingCallables.remove(scanner);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      for (ScannerCallable s : outstandingCallables) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        if (LOG.isTraceEnabled()) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          LOG.trace("Closing scanner id=" + s.scannerId +<a name="line.233"></a>
-<span class="sourceLineNo">234</span>            ", replica=" + s.getHRegionInfo().getRegionId() +<a name="line.234"></a>
-<span class="sourceLineNo">235</span>            " because slow and replica=" +<a name="line.235"></a>
-<span class="sourceLineNo">236</span>            this.currentScannerCallable.getHRegionInfo().getReplicaId() + " succeeded");<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        // Submit the "close" to the pool since this might take time, and we don't<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        // want to wait for the "close" to happen yet. The "wait" will happen when<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        // the table is closed (when the awaitTermination of the underlying pool is called)<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        s.setClose();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        final RetryingRPC r = new RetryingRPC(s);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        pool.submit(new Callable&lt;Void&gt;(){<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          @Override<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          public Void call() throws Exception {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>            r.call(scannerTimeout);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>            return null;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        });<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      // now clear outstandingCallables since we scheduled a close for all the contained scanners<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      outstandingCallables.clear();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>  /**<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * When a scanner switches in the middle of scanning (the 'next' call fails<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * for example), the upper layer {@link ClientScanner} needs to know<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * @return<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  public boolean switchedToADifferentReplica() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    return replicaSwitched.get();<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>  /**<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * @return true when the most recent RPC response indicated that the response was a heartbeat<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   *         message. Heartbeat messages are sent back from the server when the processing of the<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   *         scan request exceeds a certain time threshold. Heartbeats allow the server to avoid<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   *         timeouts during long running scan operations.<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  public boolean isHeartbeatMessage() {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return currentScannerCallable != null &amp;&amp; currentScannerCallable.isHeartbeatMessage();<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  private void addCallsForCurrentReplica(<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      ResultBoundedCompletionService&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; cs, RegionLocations rl) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    RetryingRPC retryingOnReplica = new RetryingRPC(currentScannerCallable);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    outstandingCallables.add(currentScannerCallable);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    cs.submit(retryingOnReplica, scannerTimeout, currentScannerCallable.id);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span>  private void addCallsForOtherReplicas(<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      ResultBoundedCompletionService&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; cs, RegionLocations rl,<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      int min, int max) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    if (scan.getConsistency() == Consistency.STRONG) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      return; // not scheduling on other replicas for strong consistency<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    for (int id = min; id &lt;= max; id++) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      if (currentScannerCallable.id == id) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        continue; //this was already scheduled earlier<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      }<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      ScannerCallable s = currentScannerCallable.getScannerCallableForReplica(id);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      setStartRowForReplicaCallable(s);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      outstandingCallables.add(s);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      RetryingRPC retryingOnReplica = new RetryingRPC(s);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      cs.submit(retryingOnReplica, scannerTimeout, id);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  }<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span>  /**<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * Set the start row for the replica callable based on the state of the last result received.<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * @param callable The callable to set the start row on<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  private void setStartRowForReplicaCallable(ScannerCallable callable) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    if (this.lastResult == null || callable == null) return;<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>    if (this.lastResult.isPartial()) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      // The last result was a partial result which means we have not received all of the cells<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      // for this row. Thus, use the last result's row as the start row. If a replica switch<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      // occurs, the scanner will ensure that any accumulated partial results are cleared,<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      // and the scan can resume from this row.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      callable.getScan().setStartRow(this.lastResult.getRow());<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    } else {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      // The last result was not a partial result which means it contained all of the cells for<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      // that row (we no longer need any information from it). Set the start row to the next<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      // closest row that could be seen.<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      if (callable.getScan().isReversed()) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        callable.getScan().setStartRow(createClosestRowBefore(this.lastResult.getRow()));<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        callable.getScan().setStartRow(Bytes.add(this.lastResult.getRow(), new byte[1]));<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  @VisibleForTesting<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  boolean isAnyRPCcancelled() {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return someRPCcancelled;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  class RetryingRPC implements RetryingCallable&lt;Pair&lt;Result[], ScannerCallable&gt;&gt;, Cancellable {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    final ScannerCallable callable;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    RpcRetryingCaller&lt;Result[]&gt; caller;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    private volatile boolean cancelled = false;<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>    RetryingRPC(ScannerCallable callable) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.callable = callable;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      // For the Consistency.STRONG (default case), we reuse the caller<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      // to keep compatibility with what is done in the past<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      // For the Consistency.TIMELINE case, we can't reuse the caller<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      // since we could be making parallel RPCs (caller.callWithRetries is synchronized<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      // and we can't invoke it multiple times at the same time)<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.caller = ScannerCallableWithReplicas.this.caller;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      if (scan.getConsistency() == Consistency.TIMELINE) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        this.caller = RpcRetryingCallerFactory.instantiate(ScannerCallableWithReplicas.this.conf)<a name="line.344"></a>
-<span class="sourceLineNo">345</span>            .&lt;Result[]&gt;newCaller();<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public Pair&lt;Result[], ScannerCallable&gt; call(int callTimeout) throws IOException {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      // since the retries is done within the ResultBoundedCompletionService,<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // we don't invoke callWithRetries here<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      if (cancelled) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        return null;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      Result[] res = this.caller.callWithoutRetries(this.callable, callTimeout);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      return new Pair&lt;Result[], ScannerCallable&gt;(res, this.callable);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    @Override<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    public void prepare(boolean reload) throws IOException {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      if (cancelled) return;<a name="line.362"></a>
+<span class="sourceLineNo">210</span>    } catch (InterruptedException e) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      throw new InterruptedIOException(e.getMessage());<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    } catch (TimeoutException e) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      throw new InterruptedIOException(e.getMessage());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    } finally {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      // We get there because we were interrupted or because one or more of the<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      // calls succeeded or failed. In all case, we stop all our tasks.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      cs.cancelAll();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    return null; // unreachable<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  private void updateCurrentlyServingReplica(ScannerCallable scanner, Result[] result,<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      AtomicBoolean done, ExecutorService pool) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    if (done.compareAndSet(false, true)) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      if (currentScannerCallable != scanner) replicaSwitched.set(true);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      currentScannerCallable = scanner;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      // store where to start the replica scanner from if we need to.<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      if (result != null &amp;&amp; result.length != 0) this.lastResult = result[result.length - 1];<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      if (LOG.isTraceEnabled()) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        LOG.trace("Setting current scanner as id=" + currentScannerCallable.scannerId +<a name="line.230"></a>
+<span class="sourceLineNo">231</span>            " associated with replica=" + currentScannerCallable.getHRegionInfo().getReplicaId());<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      // close all outstanding replica scanners but the one we heard back from<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      outstandingCallables.remove(scanner);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      for (ScannerCallable s : outstandingCallables) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        if (LOG.isTraceEnabled()) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          LOG.trace("Closing scanner id=" + s.scannerId +<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            ", replica=" + s.getHRegionInfo().getRegionId() +<a name="line.238"></a>
+<span class="sourceLineNo">239</span>            " because slow and replica=" +<a name="line.239"></a>
+<span class="sourceLineNo">240</span>            this.currentScannerCallable.getHRegionInfo().getReplicaId() + " succeeded");<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        }<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        // Submit the "close" to the pool since this might take time, and we don't<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        // want to wait for the "close" to happen yet. The "wait" will happen when<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        // the table is closed (when the awaitTermination of the underlying pool is called)<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        s.setClose();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        final RetryingRPC r = new RetryingRPC(s);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        pool.submit(new Callable&lt;Void&gt;(){<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          @Override<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          public Void call() throws Exception {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>            r.call(scannerTimeout);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>            return null;<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>      }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      // now clear outstandingCallables since we scheduled a close for all the contained scanners<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      outstandingCallables.clear();<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  }<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>  /**<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * When a scanner switches in the middle of scanning (the 'next' call fails<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   * for example), the upper layer {@link ClientScanner} needs to know<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * @return<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   */<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  public boolean switchedToADifferentReplica() {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    return replicaSwitched.get();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * @return true when the most recent RPC response indicated that the response was a heartbeat<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   *         message. Heartbeat messages are sent back from the server when the processing of the<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   *         scan request exceeds a certain time threshold. Heartbeats allow the server to avoid<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   *         timeouts during long running scan operations.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   */<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  public boolean isHeartbeatMessage() {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    return currentScannerCallable != null &amp;&amp; currentScannerCallable.isHeartbeatMessage();<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>  private void addCallsForCurrentReplica(<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      ResultBoundedCompletionService&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; cs, RegionLocations rl) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    RetryingRPC retryingOnReplica = new RetryingRPC(currentScannerCallable);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    outstandingCallables.add(currentScannerCallable);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    cs.submit(retryingOnReplica, scannerTimeout, currentScannerCallable.id);<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>  private void addCallsForOtherReplicas(<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      ResultBoundedCompletionService&lt;Pair&lt;Result[], ScannerCallable&gt;&gt; cs, RegionLocations rl,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      int min, int max) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    if (scan.getConsistency() == Consistency.STRONG) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      return; // not scheduling on other replicas for strong consistency<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    for (int id = min; id &lt;= max; id++) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      if (currentScannerCallable.id == id) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>        continue; //this was already scheduled earlier<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      }<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      ScannerCallable s = currentScannerCallable.getScannerCallableForReplica(id);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      setStartRowForReplicaCallable(s);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      outstandingCallables.add(s);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      RetryingRPC retryingOnReplica = new RetryingRPC(s);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      cs.submit(retryingOnReplica, scannerTimeout, id);<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>  /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   * Set the start row for the replica callable based on the state of the last result received.<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * @param callable The callable to set the start row on<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   */<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  private void setStartRowForReplicaCallable(ScannerCallable callable) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    if (this.lastResult == null || callable == null) return;<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>    if (this.lastResult.isPartial()) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      // The last result was a partial result which means we have not received all of the cells<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      // for this row. Thus, use the last result's row as the start row. If a replica switch<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      // occurs, the scanner will ensure that any accumulated partial results are cleared,<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      // and the scan can resume from this row.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      callable.getScan().setStartRow(this.lastResult.getRow());<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    } else {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      // The last result was not a partial result which means it contained all of the cells for<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      // that row (we no longer need any information from it). Set the start row to the next<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      // closest row that could be seen.<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      if (callable.getScan().isReversed()) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        callable.getScan().setStartRow(createClosestRowBefore(this.lastResult.getRow()));<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      } else {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        callable.getScan().setStartRow(Bytes.add(this.lastResult.getRow(), new byte[1]));<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  @VisibleForTesting<a name="line.329"></a>
+<span class="sourceLineNo">330</span>  boolean isAnyRPCcancelled() {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    return someRPCcancelled;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  }<a name="line.332"></a>
+<span class="sourceLineNo">333</span><a name="line.333"></a>
+<span class="sourceLineNo">334</span>  class RetryingRPC implements RetryingCallable&lt;Pair&lt;Result[], ScannerCallable&gt;&gt;, Cancellable {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    final ScannerCallable callable;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    RpcRetryingCaller&lt;Result[]&gt; caller;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    private volatile boolean cancelled = false;<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    RetryingRPC(ScannerCallable callable) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.callable = callable;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      // For the Consistency.STRONG (default case), we reuse the caller<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      // to keep compatibility with what is done in the past<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      // For the Consistency.TIMELINE case, we can't reuse the caller<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      // since we could be making parallel RPCs (caller.callWithRetries is synchronized<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      // and we can't invoke it multiple times at the same time)<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      this.caller = ScannerCallableWithReplicas.this.caller;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      if (scan.getConsistency() == Consistency.TIMELINE) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        this.caller = RpcRetryingCallerFactory.instantiate(ScannerCallableWithReplicas.this.conf)<a name="line.348"></a>
+<span class="sourceLineNo">349</span>            .&lt;Result[]&gt;newCaller();<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>    @Override<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    public Pair&lt;Result[], ScannerCallable&gt; call(int callTimeout) throws IOException {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // since the retries is done within the ResultBoundedCompletionService,<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      // we don't invoke callWithRetries here<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (cancelled) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        return null;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      Result[] res = this.caller.callWithoutRetries(this.callable, callTimeout);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      return new Pair&lt;Result[], ScannerCallable&gt;(res, this.callable);<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>      if (Thread.interrupted()) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        throw new InterruptedIOException();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      }<a name="line.366"></a>
+<span class="sourceLineNo">364</span>    @Override<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    public void prepare(boolean reload) throws IOException {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      if (cancelled) return;<a name="line.366"></a>
 <span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>      callable.prepare(reload);<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 void throwable(Throwable t, boolean retrying) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      callable.throwable(t, retrying);<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 getExceptionMessageAdditionalDetail() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      return callable.getExceptionMessageAdditionalDetail();<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 long sleep(long pause, int tries) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      return callable.sleep(pause, tries);<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 cancel() {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      cancelled = true;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      caller.cancel();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      if (callable.getController() != null) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        callable.getController().startCancel();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      someRPCcancelled = true;<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>    @Override<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    public boolean isCancelled() {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      return cancelled;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>  @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public void prepare(boolean reload) throws IOException {<a name="line.403"></a>
+<span class="sourceLineNo">368</span>      if (Thread.interrupted()) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        throw new InterruptedIOException();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>      callable.prepare(reload);<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 void throwable(Throwable t, boolean retrying) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      callable.throwable(t, retrying);<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 getExceptionMessageAdditionalDetail() {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      return callable.getExceptionMessageAdditionalDetail();<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 long sleep(long pause, int tries) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      return callable.sleep(pause, tries);<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 void cancel() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      cancelled = true;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      caller.cancel();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      if (callable.getController() != null) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        callable.getController().startCancel();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      }<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      someRPCcancelled = true;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>    @Override<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    public boolean isCancelled() {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return cancelled;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
 <span class="sourceLineNo">404</span>  }<a name="line.404"></a>
 <span class="sourceLineNo">405</span><a name="line.405"></a>
 <span class="sourceLineNo">406</span>  @Override<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  public void throwable(Throwable t, boolean retrying) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    currentScannerCallable.throwable(t, retrying);<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 String getExceptionMessageAdditionalDetail() {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    return currentScannerCallable.getExceptionMessageAdditionalDetail();<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 long sleep(long pause, int tries) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    return currentScannerCallable.sleep(pause, tries);<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">407</span>  public void prepare(boolean reload) throws IOException {<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 throwable(Throwable t, boolean retrying) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    currentScannerCallable.throwable(t, retrying);<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>  @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  public String getExceptionMessageAdditionalDetail() {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    return currentScannerCallable.getExceptionMessageAdditionalDetail();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>  @Override<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  public long sleep(long pause, int tries) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    return currentScannerCallable.sleep(pause, tries);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  }<a name="line.423"></a>
+<span class="sourceLineNo">424</span>}<a name="line.424"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html
index b4f7def..daf2939 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html
@@ -40,90 +40,96 @@
 <span class="sourceLineNo">032</span>@InterfaceAudience.Private<a name="line.32"></a>
 <span class="sourceLineNo">033</span>public class MetricsHBaseServer {<a name="line.33"></a>
 <span class="sourceLineNo">034</span>  private MetricsHBaseServerSource source;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>  public MetricsHBaseServer(String serverName, MetricsHBaseServerWrapper wrapper) {<a name="line.36"></a>
-<span class="sourceLineNo">037</span>    source = CompatibilitySingletonFactory.getInstance(MetricsHBaseServerSourceFactory.class)<a name="line.37"></a>
-<span class="sourceLineNo">038</span>                                          .create(serverName, wrapper);<a name="line.38"></a>
-<span class="sourceLineNo">039</span>  }<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>  void authorizationSuccess() {<a name="line.41"></a>
-<span class="sourceLineNo">042</span>    source.authorizationSuccess();<a name="line.42"></a>
-<span class="sourceLineNo">043</span>  }<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>  void authorizationFailure() {<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    source.authorizationFailure();<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  }<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  void authenticationFailure() {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    source.authenticationFailure();<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  }<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  void authenticationSuccess() {<a name="line.53"></a>
-<span class="sourceLineNo">054</span>    source.authenticationSuccess();<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  }<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  void authenticationFallback() {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    source.authenticationFallback();<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  void sentBytes(long count) {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    source.sentBytes(count);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  }<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  void receivedBytes(int count) {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    source.receivedBytes(count);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  }<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  void sentResponse(long count) { source.sentResponse(count); }<a name="line.69"></a>
+<span class="sourceLineNo">035</span>  private MetricsHBaseServerWrapper serverWrapper;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>  public MetricsHBaseServer(String serverName, MetricsHBaseServerWrapper wrapper) {<a name="line.37"></a>
+<span class="sourceLineNo">038</span>    serverWrapper = wrapper;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>    source = CompatibilitySingletonFactory.getInstance(MetricsHBaseServerSourceFactory.class)<a name="line.39"></a>
+<span class="sourceLineNo">040</span>                                          .create(serverName, wrapper);<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  }<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>  void authorizationSuccess() {<a name="line.43"></a>
+<span class="sourceLineNo">044</span>    source.authorizationSuccess();<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  }<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>  void authorizationFailure() {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    source.authorizationFailure();<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  }<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  void authenticationFailure() {<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    source.authenticationFailure();<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  }<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  void authenticationSuccess() {<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    source.authenticationSuccess();<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  }<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  void authenticationFallback() {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    source.authenticationFallback();<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  }<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  void sentBytes(long count) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    source.sentBytes(count);<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  }<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  void receivedBytes(int count) {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    source.receivedBytes(count);<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
 <span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  void receivedRequest(long count) { source.receivedRequest(count); }<a name="line.71"></a>
+<span class="sourceLineNo">071</span>  void sentResponse(long count) { source.sentResponse(count); }<a name="line.71"></a>
 <span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  void dequeuedCall(int qTime) {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    source.dequeuedCall(qTime);<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  void processedCall(int processingTime) {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    source.processedCall(processingTime);<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>  void totalCall(int totalTime) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    source.queuedAndProcessedCall(totalTime);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public void exception(Throwable throwable) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    source.exception();<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>     * Keep some metrics for commonly seen exceptions<a name="line.89"></a>
-<span class="sourceLineNo">090</span>     *<a name="line.90"></a>
-<span class="sourceLineNo">091</span>     * Try and  put the most common types first.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>     * Place child types before the parent type that they extend.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>     *<a name="line.93"></a>
-<span class="sourceLineNo">094</span>     * If this gets much larger we might have to go to a hashmap<a name="line.94"></a>
-<span class="sourceLineNo">095</span>     */<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    if (throwable != null) {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      if (throwable instanceof OutOfOrderScannerNextException) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        source.outOfOrderException();<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      } else if (throwable instanceof RegionTooBusyException) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        source.tooBusyException();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      } else if (throwable instanceof UnknownScannerException) {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        source.unknownScannerException();<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      } else if (throwable instanceof RegionMovedException) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>        source.movedRegionException();<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      } else if (throwable instanceof NotServingRegionException) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        source.notServingRegionException();<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      } else if (throwable instanceof FailedSanityCheckException) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        source.failedSanityException();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      } else if (throwable instanceof MultiActionResultTooLarge) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        source.multiActionTooLargeException();<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>  }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  public MetricsHBaseServerSource getMetricsSource() {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    return source;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>}<a name="line.118"></a>
+<span class="sourceLineNo">073</span>  void receivedRequest(long count) { source.receivedRequest(count); }<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  void dequeuedCall(int qTime) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    source.dequeuedCall(qTime);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span>  void processedCall(int processingTime) {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    source.processedCall(processingTime);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  }<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  void totalCall(int totalTime) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    source.queuedAndProcessedCall(totalTime);<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>  public void exception(Throwable throwable) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    source.exception();<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>    /**<a name="line.90"></a>
+<span class="sourceLineNo">091</span>     * Keep some metrics for commonly seen exceptions<a name="line.91"></a>
+<span class="sourceLineNo">092</span>     *<a name="line.92"></a>
+<span class="sourceLineNo">093</span>     * Try and  put the most common types first.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>     * Place child types before the parent type that they extend.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>     *<a name="line.95"></a>
+<span class="sourceLineNo">096</span>     * If this gets much larger we might have to go to a hashmap<a name="line.96"></a>
+<span class="sourceLineNo">097</span>     */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    if (throwable != null) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      if (throwable instanceof OutOfOrderScannerNextException) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>        source.outOfOrderException();<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      } else if (throwable instanceof RegionTooBusyException) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        source.tooBusyException();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      } else if (throwable instanceof UnknownScannerException) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        source.unknownScannerException();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      } else if (throwable instanceof RegionMovedException) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        source.movedRegionException();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      } else if (throwable instanceof NotServingRegionException) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        source.notServingRegionException();<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      } else if (throwable instanceof FailedSanityCheckException) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        source.failedSanityException();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      } else if (throwable instanceof MultiActionResultTooLarge) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        source.multiActionTooLargeException();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      }<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  public MetricsHBaseServerSource getMetricsSource() {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return source;<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>  public MetricsHBaseServerWrapper getHBaseServerWrapper() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    return serverWrapper;<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>
 
 
 


[42/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
index 8630237..e2eb29e 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.325">HBaseInterClusterReplicationEndpoint.Replicator</a>
+<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.340">HBaseInterClusterReplicationEndpoint.Replicator</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</pre>
 </li>
@@ -197,7 +197,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockList">
 <li class="blockList">
 <h4>entries</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.326">entries</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.341">entries</a></pre>
 </li>
 </ul>
 <a name="ordinal">
@@ -206,7 +206,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ordinal</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.327">ordinal</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.342">ordinal</a></pre>
 </li>
 </ul>
 </li>
@@ -223,7 +223,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HBaseInterClusterReplicationEndpoint.Replicator</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.328">HBaseInterClusterReplicationEndpoint.Replicator</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.343">HBaseInterClusterReplicationEndpoint.Replicator</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
                                                int&nbsp;ordinal)</pre>
 </li>
 </ul>
@@ -241,7 +241,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.334">call</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.349">call</a>()
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
index 8048913..b3e460d 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
@@ -606,7 +606,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>isPeerEnabled</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.293">isPeerEnabled</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.308">isPeerEnabled</a>()</pre>
 </li>
 </ul>
 <a name="doStop()">
@@ -615,7 +615,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>doStop</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.298">doStop</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.313">doStop</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#doStop()">doStop</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a></code></dd>
@@ -628,7 +628,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>stopAndWait</h4>
-<pre>public&nbsp;com.google.common.util.concurrent.Service.State&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.314">stopAndWait</a>()</pre>
+<pre>public&nbsp;com.google.common.util.concurrent.Service.State&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.329">stopAndWait</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>stopAndWait</code>&nbsp;in interface&nbsp;<code>com.google.common.util.concurrent.Service</code></dd>
@@ -643,7 +643,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createReplicator</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.320">createReplicator</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.335">createReplicator</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
                                                                int&nbsp;ordinal)</pre>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html
index 8774dba..e51d7ee 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.170">ReplicationSinkManager.SinkPeer</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.179">ReplicationSinkManager.SinkPeer</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Wraps a replication region server sink to provide the ability to identify
  it.</div>
@@ -198,7 +198,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>serverName</h4>
-<pre>private&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/ReplicationSinkManager.SinkPeer.html#line.171">serverName</a></pre>
+<pre>private&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/ReplicationSinkManager.SinkPeer.html#line.180">serverName</a></pre>
 </li>
 </ul>
 <a name="regionServer">
@@ -207,7 +207,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>regionServer</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService.BlockingInterface <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.172">regionServer</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService.BlockingInterface <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.181">regionServer</a></pre>
 </li>
 </ul>
 </li>
@@ -224,7 +224,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ReplicationSinkManager.SinkPeer</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.174">ReplicationSinkManager.SinkPeer</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="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.183">ReplicationSinkManager.SinkPeer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                                org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService.BlockingInterface&nbsp;regionServer)</pre>
 </li>
 </ul>
@@ -242,7 +242,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerName</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.179">getServerName</a>()</pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.188">getServerName</a>()</pre>
 </li>
 </ul>
 <a name="getRegionServer()">
@@ -251,7 +251,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getRegionServer</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService.BlockingInterface&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.183">getRegionServer</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService.BlockingInterface&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.192">getRegionServer</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html
index 75c07e3..ed5afd9 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html
@@ -95,7 +95,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.41">ReplicationSinkManager</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.42">ReplicationSinkManager</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Maintains a collection of peers to replicate to, and randomly selects a
  single peer to replicate to per set of data to replicate. Also handles
@@ -233,26 +233,32 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#chooseSinks()">chooseSinks</a></strong>()</code>&nbsp;</td>
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#chooseSinks()">chooseSinks</a></strong>()</code>
+<div class="block">Refresh the list of sinks.</div>
+</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#getNumSinks()">getNumSinks</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager.SinkPeer</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#getReplicationSink()">getReplicationSink</a></strong>()</code>
 <div class="block">Get a randomly-chosen replication sink to replicate to.</div>
 </td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#getSinks()">getSinks</a></strong>()</code>&nbsp;</td>
-</tr>
 <tr class="rowColor">
+<td class="colFirst"><code>protected <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#getSinksForTesting()">getSinksForTesting</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#reportBadSink(org.apache.hadoop.hbase.replication.regionserver.ReplicationSinkManager.SinkPeer)">reportBadSink</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager.SinkPeer</a>&nbsp;sinkPeer)</code>
 <div class="block">Report a <code>SinkPeer</code> as being bad (i.e.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#reportSinkSuccess(org.apache.hadoop.hbase.replication.regionserver.ReplicationSinkManager.SinkPeer)">reportSinkSuccess</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager.SinkPeer</a>&nbsp;sinkPeer)</code>
 <div class="block">Report that a <code>SinkPeer</code> successfully replicated a chunk of data.</div>
@@ -286,7 +292,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.43">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.44">LOG</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_BAD_SINK_THRESHOLD">
@@ -295,7 +301,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_BAD_SINK_THRESHOLD</h4>
-<pre>static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.50">DEFAULT_BAD_SINK_THRESHOLD</a></pre>
+<pre>static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.51">DEFAULT_BAD_SINK_THRESHOLD</a></pre>
 <div class="block">Default maximum number of times a replication sink can be reported as bad before
  it will no longer be provided as a sink for replication without the pool of
  replication sinks being refreshed.</div>
@@ -308,7 +314,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REPLICATION_SOURCE_RATIO</h4>
-<pre>static final&nbsp;float <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.56">DEFAULT_REPLICATION_SOURCE_RATIO</a></pre>
+<pre>static final&nbsp;float <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.57">DEFAULT_REPLICATION_SOURCE_RATIO</a></pre>
 <div class="block">Default ratio of the total number of peer cluster region servers to consider
  replicating to.</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.replication.regionserver.ReplicationSinkManager.DEFAULT_REPLICATION_SOURCE_RATIO">Constant Field Values</a></dd></dl>
@@ -320,7 +326,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>conn</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.59">conn</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.60">conn</a></pre>
 </li>
 </ul>
 <a name="peerClusterId">
@@ -329,7 +335,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>peerClusterId</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/ReplicationSinkManager.html#line.61">peerClusterId</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/ReplicationSinkManager.html#line.62">peerClusterId</a></pre>
 </li>
 </ul>
 <a name="endpoint">
@@ -338,7 +344,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>endpoint</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.63">endpoint</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.64">endpoint</a></pre>
 </li>
 </ul>
 <a name="badReportCounts">
@@ -347,7 +353,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>badReportCounts</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.66">badReportCounts</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.67">badReportCounts</a></pre>
 </li>
 </ul>
 <a name="ratio">
@@ -356,7 +362,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>ratio</h4>
-<pre>private final&nbsp;float <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.69">ratio</a></pre>
+<pre>private final&nbsp;float <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.70">ratio</a></pre>
 </li>
 </ul>
 <a name="badSinkThreshold">
@@ -365,7 +371,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>badSinkThreshold</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.73">badSinkThreshold</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.74">badSinkThreshold</a></pre>
 </li>
 </ul>
 <a name="random">
@@ -374,7 +380,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>random</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.75">random</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.76">random</a></pre>
 </li>
 </ul>
 <a name="lastUpdateToPeers">
@@ -383,7 +389,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>lastUpdateToPeers</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.78">lastUpdateToPeers</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.79">lastUpdateToPeers</a></pre>
 </li>
 </ul>
 <a name="sinks">
@@ -392,7 +398,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>sinks</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.81">sinks</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.82">sinks</a></pre>
 </li>
 </ul>
 </li>
@@ -409,7 +415,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ReplicationSinkManager</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.91">ReplicationSinkManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&nbsp;conn,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.92">ReplicationSinkManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&nbsp;conn,
                       <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerClusterId,
                       <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a>&nbsp;endpoint,
                       org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
@@ -432,7 +438,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationSink</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager.SinkPeer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.108">getReplicationSink</a>()
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager.SinkPeer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.109">getReplicationSink</a>()
                                                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get a randomly-chosen replication sink to replicate to.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>a replication sink to replicate to</dd>
@@ -446,7 +452,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>reportBadSink</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.130">reportBadSink</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager.SinkPeer</a>&nbsp;sinkPeer)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.131">reportBadSink</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager.SinkPeer</a>&nbsp;sinkPeer)</pre>
 <div class="block">Report a <code>SinkPeer</code> as being bad (i.e. an attempt to replicate to it
  failed). If a single SinkPeer is reported as bad more than
  replication.bad.sink.threshold times, it will be removed
@@ -460,7 +466,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>reportSinkSuccess</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.149">reportSinkSuccess</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager.SinkPeer</a>&nbsp;sinkPeer)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.150">reportSinkSuccess</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager.SinkPeer</a>&nbsp;sinkPeer)</pre>
 <div class="block">Report that a <code>SinkPeer</code> successfully replicated a chunk of data.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>sinkPeer</code> - The SinkPeer that had a failed replication attempt on it</dd></dl>
 </li>
@@ -471,16 +477,26 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>chooseSinks</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.153">chooseSinks</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.157">chooseSinks</a>()</pre>
+<div class="block">Refresh the list of sinks.</div>
+</li>
+</ul>
+<a name="getNumSinks()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNumSinks</h4>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.166">getNumSinks</a>()</pre>
 </li>
 </ul>
-<a name="getSinks()">
+<a name="getSinksForTesting()">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getSinks</h4>
-<pre><a href="http://docs.oracle.com/javase/7/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/regionserver/ReplicationSinkManager.html#line.162">getSinks</a>()</pre>
+<h4>getSinksForTesting</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/regionserver/ReplicationSinkManager.html#line.171">getSinksForTesting</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/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 9faa681..ad15368 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -101,8 +101,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="strong">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="strong">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="strong">ScannerModel.FilterModel.FilterType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/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 9df7d69..7d3bd59 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -153,8 +153,8 @@
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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="strong">AuthMethod</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="strong">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="strong">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="strong">SaslStatus</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
index 98dbe62..e9fac0b 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
@@ -379,58 +379,58 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.110">m_master</a></pre>
 </li>
 </ul>
-<a name="m_metaLocation">
+<a name="m_deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_metaLocation</h4>
-<pre>private&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/tmpl/master/MasterStatusTmpl.ImplData.html#line.122">m_metaLocation</a></pre>
+<h4>m_deadServers</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.122">m_deadServers</a></pre>
 </li>
 </ul>
-<a name="m_metaLocation__IsNotDefault">
+<a name="m_deadServers__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_metaLocation__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.127">m_metaLocation__IsNotDefault</a></pre>
+<h4>m_deadServers__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.127">m_deadServers__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_frags">
+<a name="m_format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_frags</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.139">m_frags</a></pre>
+<h4>m_format</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.139">m_format</a></pre>
 </li>
 </ul>
-<a name="m_frags__IsNotDefault">
+<a name="m_format__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_frags__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.144">m_frags__IsNotDefault</a></pre>
+<h4>m_format__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.144">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager">
+<a name="m_metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_assignmentManager</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.156">m_assignmentManager</a></pre>
+<h4>m_metaLocation</h4>
+<pre>private&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/tmpl/master/MasterStatusTmpl.ImplData.html#line.156">m_metaLocation</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager__IsNotDefault">
+<a name="m_metaLocation__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_assignmentManager__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.161">m_assignmentManager__IsNotDefault</a></pre>
+<h4>m_metaLocation__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.161">m_metaLocation__IsNotDefault</a></pre>
 </li>
 </ul>
 <a name="m_serverManager">
@@ -451,40 +451,40 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.178">m_serverManager__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_format">
+<a name="m_frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.190">m_format</a></pre>
+<h4>m_frags</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.190">m_frags</a></pre>
 </li>
 </ul>
-<a name="m_format__IsNotDefault">
+<a name="m_frags__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.195">m_format__IsNotDefault</a></pre>
+<h4>m_frags__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.195">m_frags__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_servers">
+<a name="m_filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_servers</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.207">m_servers</a></pre>
+<h4>m_filter</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.207">m_filter</a></pre>
 </li>
 </ul>
-<a name="m_servers__IsNotDefault">
+<a name="m_filter__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_servers__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.212">m_servers__IsNotDefault</a></pre>
+<h4>m_filter__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.212">m_filter__IsNotDefault</a></pre>
 </li>
 </ul>
 <a name="m_catalogJanitorEnabled">
@@ -505,40 +505,40 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.229">m_catalogJanitorEnabled__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_deadServers">
+<a name="m_servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_deadServers</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.241">m_deadServers</a></pre>
+<h4>m_servers</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.241">m_servers</a></pre>
 </li>
 </ul>
-<a name="m_deadServers__IsNotDefault">
+<a name="m_servers__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_deadServers__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.246">m_deadServers__IsNotDefault</a></pre>
+<h4>m_servers__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.246">m_servers__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_filter">
+<a name="m_assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_filter</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.258">m_filter</a></pre>
+<h4>m_assignmentManager</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.258">m_assignmentManager</a></pre>
 </li>
 </ul>
-<a name="m_filter__IsNotDefault">
+<a name="m_assignmentManager__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>m_filter__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.263">m_filter__IsNotDefault</a></pre>
+<h4>m_assignmentManager__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.263">m_assignmentManager__IsNotDefault</a></pre>
 </li>
 </ul>
 </li>
@@ -584,85 +584,85 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.106">getMaster</a>()</pre>
 </li>
 </ul>
-<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
+<a name="setDeadServers(java.util.Set)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setMetaLocation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.112">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;metaLocation)</pre>
+<h4>setDeadServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.112">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;deadServers)</pre>
 </li>
 </ul>
-<a name="getMetaLocation()">
+<a name="getDeadServers()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getMetaLocation</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.118">getMetaLocation</a>()</pre>
+<h4>getDeadServers</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</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/tmpl/master/MasterStatusTmpl.ImplData.html#line.118">getDeadServers</a>()</pre>
 </li>
 </ul>
-<a name="getMetaLocation__IsNotDefault()">
+<a name="getDeadServers__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getMetaLocation__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.123">getMetaLocation__IsNotDefault</a>()</pre>
+<h4>getDeadServers__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.123">getDeadServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFrags(java.util.Map)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFrags</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;frags)</pre>
+<h4>setFormat</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
 </li>
 </ul>
-<a name="getFrags()">
+<a name="getFormat()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFrags</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.135">getFrags</a>()</pre>
+<h4>getFormat</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.135">getFormat</a>()</pre>
 </li>
 </ul>
-<a name="getFrags__IsNotDefault()">
+<a name="getFormat__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFrags__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.140">getFrags__IsNotDefault</a>()</pre>
+<h4>getFormat__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.140">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
+<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setAssignmentManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.146">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;assignmentManager)</pre>
+<h4>setMetaLocation</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.146">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;metaLocation)</pre>
 </li>
 </ul>
-<a name="getAssignmentManager()">
+<a name="getMetaLocation()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getAssignmentManager</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.152">getAssignmentManager</a>()</pre>
+<h4>getMetaLocation</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.152">getMetaLocation</a>()</pre>
 </li>
 </ul>
-<a name="getAssignmentManager__IsNotDefault()">
+<a name="getMetaLocation__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getAssignmentManager__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.157">getAssignmentManager__IsNotDefault</a>()</pre>
+<h4>getMetaLocation__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.157">getMetaLocation__IsNotDefault</a>()</pre>
 </li>
 </ul>
 <a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
@@ -692,58 +692,58 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.174">getServerManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setFrags(java.util.Map)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.180">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
+<h4>setFrags</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.180">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;frags)</pre>
 </li>
 </ul>
-<a name="getFormat()">
+<a name="getFrags()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.186">getFormat</a>()</pre>
+<h4>getFrags</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.186">getFrags</a>()</pre>
 </li>
 </ul>
-<a name="getFormat__IsNotDefault()">
+<a name="getFrags__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.191">getFormat__IsNotDefault</a>()</pre>
+<h4>getFrags__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.191">getFrags__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setServers(java.util.List)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.197">setServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</pre>
+<h4>setFilter</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.197">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
 </li>
 </ul>
-<a name="getServers()">
+<a name="getFilter()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServers</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.203">getServers</a>()</pre>
+<h4>getFilter</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.203">getFilter</a>()</pre>
 </li>
 </ul>
-<a name="getServers__IsNotDefault()">
+<a name="getFilter__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServers__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.208">getServers__IsNotDefault</a>()</pre>
+<h4>getFilter__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.208">getFilter__IsNotDefault</a>()</pre>
 </li>
 </ul>
 <a name="setCatalogJanitorEnabled(boolean)">
@@ -773,58 +773,58 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.225">getCatalogJanitorEnabled__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setDeadServers(java.util.Set)">
+<a name="setServers(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setDeadServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.231">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;deadServers)</pre>
+<h4>setServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.231">setServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</pre>
 </li>
 </ul>
-<a name="getDeadServers()">
+<a name="getServers()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getDeadServers</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</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/tmpl/master/MasterStatusTmpl.ImplData.html#line.237">getDeadServers</a>()</pre>
+<h4>getServers</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.237">getServers</a>()</pre>
 </li>
 </ul>
-<a name="getDeadServers__IsNotDefault()">
+<a name="getServers__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getDeadServers__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.242">getDeadServers__IsNotDefault</a>()</pre>
+<h4>getServers__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.242">getServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.248">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.248">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;assignmentManager)</pre>
 </li>
 </ul>
-<a name="getFilter()">
+<a name="getAssignmentManager()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFilter</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.254">getFilter</a>()</pre>
+<h4>getAssignmentManager</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.254">getAssignmentManager</a>()</pre>
 </li>
 </ul>
-<a name="getFilter__IsNotDefault()">
+<a name="getAssignmentManager__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getFilter__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.259">getFilter__IsNotDefault</a>()</pre>
+<h4>getAssignmentManager__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.259">getAssignmentManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
 </li>


[16/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html
index f3aed1b..0597160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html
@@ -1513,810 +1513,816 @@
 <span class="sourceLineNo">1505</span>      if (maxSeqIdInStores == null || maxSeqIdInStores.isEmpty()) {<a name="line.1505"></a>
 <span class="sourceLineNo">1506</span>        return;<a name="line.1506"></a>
 <span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        if (!CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          // or the master was crashed before and we can not get the information.<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>          if (maxSeqId != null &amp;&amp; maxSeqId.longValue() &gt;= logEntry.getKey().getLogSeqNum()) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>            skippedCells.add(cell);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>          }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      }<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (!skippedCells.isEmpty()) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        logEntry.getEdit().getCells().removeAll(skippedCells);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1508</span>      // Create the array list for the cells that aren't filtered.<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // We make the assumption that most cells will be kept.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      ArrayList&lt;Cell&gt; keptCells = new ArrayList&lt;Cell&gt;(logEntry.getEdit().getCells().size());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>          keptCells.add(cell);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        } else {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          // or the master was crashed before and we can not get the information.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>          if (maxSeqId == null || maxSeqId.longValue() &lt; logEntry.getKey().getLogSeqNum()) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>            keptCells.add(cell);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      }<a name="line.1523"></a>
 <span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    @Override<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (entries.isEmpty()) {<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        return;<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      WriterAndPath wap = null;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      long startTime = System.nanoTime();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      try {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        int editsCount = 0;<a name="line.1537"></a>
+<span class="sourceLineNo">1525</span>      // Anything in the keptCells array list is still live.<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // So rather than removing the cells from the array list<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      // which would be an O(n^2) operation, we just replace the list<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      logEntry.getEdit().setCells(keptCells);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    @Override<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      if (entries.isEmpty()) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>        return;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      }<a name="line.1537"></a>
 <span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        for (Entry logEntry : entries) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          if (wap == null) {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>            wap = getWriterAndPath(logEntry);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>            if (wap == null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>              if (LOG.isDebugEnabled()) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>              }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>              return;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          filterCellByStore(logEntry);<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            wap.w.append(logEntry);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            editsCount++;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          } else {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>            wap.incrementSkippedEdits(1);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>          }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        // Pass along summary statistics<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        wap.incrementEdits(editsCount);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      } catch (IOException e) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          e = e instanceof RemoteException ?<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>        throw e;<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    }<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span><a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    /**<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>     */<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    @Override<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      synchronized (writers) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>        }<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      return ret;<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span><a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    @Override<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    public int getNumberOfRecoveredRegions() {<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      return writers.size();<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>  }<a name="line.1587"></a>
+<span class="sourceLineNo">1539</span>      WriterAndPath wap = null;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      long startTime = System.nanoTime();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      try {<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        int editsCount = 0;<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span><a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>        for (Entry logEntry : entries) {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>          if (wap == null) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>            wap = getWriterAndPath(logEntry);<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>            if (wap == null) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>              if (LOG.isDebugEnabled()) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>              }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>              return;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>            }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          filterCellByStore(logEntry);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            wap.w.append(logEntry);<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            editsCount++;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          } else {<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>            wap.incrementSkippedEdits(1);<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>          }<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        // Pass along summary statistics<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        wap.incrementEdits(editsCount);<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      } catch (IOException e) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>          e = e instanceof RemoteException ?<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>        throw e;<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    }<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span><a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>    /**<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>     */<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    @Override<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      synchronized (writers) {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      return ret;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    }<a name="line.1587"></a>
 <span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  /**<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>   */<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  public abstract static class SinkWriter {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    /* Count of edits written to this path */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    long editsWritten = 0;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    /* Count of edits skipped to this path */<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    long editsSkipped = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    /* Number of nanos spent writing to this log */<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    long nanosSpent = 0;<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    void incrementEdits(int edits) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      editsWritten += edits;<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    void incrementSkippedEdits(int skipped) {<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      editsSkipped += skipped;<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span><a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    void incrementNanoTime(long nanos) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      nanosSpent += nanos;<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    }<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  }<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span><a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>  /**<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * data written to this output.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   */<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    final Path p;<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    final Writer w;<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      this.p = p;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      this.w = w;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>  }<a name="line.1625"></a>
+<span class="sourceLineNo">1589</span>    @Override<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    public int getNumberOfRecoveredRegions() {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      return writers.size();<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  }<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span><a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>  /**<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>   */<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>  public abstract static class SinkWriter {<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    /* Count of edits written to this path */<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    long editsWritten = 0;<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    /* Count of edits skipped to this path */<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    long editsSkipped = 0;<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    /* Number of nanos spent writing to this log */<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    long nanosSpent = 0;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span><a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    void incrementEdits(int edits) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      editsWritten += edits;<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>    void incrementSkippedEdits(int skipped) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      editsSkipped += skipped;<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span><a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    void incrementNanoTime(long nanos) {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      nanosSpent += nanos;<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span><a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>  /**<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>   * data written to this output.<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>   */<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    final Path p;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    final Writer w;<a name="line.1625"></a>
 <span class="sourceLineNo">1626</span><a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>  /**<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>   */<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    private static final String KEY_DELIMITER = "#";<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    private long waitRegionOnlineTimeOut;<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    // online encoded region name -&gt; region location map<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span><a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>    /**<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>     * Map key -&gt; value layout<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>     */<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span><a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        int numWriters) {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      super(controller, entryBuffers, numWriters);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      this.waitRegionOnlineTimeOut =<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>        entryBuffers, numWriters);<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span><a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>    @Override<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      if (entries.isEmpty()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        return;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span><a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      // check if current region in a disabling or disabled table<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        // need fall back to old way<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>        // store regions we have recovered so far<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        return;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      }<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span><a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      // group entries by region servers<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      groupEditsByServer(entries);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span><a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      // process workitems<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      String maxLocKey = null;<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      int maxSize = 0;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>            maxSize = curQueue.size();<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>            maxQueue = curQueue;<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>            maxLocKey = entry.getKey();<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>          }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        if (maxSize &lt; minBatchSize<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>          // buffer more to process<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>          return;<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        } else if (maxSize &gt; 0) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>        }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span><a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>      if (maxSize &gt; 0) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>        recoveredRegions.add(encodedRegionName);<a name="line.1721"></a>
+<span class="sourceLineNo">1627</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      this.p = p;<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      this.w = w;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>    }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>  }<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span><a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>  /**<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>   */<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    private static final String KEY_DELIMITER = "#";<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>    private long waitRegionOnlineTimeOut;<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    // online encoded region name -&gt; region location map<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span><a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>    /**<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>     * Map key -&gt; value layout<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>     */<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span><a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span><a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>        int numWriters) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      super(controller, entryBuffers, numWriters);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      this.waitRegionOnlineTimeOut =<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>        entryBuffers, numWriters);<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    @Override<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (entries.isEmpty()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        return;<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      }<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span><a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      // check if current region in a disabling or disabled table<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // need fall back to old way<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>        // store regions we have recovered so far<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        return;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span><a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      // group entries by region servers<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      groupEditsByServer(entries);<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span><a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      // process workitems<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      String maxLocKey = null;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>      int maxSize = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>            maxSize = curQueue.size();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>            maxQueue = curQueue;<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>            maxLocKey = entry.getKey();<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>          }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>        }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        if (maxSize &lt; minBatchSize<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>          // buffer more to process<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>          return;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        } else if (maxSize &gt; 0) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span><a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      if (maxSize &gt; 0) {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
 <span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
 <span class="sourceLineNo">1724</span><a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    /**<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>     * Helper function to group WALEntries to individual region servers<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>     * @throws IOException<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>     */<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      for (Entry entry : entries) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>        WALEdit edit = entry.getEdit();<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        TableName table = entry.getKey().getTablename();<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>        // clear scopes which isn't needed for recovery<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>        entry.getKey().setScopes(null);<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>        // skip edits of non-existent tables<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>          this.skippedEdits.incrementAndGet();<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>          continue;<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        }<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span><a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        boolean needSkip = false;<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        HRegionLocation loc = null;<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        String locKey = null;<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span><a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>        for (Cell cell : cells) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>          boolean isCompactionEntry = false;<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>              try {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>                  .toByteArray());<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>                row = regionName[1]; // startKey of the region<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>                isCompactionEntry = true;<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>              } catch (Exception ex) {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>                skippedCells.add(cell);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>                continue;<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>              }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>            } else {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>              skippedCells.add(cell);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>              continue;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>            }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>          try {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>            loc =<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>                  encodeRegionNameStr);<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            // skip replaying the compaction if the region is gone<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>                  + encodeRegionNameStr);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>              needSkip = true;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>            }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>          } catch (TableNotFoundException ex) {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>            // table has been deleted so skip edits of the table<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>                + encodeRegionNameStr);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>            if (nonExistentTables == null) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>            }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            nonExistentTables.add(table);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>            this.skippedEdits.incrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>            needSkip = true;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>            break;<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          }<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span><a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          cachedLastFlushedSequenceId =<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          if (cachedLastFlushedSequenceId != null<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            // skip the whole WAL entry<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            this.skippedEdits.incrementAndGet();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            needSkip = true;<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            break;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } else {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            if (maxStoreSequenceIds == null) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>              maxStoreSequenceIds =<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            }<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            if (maxStoreSequenceIds != null) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>                skippedCells.add(cell);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                continue;<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>              }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>            }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>          }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        }<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>        // skip the edit<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        if (loc == null || needSkip) continue;<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>        if (!skippedCells.isEmpty()) {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          cells.removeAll(skippedCells);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        synchronized (serverToBufferQueueMap) {<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>          if (queue == null) {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>            queue =<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>          }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>        }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        // store regions we have recovered so far<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      }<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    }<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span><a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    /**<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>     * destination region is online for replay.<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>     * @throws IOException<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>     */<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>      // fetch location from cache<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      if(loc != null) return loc;<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      if (loc == null) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>            + " of table:" + table);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      // check if current row moves to a different region due to region merge/split<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        // originalEncodedRegionName should have already flushed<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      }<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span><a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      Long lastFlushedSequenceId = -1l;<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      if (!isRecovering.get()) {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>        // been moved to somewhere before hosting RS fails<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>            + " because it's not in recovering.");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      } else {<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>        Long cachedLastFlushedSequenceId =<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span><a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        // update the value for the region<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>        RegionStoreSequenceIds ids =<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>              loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        if (ids != null) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>          }<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        }<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        if (cachedLastFlushedSequenceId == null<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>            || lastFlushedSequenceId &gt; cachedLastFlushedSequenceId) {<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>          lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), lastFlushedSequenceId);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        }<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      }<a name="line.1903"></a>
+<span class="sourceLineNo">1725</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>        recoveredRegions.add(encodedRegionName);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    }<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span><a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>    /**<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>     * Helper function to group WALEntries to individual region servers<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>     * @throws IOException<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>     */<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      for (Entry entry : entries) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        WALEdit edit = entry.getEdit();<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>        TableName table = entry.getKey().getTablename();<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        // clear scopes which isn't needed for recovery<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        entry.getKey().setScopes(null);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // skip edits of non-existent tables<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>          this.skippedEdits.incrementAndGet();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>          continue;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        boolean needSkip = false;<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        HRegionLocation loc = null;<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        String locKey = null;<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span><a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        for (Cell cell : cells) {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>          boolean isCompactionEntry = false;<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>              try {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>                  .toByteArray());<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>                row = regionName[1]; // startKey of the region<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>                isCompactionEntry = true;<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>              } catch (Exception ex) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>                skippedCells.add(cell);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>                continue;<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>              }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            } else {<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>              skippedCells.add(cell);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>              continue;<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>            }<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          }<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span><a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          try {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>            loc =<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>                  encodeRegionNameStr);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>            // skip replaying the compaction if the region is gone<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>                  + encodeRegionNameStr);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>              needSkip = true;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>            }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>          } catch (TableNotFoundException ex) {<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>            // table has been deleted so skip edits of the table<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>                + encodeRegionNameStr);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>            if (nonExistentTables == null) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>            }<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>            nonExistentTables.add(table);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>            this.skippedEdits.incrementAndGet();<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>            needSkip = true;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>            break;<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          }<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span><a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>          cachedLastFlushedSequenceId =<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>          if (cachedLastFlushedSequenceId != null<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            // skip the whole WAL entry<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>            this.skippedEdits.incrementAndGet();<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>            needSkip = true;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            break;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>          } else {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>            if (maxStoreSequenceIds == null) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>              maxStoreSequenceIds =<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>            }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            if (maxStoreSequenceIds != null) {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>                skippedCells.add(cell);<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                continue;<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              }<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>            }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>          }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        }<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>        // skip the edit<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        if (loc == null || needSkip) continue;<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span><a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (!skippedCells.isEmpty()) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          cells.removeAll(skippedCells);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>        synchronized (serverToBufferQueueMap) {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>          if (queue == null) {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            queue =<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>        }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>        // store regions we have recovered so far<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span><a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    /**<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>     * destination region is online for replay.<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>     * @throws IOException<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>     */<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      // fetch location from cache<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      if(loc != null) return loc;<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      if (loc == null) {<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>            + " of table:" + table);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      }<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      // check if current row moves to a different region due to region merge/split<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        // originalEncodedRegionName should have already flushed<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      Long lastFlushedSequenceId = -1l;<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      if (!isRecovering.get()) {<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>        // been moved to somewhere before hosting RS fails<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>            + " because it's not in recovering.");<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      } else {<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        Long cachedLastFlushedSequenceId =<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        // update the value for the region<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>        RegionStoreSequenceIds ids =<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>              loc.getRegionInfo().getEncodedName());<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>        if (ids != null) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>          }<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        }<a name="line.1903"></a>
 <span class="sourceLineNo">1904</span><a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      onlineRegions.put(loc.getRegionInfo().getEncodedName(), loc);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      return loc;<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span><a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>    private void processWorkItems(String key, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; actions)<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>        throws IOException {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>      RegionServerWriter rsw = null;<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span><a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long startTime = System.nanoTime();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      try {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        rsw = getRegionServerWriter(key);<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>        rsw.sink.replayEntries(actions);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>        // Pass along summary statistics<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        rsw.incrementEdits(actions.size());<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>        rsw.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      } catch (IOException e) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        throw e;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    /**<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>     * Wait until region is online on the destination region server<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>     * @param loc<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>     * @param row<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>     * @param timeout How long to wait<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>     * @param isRecovering Recovering state of the region interested on destination region server.<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>     * @return True when region is online on the destination region server<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>     * @throws InterruptedException<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>     */<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    private HRegionLocation waitUntilRegionOnline(HRegionLocation loc, byte[] row,<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>        final long timeout, AtomicBoolean isRecovering)<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>        throws IOException {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      final long endTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      final long pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      boolean reloadLocation = false;<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      TableName tableName = loc.getRegionInfo().getTable();<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      int tries = 0;<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      Throwable cause = null;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>      while (endTime &gt; EnvironmentEdgeManager.currentTime()) {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>        try {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          // Try and get regioninfo from the hosting server.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          HConnection hconn = getConnectionByTableName(tableName);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          if(reloadLocation) {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            loc = hconn.getRegionLocation(tableName, row, true);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          }<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          BlockingInterface remoteSvr = hconn.getAdmin(loc.getServerName());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          HRegionInfo region = loc.getRegionInfo();<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>          try {<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>            GetRegionInfoRequest request =<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>                RequestConverter.buildGetRegionInfoRequest(region.getRegionName());<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            GetRegionInfoResponse response = remoteSvr.getRegionInfo(null, request);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>            if (HRegionInfo.convert(response.getRegionInfo()) != null) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>              isRecovering.set((response.hasIsRecovering()) ? response.getIsRecovering() : true);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>              return loc;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            }<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          } catch (ServiceException se) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>          }<a name="line.1966"></a

<TRUNCATED>

[51/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.


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

Branch: refs/heads/asf-site
Commit: 32d40534a16652314d977fa2149519dcef0e1a1a
Parents: d917c66
Author: jenkins <bu...@apache.org>
Authored: Tue Dec 22 15:16:29 2015 +0000
Committer: Misty Stanley-Jones <ms...@cloudera.com>
Committed: Wed Dec 23 09:22:26 2015 +1000

----------------------------------------------------------------------
 acid-semantics.html                             |     4 +-
 apache_hbase_reference_guide.pdf                |   Bin 14189777 -> 14203192 bytes
 apache_hbase_reference_guide.pdfmarks           |     4 +-
 book.html                                       |  2518 +-
 bulk-loads.html                                 |     4 +-
 checkstyle-aggregate.html                       | 21610 ++++++++---------
 checkstyle.rss                                  |    18 +-
 coc.html                                        |     4 +-
 cygwin.html                                     |     4 +-
 dependencies.html                               |     4 +-
 dependency-convergence.html                     |     6 +-
 dependency-info.html                            |     4 +-
 dependency-management.html                      |     6 +-
 devapidocs/allclasses-frame.html                |     1 -
 devapidocs/allclasses-noframe.html              |     1 -
 devapidocs/constant-values.html                 |    19 -
 devapidocs/index-all.html                       |    71 +-
 .../org/apache/hadoop/hbase/ScheduledChore.html |     2 +-
 .../org/apache/hadoop/hbase/class-use/Cell.html |    15 +
 .../hadoop/hbase/class-use/ServerName.html      |     4 +-
 .../class-use/InterfaceAudience.Private.html    |   173 +-
 .../class-use/InterfaceStability.Stable.html    |    30 +-
 .../hbase/classification/package-tree.html      |     6 +-
 ...ClientSmallScanner.SmallScannerCallable.html |     4 +-
 .../org/apache/hadoop/hbase/client/HTable.html  |   120 +-
 .../hbase/client/ReversedScannerCallable.html   |     4 +-
 .../hadoop/hbase/client/ScannerCallable.html    |   122 +-
 ...ScannerCallableWithReplicas.RetryingRPC.html |    24 +-
 .../client/ScannerCallableWithReplicas.html     |    61 +-
 .../hadoop/hbase/client/package-tree.html       |     2 +-
 ...ManagerCoordination.CreateAsyncCallback.html |     2 +-
 ...rCoordination.CreateRescanAsyncCallback.html |     2 +-
 ...ManagerCoordination.DeleteAsyncCallback.html |     2 +-
 ...anagerCoordination.GetDataAsyncCallback.html |     2 +-
 ...WorkerCoordination.GetDataAsyncCallback.html |     2 +-
 .../hadoop/hbase/executor/package-tree.html     |     2 +-
 .../hadoop/hbase/filter/package-tree.html       |     4 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     6 +-
 .../hadoop/hbase/ipc/MetricsHBaseServer.html    |    72 +-
 .../class-use/MetricsHBaseServerWrapper.html    |    92 +
 .../apache/hadoop/hbase/ipc/package-use.html    |    19 +
 .../hadoop/hbase/mapreduce/package-tree.html    |     4 +-
 .../hadoop/hbase/master/package-tree.html       |     4 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    10 +-
 .../hadoop/hbase/quotas/package-tree.html       |     2 +-
 .../hbase/regionserver/RSRpcServices.html       |     4 +-
 .../class-use/MetricsRegionServerWrapper.html   |    18 +-
 .../hadoop/hbase/regionserver/package-tree.html |    24 +-
 .../hadoop/hbase/regionserver/wal/WALEdit.html  |    58 +-
 ...erClusterReplicationEndpoint.Replicator.html |    10 +-
 .../HBaseInterClusterReplicationEndpoint.html   |     8 +-
 .../ReplicationSinkManager.SinkPeer.html        |    12 +-
 .../regionserver/ReplicationSinkManager.html    |    72 +-
 .../hadoop/hbase/rest/model/package-tree.html   |     2 +-
 .../hadoop/hbase/security/package-tree.html     |     2 +-
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |   210 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |    84 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    42 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |   120 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |    48 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    24 +-
 .../ServerMetricsTmpl.ImplData.html             |    53 +-
 .../regionserver/ServerMetricsTmpl.Intf.html    |     4 +-
 .../tmpl/regionserver/ServerMetricsTmpl.html    |    48 +-
 .../regionserver/ServerMetricsTmplImpl.html     |    47 +-
 ...BoundedCompletionService.QueueingFuture.html |     4 +-
 .../util/BoundedConcurrentLinkedQueue.html      |   518 -
 .../util/BoundedPriorityBlockingQueue.html      |     4 +-
 .../class-use/BoundedConcurrentLinkedQueue.html |   115 -
 .../apache/hadoop/hbase/util/package-frame.html |     1 -
 .../hadoop/hbase/util/package-summary.html      |   302 +-
 .../apache/hadoop/hbase/util/package-tree.html  |     9 +-
 .../WALSplitter.CorruptedLogFileException.html  |     6 +-
 ...WALSplitter.LogRecoveredEditsOutputSink.html |     6 +-
 .../wal/WALSplitter.LogReplayOutputSink.html    |    60 +-
 .../hbase/wal/WALSplitter.MutationReplay.html   |    12 +-
 .../wal/WALSplitter.RegionServerWriter.html     |     8 +-
 .../hbase/wal/WALSplitter.SinkWriter.html       |    16 +-
 .../hbase/wal/WALSplitter.WriterAndPath.html    |     8 +-
 .../apache/hadoop/hbase/wal/WALSplitter.html    |     2 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 devapidocs/overview-tree.html                   |     1 -
 devapidocs/serialized-form.html                 |    26 -
 .../hbase/ScheduledChore.ChoreServicer.html     |    12 +-
 .../org/apache/hadoop/hbase/ScheduledChore.html |    12 +-
 .../hadoop/hbase/client/ClientScanner.html      |     4 +-
 .../org/apache/hadoop/hbase/client/HTable.html  |  2373 +-
 .../hadoop/hbase/client/ScannerCallable.html    |   816 +-
 ...ScannerCallableWithReplicas.RetryingRPC.html |   600 +-
 .../client/ScannerCallableWithReplicas.html     |   600 +-
 .../hadoop/hbase/ipc/MetricsHBaseServer.html    |   170 +-
 ...SRpcServices.RegionScannerCloseCallBack.html |   625 +-
 .../RSRpcServices.RegionScannerHolder.html      |   625 +-
 ...pcServices.RegionScannerShippedCallBack.html |   625 +-
 ...RpcServices.RegionScannersCloseCallBack.html |   625 +-
 .../RSRpcServices.ScannerListener.html          |   625 +-
 .../hbase/regionserver/RSRpcServices.html       |   625 +-
 .../hadoop/hbase/regionserver/wal/WALEdit.html  |   402 +-
 ...erClusterReplicationEndpoint.Replicator.html |   355 +-
 .../HBaseInterClusterReplicationEndpoint.html   |   355 +-
 .../ReplicationSinkManager.SinkPeer.html        |   329 +-
 .../regionserver/ReplicationSinkManager.html    |   329 +-
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |   210 +-
 .../tmpl/master/MasterStatusTmpl.Intf.html      |   210 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |   210 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    60 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |   120 +-
 .../tmpl/regionserver/RSStatusTmpl.Intf.html    |   120 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |   120 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |   138 +-
 .../ServerMetricsTmpl.ImplData.html             |   285 +-
 .../regionserver/ServerMetricsTmpl.Intf.html    |   285 +-
 .../tmpl/regionserver/ServerMetricsTmpl.html    |   285 +-
 .../regionserver/ServerMetricsTmplImpl.html     |   479 +-
 .../util/BoundedConcurrentLinkedQueue.html      |   194 -
 .../WALSplitter.CorruptedLogFileException.html  |  1596 +-
 .../hbase/wal/WALSplitter.EntryBuffers.html     |  1596 +-
 ...WALSplitter.LogRecoveredEditsOutputSink.html |  1596 +-
 .../wal/WALSplitter.LogReplayOutputSink.html    |  1596 +-
 .../hbase/wal/WALSplitter.MutationReplay.html   |  1596 +-
 .../hbase/wal/WALSplitter.OutputSink.html       |  1596 +-
 .../wal/WALSplitter.PipelineController.html     |  1596 +-
 .../wal/WALSplitter.RegionEntryBuffer.html      |  1596 +-
 .../wal/WALSplitter.RegionServerWriter.html     |  1596 +-
 .../hbase/wal/WALSplitter.SinkWriter.html       |  1596 +-
 .../hbase/wal/WALSplitter.WriterAndPath.html    |  1596 +-
 .../hbase/wal/WALSplitter.WriterThread.html     |  1596 +-
 .../apache/hadoop/hbase/wal/WALSplitter.html    |  1596 +-
 distribution-management.html                    |     4 +-
 export_control.html                             |     4 +-
 hbase-annotations/checkstyle.html               |     6 +-
 hbase-annotations/dependencies.html             |     6 +-
 hbase-annotations/dependency-convergence.html   |     8 +-
 hbase-annotations/dependency-info.html          |     6 +-
 hbase-annotations/dependency-management.html    |     8 +-
 hbase-annotations/distribution-management.html  |     6 +-
 hbase-annotations/index.html                    |     6 +-
 hbase-annotations/integration.html              |     6 +-
 hbase-annotations/issue-tracking.html           |     6 +-
 hbase-annotations/license.html                  |     6 +-
 hbase-annotations/mail-lists.html               |     6 +-
 hbase-annotations/plugin-management.html        |     6 +-
 hbase-annotations/plugins.html                  |     6 +-
 hbase-annotations/project-info.html             |     6 +-
 hbase-annotations/project-reports.html          |     6 +-
 hbase-annotations/project-summary.html          |     6 +-
 hbase-annotations/source-repository.html        |     6 +-
 hbase-annotations/team-list.html                |     6 +-
 hbase-spark/checkstyle.html                     |     6 +-
 hbase-spark/dependencies.html                   |    30 +-
 hbase-spark/dependency-convergence.html         |     8 +-
 hbase-spark/dependency-info.html                |     6 +-
 hbase-spark/dependency-management.html          |     8 +-
 hbase-spark/distribution-management.html        |     6 +-
 hbase-spark/index.html                          |     6 +-
 hbase-spark/integration.html                    |     6 +-
 hbase-spark/issue-tracking.html                 |     6 +-
 hbase-spark/license.html                        |     6 +-
 hbase-spark/mail-lists.html                     |     6 +-
 hbase-spark/plugin-management.html              |     6 +-
 hbase-spark/plugins.html                        |     6 +-
 hbase-spark/project-info.html                   |     6 +-
 hbase-spark/project-reports.html                |     6 +-
 hbase-spark/project-summary.html                |     6 +-
 hbase-spark/source-repository.html              |     6 +-
 hbase-spark/team-list.html                      |     6 +-
 index.html                                      |     4 +-
 integration.html                                |     4 +-
 issue-tracking.html                             |     4 +-
 license.html                                    |     4 +-
 mail-lists.html                                 |     4 +-
 metrics.html                                    |     4 +-
 modules.html                                    |     4 +-
 old_news.html                                   |     4 +-
 plugin-management.html                          |     4 +-
 plugins.html                                    |     4 +-
 poweredbyhbase.html                             |    18 +-
 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                                   |     8 +-
 supportingprojects.html                         |     4 +-
 team-list.html                                  |     4 +-
 testdevapidocs/allclasses-frame.html            |     2 +-
 testdevapidocs/allclasses-noframe.html          |     2 +-
 testdevapidocs/constant-values.html             |    38 +-
 testdevapidocs/index-all.html                   |    50 +-
 .../hbase/class-use/HBaseTestingUtility.html    |    22 +-
 .../hbase/client/TestFromClientSide3.html       |    18 +-
 .../hbase/client/TestIntraRowPagination.html    |     4 +-
 .../hadoop/hbase/client/TestLeaseRenewal.html   |   451 +
 .../hbase/client/TestMetaWithReplicas.html      |     4 +-
 .../hadoop/hbase/client/TestMultiParallel.html  |    36 +-
 .../client/class-use/TestLeaseRenewal.html      |   115 +
 .../hadoop/hbase/client/package-frame.html      |     1 +
 .../hadoop/hbase/client/package-summary.html    |    80 +-
 .../hadoop/hbase/client/package-tree.html       |     1 +
 .../hadoop/hbase/io/hfile/package-tree.html     |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    10 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     2 +-
 .../hbase/regionserver/TestRSStatusServlet.html |    41 +-
 .../hadoop/hbase/regionserver/package-tree.html |     2 +-
 .../apache/hadoop/hbase/test/package-tree.html  |     4 +-
 .../hbase/util/TestBoundedArrayQueue.html       |     4 +-
 .../util/TestBoundedConcurrentLinkedQueue.html  |   370 -
 .../util/TestBoundedPriorityBlockingQueue.html  |     4 +-
 .../TestBoundedConcurrentLinkedQueue.html       |   115 -
 .../apache/hadoop/hbase/util/package-frame.html |     1 -
 .../hadoop/hbase/util/package-summary.html      |   136 +-
 .../apache/hadoop/hbase/util/package-tree.html  |     1 -
 .../TestRecoverableZooKeeper.ZookeeperStub.html |     2 +-
 testdevapidocs/overview-tree.html               |     2 +-
 testdevapidocs/serialized-form.html             |    26 -
 .../hbase/client/TestFromClientSide3.html       |    27 +-
 .../hadoop/hbase/client/TestLeaseRenewal.html   |   197 +
 .../hadoop/hbase/client/TestMultiParallel.html  |  1125 +-
 .../hbase/regionserver/TestRSStatusServlet.html |   158 +-
 .../TestReplicationSinkManager.html             |    26 +-
 .../util/TestBoundedConcurrentLinkedQueue.html  |   233 -
 xref-test/allclasses-frame.html                 |     6 +-
 .../hbase/client/TestFromClientSide3.html       |    27 +-
 .../hadoop/hbase/client/TestLeaseRenewal.html   |   139 +
 .../hadoop/hbase/client/TestMultiParallel.html  |  1125 +-
 .../hadoop/hbase/client/package-frame.html      |     3 +
 .../hadoop/hbase/client/package-summary.html    |     5 +
 .../hbase/regionserver/TestRSStatusServlet.html |   158 +-
 .../TestReplicationSinkManager.html             |    26 +-
 .../util/TestBoundedConcurrentLinkedQueue.html  |   175 -
 .../apache/hadoop/hbase/util/package-frame.html |     3 -
 .../hadoop/hbase/util/package-summary.html      |     5 -
 xref/allclasses-frame.html                      |     3 -
 .../org/apache/hadoop/hbase/ScheduledChore.html |    12 +-
 .../hadoop/hbase/client/ClientScanner.html      |     4 +-
 xref/org/apache/hadoop/hbase/client/HTable.html |  2373 +-
 .../hadoop/hbase/client/ScannerCallable.html    |   816 +-
 .../client/ScannerCallableWithReplicas.html     |   600 +-
 .../hadoop/hbase/ipc/MetricsHBaseServer.html    |   170 +-
 .../hadoop/hbase/protobuf/RequestConverter.html |  2370 +-
 .../hbase/regionserver/RSRpcServices.html       |   625 +-
 .../hadoop/hbase/regionserver/wal/WALEdit.html  |   402 +-
 .../HBaseInterClusterReplicationEndpoint.html   |   355 +-
 .../regionserver/ReplicationSinkManager.html    |   329 +-
 .../hbase/tmpl/common/TaskMonitorTmpl.html      |    60 +-
 .../hbase/tmpl/common/TaskMonitorTmplImpl.html  |    16 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |   210 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    60 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |   120 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |   138 +-
 .../tmpl/regionserver/ServerMetricsTmpl.html    |   285 +-
 .../regionserver/ServerMetricsTmplImpl.html     |   479 +-
 .../util/BoundedConcurrentLinkedQueue.html      |   136 -
 .../apache/hadoop/hbase/util/package-frame.html |     3 -
 .../hadoop/hbase/util/package-summary.html      |     5 -
 .../apache/hadoop/hbase/wal/WALSplitter.html    |  1596 +-
 258 files changed, 38379 insertions(+), 38761 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 6bde06b..61b11f4 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -600,7 +600,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 60ee03d..7f6d355 100644
Binary files a/apache_hbase_reference_guide.pdf and b/apache_hbase_reference_guide.pdf differ

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/apache_hbase_reference_guide.pdfmarks
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdfmarks b/apache_hbase_reference_guide.pdfmarks
index 514798d..c719f8e 100644
--- a/apache_hbase_reference_guide.pdfmarks
+++ b/apache_hbase_reference_guide.pdfmarks
@@ -2,8 +2,8 @@
   /Author (Apache HBase Team)
   /Subject ()
   /Keywords ()
-  /ModDate (D:20151218145710)
-  /CreationDate (D:20151218145710)
+  /ModDate (D:20151222151303)
+  /CreationDate (D:20151222151303)
   /Creator (Asciidoctor PDF 1.5.0.alpha.6, based on Prawn 1.2.1)
   /Producer ()
   /DOCINFO pdfmark


[47/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index 554e49c..18de9c4 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,7 +25,7 @@ under the License.
     <language>en-us</language>
     <copyright>&#169;2007 - 2015 The Apache Software Foundation</copyright>
     <item>
-      <title>File: 1655,
+      <title>File: 1654,
              Errors: 13075,
              Warnings: 0,
              Infos: 0
@@ -13010,20 +13010,6 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.BoundedConcurrentLinkedQueue.java">org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.java</a>
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  1
-                </td>
-              </tr>
-                          <tr>
-                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.GeneralBulkAssigner.java">org/apache/hadoop/hbase/master/GeneralBulkAssigner.java</a>
                 </td>
                 <td>
@@ -18969,7 +18955,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  2
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 328e3f1..728c5b8 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -331,7 +331,7 @@ For flagrant violations requiring a firm response the PMC may opt to skip early
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/cygwin.html
----------------------------------------------------------------------
diff --git a/cygwin.html b/cygwin.html
index f213e65..d661b9e 100644
--- a/cygwin.html
+++ b/cygwin.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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Installing Apache HBase (TM) on Windows using Cygwin</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -673,7 +673,7 @@ Now your <b>HBase </b>server is running, <b>start coding</b> and build that next
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 5e35aa3..471aa9c 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -518,7 +518,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 80287ea..7557161 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -1254,7 +1254,7 @@
 <td>
 <table border="0" class="table table-striped">
 <tr class="b">
-<td width="25%">3.4.7</td>
+<td width="25%">3.4.6</td>
 <td>
 <ol style="list-style-type: lower-alpha">
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-client">org.apache.hbase:hbase-client</a></li>
@@ -1592,7 +1592,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 8bc88c7..386c626 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -312,7 +312,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 6861269..5b5585e 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="20151218" />
+    <meta name="Date-Revision-yyyymmdd" content="20151222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -553,7 +553,7 @@
 <tr class="a">
 <td>org.apache.zookeeper</td>
 <td>zookeeper</td>
-<td>3.4.7</td>
+<td>3.4.6</td>
 <td>jar</td>
 <td>-</td></tr>
 <tr class="b">
@@ -786,7 +786,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-frame.html b/devapidocs/allclasses-frame.html
index 8d25544..09153c3 100644
--- a/devapidocs/allclasses-frame.html
+++ b/devapidocs/allclasses-frame.html
@@ -151,7 +151,6 @@
 <li><a href="org/apache/hadoop/hbase/util/BoundedArrayQueue.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">BoundedArrayQueue</a></li>
 <li><a href="org/apache/hadoop/hbase/io/BoundedByteBufferPool.html" title="class in org.apache.hadoop.hbase.io" target="classFrame">BoundedByteBufferPool</a></li>
 <li><a href="org/apache/hadoop/hbase/util/BoundedCompletionService.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">BoundedCompletionService</a></li>
-<li><a href="org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">BoundedConcurrentLinkedQueue</a></li>
 <li><a href="org/apache/hadoop/hbase/wal/BoundedGroupingStrategy.html" title="class in org.apache.hadoop.hbase.wal" target="classFrame">BoundedGroupingStrategy</a></li>
 <li><a href="org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">BoundedPriorityBlockingQueue</a></li>
 <li><a href="org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">BoundedPriorityBlockingQueue.PriorityQueue</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-noframe.html b/devapidocs/allclasses-noframe.html
index 4cdd705..d36fbf2 100644
--- a/devapidocs/allclasses-noframe.html
+++ b/devapidocs/allclasses-noframe.html
@@ -151,7 +151,6 @@
 <li><a href="org/apache/hadoop/hbase/util/BoundedArrayQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedArrayQueue</a></li>
 <li><a href="org/apache/hadoop/hbase/io/BoundedByteBufferPool.html" title="class in org.apache.hadoop.hbase.io">BoundedByteBufferPool</a></li>
 <li><a href="org/apache/hadoop/hbase/util/BoundedCompletionService.html" title="class in org.apache.hadoop.hbase.util">BoundedCompletionService</a></li>
-<li><a href="org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a></li>
 <li><a href="org/apache/hadoop/hbase/wal/BoundedGroupingStrategy.html" title="class in org.apache.hadoop.hbase.wal">BoundedGroupingStrategy</a></li>
 <li><a href="org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue</a></li>
 <li><a href="org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue.PriorityQueue</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 9da1dba..87acf79 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -19606,25 +19606,6 @@
 </li>
 <li class="blockList">
 <table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
-<caption><span>org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a>&lt;<a href="org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt;</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th scope="col">Constant Field</th>
-<th class="colLast" scope="col">Value</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.util.BoundedConcurrentLinkedQueue.serialVersionUID">
-<!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;long</code></td>
-<td><code><a href="org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#serialVersionUID">serialVersionUID</a></code></td>
-<td class="colLast"><code>1L</code></td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">ByteBufferArray</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index bf86e70..d1c9343 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -954,8 +954,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/types/CopyOnWriteArrayMap.ArrayValueCollection.html#addAll(java.util.Collection)">addAll(Collection&lt;? extends V&gt;)</a></span> - Method in class org.apache.hadoop.hbase.types.<a href="./org/apache/hadoop/hbase/types/CopyOnWriteArrayMap.ArrayValueCollection.html" title="class in org.apache.hadoop.hbase.types">CopyOnWriteArrayMap.ArrayValueCollection</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#addAll(java.util.Collection)">addAll(Collection&lt;? extends T&gt;)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/ConcatenatedLists.html#addAll(java.util.Collection)">addAll(Collection&lt;? extends T&gt;)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/ConcatenatedLists.html" title="class in org.apache.hadoop.hbase.util">ConcatenatedLists</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/SortedCopyOnWriteSet.html#addAll(java.util.Collection)">addAll(Collection&lt;? extends E&gt;)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/SortedCopyOnWriteSet.html" title="class in org.apache.hadoop.hbase.util">SortedCopyOnWriteSet</a></dt>
@@ -4816,14 +4814,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedCompletionService.QueueingFuture.html#BoundedCompletionService.QueueingFuture(java.util.concurrent.Callable)">BoundedCompletionService.QueueingFuture(Callable&lt;V&gt;)</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedCompletionService.QueueingFuture.html" title="class in org.apache.hadoop.hbase.util">BoundedCompletionService.QueueingFuture</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">BoundedConcurrentLinkedQueue</span></a>&lt;<a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="type parameter in BoundedConcurrentLinkedQueue">T</a>&gt; - Class in <a href="./org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a></dt>
-<dd>
-<div class="block">A ConcurrentLinkedQueue that enforces a maximum queue size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#BoundedConcurrentLinkedQueue()">BoundedConcurrentLinkedQueue()</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#BoundedConcurrentLinkedQueue(long)">BoundedConcurrentLinkedQueue(long)</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/wal/BoundedGroupingStrategy.html" title="class in org.apache.hadoop.hbase.wal"><span class="strong">BoundedGroupingStrategy</span></a> - Class in <a href="./org/apache/hadoop/hbase/wal/package-summary.html">org.apache.hadoop.hbase.wal</a></dt>
 <dd>
 <div class="block">A WAL grouping strategy that limits the number of wal groups to
@@ -8117,7 +8107,9 @@
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/zookeeper/lock/ZKInterProcessLockBase.html#childZNode">childZNode</a></span> - Variable in class org.apache.hadoop.hbase.zookeeper.lock.<a href="./org/apache/hadoop/hbase/zookeeper/lock/ZKInterProcessLockBase.html" title="class in org.apache.hadoop.hbase.zookeeper.lock">ZKInterProcessLockBase</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#chooseSinks()">chooseSinks()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="./org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Refresh the list of sinks.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/HealthCheckChore.html#chore()">chore()</a></span> - Method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/HealthCheckChore.html" title="class in org.apache.hadoop.hbase">HealthCheckChore</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/balancer/BalancerChore.html#chore()">chore()</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="./org/apache/hadoop/hbase/master/balancer/BalancerChore.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerChore</a></dt>
@@ -8598,8 +8590,6 @@
 <dd>
 <div class="block">Similar to <a href="http://docs.oracle.com/javase/7/docs/api/java/nio/Buffer.html?is-external=true#clear()" title="class or interface in java.nio"><code>Buffer.clear()</code></a>.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#clear()">clear()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/ConcatenatedLists.html#clear()">clear()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/ConcatenatedLists.html" title="class in org.apache.hadoop.hbase.util">ConcatenatedLists</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#clear()">clear()</a></span> - Method in interface org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></dt>
@@ -19279,8 +19269,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/thrift/CallQueue.html#drainTo(java.util.Collection,%20int)">drainTo(Collection&lt;? super Runnable&gt;, int)</a></span> - Method in class org.apache.hadoop.hbase.thrift.<a href="./org/apache/hadoop/hbase/thrift/CallQueue.html" title="class in org.apache.hadoop.hbase.thrift">CallQueue</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#drainTo(java.util.Collection)">drainTo(Collection&lt;T&gt;)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html#drainTo(java.util.Collection)">drainTo(Collection&lt;? super E&gt;)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html#drainTo(java.util.Collection,%20int)">drainTo(Collection&lt;? super E&gt;, int)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue</a></dt>
@@ -28950,6 +28938,8 @@
 <div class="block">This utility method converts the name of the configured
  hash type to a symbolic constant.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#getHBaseServerWrapper()">getHBaseServerWrapper()</a></span> - Method in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html" title="class in org.apache.hadoop.hbase.ipc">MetricsHBaseServer</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ClusterStatus.html#getHBaseVersion()">getHBaseVersion()</a></span> - Method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/ClusterStatus.html" title="class in org.apache.hadoop.hbase">ClusterStatus</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/coprocessor/CoprocessorHost.Environment.html#getHBaseVersion()">getHBaseVersion()</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="./org/apache/hadoop/hbase/coprocessor/CoprocessorHost.Environment.html" title="class in org.apache.hadoop.hbase.coprocessor">CoprocessorHost.Environment</a></dt>
@@ -31277,6 +31267,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#getMoveTime()">getMoveTime()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#getMServerWrap()">getMServerWrap()</a></span> - Method in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl.ImplData</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/security/access/TableAuthManager.html#getMTime()">getMTime()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="./org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/MultiServerCallable.html#getMulti()">getMulti()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/MultiServerCallable.html" title="class in org.apache.hadoop.hbase.client">MultiServerCallable</a></dt>
@@ -31987,6 +31979,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/balancer/ClusterLoadState.html#getNumServers()">getNumServers()</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="./org/apache/hadoop/hbase/master/balancer/ClusterLoadState.html" title="class in org.apache.hadoop.hbase.master.balancer">ClusterLoadState</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#getNumSinks()">getNumSinks()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="./org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getNumStoreFiles()">getNumStoreFiles()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a></dt>
 <dd>
 <div class="block">Get the number of store files hosted on this region server.</div>
@@ -35443,7 +35437,7 @@
 <dd>
 <div class="block">Get replication Sink Metrics</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#getSinks()">getSinks()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="./org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#getSinksForTesting()">getSinksForTesting()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="./org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/EncodedDataBlock.html#getSize()">getSize()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/EncodedDataBlock.html" title="class in org.apache.hadoop.hbase.io.encoding">EncodedDataBlock</a></dt>
 <dd>
@@ -51396,6 +51390,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#m_metaLocation__IsNotDefault">m_metaLocation__IsNotDefault</a></span> - Variable in class org.apache.hadoop.hbase.tmpl.master.<a href="./org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl.ImplData</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#m_mServerWrap">m_mServerWrap</a></span> - Variable in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl.ImplData</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/mapred/TableOutputFormat.TableRecordWriter.html#m_mutator">m_mutator</a></span> - Variable in class org.apache.hadoop.hbase.mapred.<a href="./org/apache/hadoop/hbase/mapred/TableOutputFormat.TableRecordWriter.html" title="class in org.apache.hadoop.hbase.mapred">TableOutputFormat.TableRecordWriter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#m_mWrap">m_mWrap</a></span> - Variable in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl.ImplData</a></dt>
@@ -51799,7 +51795,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#makeRenderer(org.apache.hadoop.hbase.regionserver.HRegionServer)">makeRenderer(HRegionServer)</a></span> - Method in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#makeRenderer(org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">makeRenderer(MetricsRegionServerWrapper)</a></span> - Method in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#makeRenderer(org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper,%20org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">makeRenderer(MetricsRegionServerWrapper, MetricsHBaseServerWrapper)</a></span> - Method in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/quotas/QuotaTableUtil.html#makeScan(org.apache.hadoop.hbase.quotas.QuotaFilter)">makeScan(QuotaFilter)</a></span> - Static method in class org.apache.hadoop.hbase.quotas.<a href="./org/apache/hadoop/hbase/quotas/QuotaTableUtil.html" title="class in org.apache.hadoop.hbase.quotas">QuotaTableUtil</a></dt>
 <dd>&nbsp;</dd>
@@ -53022,8 +53018,6 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/LruCachedBlockQueue.html#maxSize">maxSize</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/LruCachedBlockQueue.html" title="class in org.apache.hadoop.hbase.io.hfile">LruCachedBlockQueue</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#maxSize">maxSize</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/PoolMap.ReusablePool.html#maxSize">maxSize</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/PoolMap.ReusablePool.html" title="class in org.apache.hadoop.hbase.util">PoolMap.ReusablePool</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/PoolMap.RoundRobinPool.html#maxSize">maxSize</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/PoolMap.RoundRobinPool.html" title="class in org.apache.hadoop.hbase.util">PoolMap.RoundRobinPool</a></dt>
@@ -55383,6 +55377,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/balancer/MetricsStochasticBalancerSourceImpl.html#mruCap">mruCap</a></span> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="./org/apache/hadoop/hbase/master/balancer/MetricsStochasticBalancerSourceImpl.html" title="class in org.apache.hadoop.hbase.master.balancer">MetricsStochasticBalancerSourceImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#mServerWrap">mServerWrap</a></span> - Variable in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmplImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/quotas/ThrottlingException.html#MSG_TYPE">MSG_TYPE</a></span> - Static variable in exception org.apache.hadoop.hbase.quotas.<a href="./org/apache/hadoop/hbase/quotas/ThrottlingException.html" title="class in org.apache.hadoop.hbase.quotas">ThrottlingException</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/quotas/ThrottlingException.html#MSG_WAIT">MSG_WAIT</a></span> - Static variable in exception org.apache.hadoop.hbase.quotas.<a href="./org/apache/hadoop/hbase/quotas/ThrottlingException.html" title="class in org.apache.hadoop.hbase.quotas">ThrottlingException</a></dt>
@@ -57830,8 +57826,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedArrayQueue.html#offer(E)">offer(E)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedArrayQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedArrayQueue</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#offer(T)">offer(T)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html#offer(E)">offer(E)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html#offer(E,%20long,%20java.util.concurrent.TimeUnit)">offer(E, long, TimeUnit)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue</a></dt>
@@ -60026,8 +60020,6 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedCompletionService.html#poll(long,%20java.util.concurrent.TimeUnit)">poll(long, TimeUnit)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedCompletionService.html" title="class in org.apache.hadoop.hbase.util">BoundedCompletionService</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#poll()">poll()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html#poll()">poll()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html#poll(long,%20java.util.concurrent.TimeUnit)">poll(long, TimeUnit)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue</a></dt>
@@ -68662,8 +68654,6 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/thrift/CallQueue.html#remainingCapacity()">remainingCapacity()</a></span> - Method in class org.apache.hadoop.hbase.thrift.<a href="./org/apache/hadoop/hbase/thrift/CallQueue.html" title="class in org.apache.hadoop.hbase.thrift">CallQueue</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#remainingCapacity()">remainingCapacity()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html#remainingCapacity()">remainingCapacity()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue.PriorityQueue</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html#remainingCapacity()">remainingCapacity()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue</a></dt>
@@ -68830,8 +68820,6 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/types/StructIterator.html#remove()">remove()</a></span> - Method in class org.apache.hadoop.hbase.types.<a href="./org/apache/hadoop/hbase/types/StructIterator.html" title="class in org.apache.hadoop.hbase.types">StructIterator</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#remove(java.lang.Object)">remove(Object)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html#remove(java.lang.Object)">remove(Object)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/ConcatenatedLists.Iterator.html#remove()">remove()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/ConcatenatedLists.Iterator.html" title="class in org.apache.hadoop.hbase.util">ConcatenatedLists.Iterator</a></dt>
@@ -69270,7 +69258,7 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#render(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.HRegionServer)">render(Writer, HRegionServer)</a></span> - Method in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#render(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">render(Writer, MetricsRegionServerWrapper)</a></span> - Method in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#render(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper,%20org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">render(Writer, MetricsRegionServerWrapper, MetricsHBaseServerWrapper)</a></span> - Method in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/master/AssignmentManagerStatusTmpl.Intf.html#renderNoFlush(java.io.Writer)">renderNoFlush(Writer)</a></span> - Method in interface org.apache.hadoop.hbase.tmpl.master.<a href="./org/apache/hadoop/hbase/tmpl/master/AssignmentManagerStatusTmpl.Intf.html" title="interface in org.apache.hadoop.hbase.tmpl.master">AssignmentManagerStatusTmpl.Intf</a></dt>
 <dd>&nbsp;</dd>
@@ -69322,10 +69310,12 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.Intf.html#renderNoFlush(java.io.Writer)">renderNoFlush(Writer)</a></span> - Method in interface org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.Intf.html" title="interface in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl.Intf</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#renderNoFlush(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">renderNoFlush(Writer, MetricsRegionServerWrapper)</a></span> - Method in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html#renderNoFlush(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper,%20org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">renderNoFlush(Writer, MetricsRegionServerWrapper, MetricsHBaseServerWrapper)</a></span> - Method in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#renderNoFlush(java.io.Writer)">renderNoFlush(Writer)</a></span> - Method in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmplImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/ScannerCallable.html#renew">renew</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/security/token/FsDelegationToken.html#renewer">renewer</a></span> - Variable in class org.apache.hadoop.hbase.security.token.<a href="./org/apache/hadoop/hbase/security/token/FsDelegationToken.html" title="class in org.apache.hadoop.hbase.security.token">FsDelegationToken</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/ClientScanner.html#renewLease()">renewLease()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/ClientScanner.html" title="class in org.apache.hadoop.hbase.client">ClientScanner</a></dt>
@@ -74741,8 +74731,6 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/UnknownScannerException.html#serialVersionUID">serialVersionUID</a></span> - Static variable in exception org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/UnknownScannerException.html" title="class in org.apache.hadoop.hbase">UnknownScannerException</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#serialVersionUID">serialVersionUID</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/FileSystemVersionException.html#serialVersionUID">serialVersionUID</a></span> - Static variable in exception org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/FileSystemVersionException.html" title="class in org.apache.hadoop.hbase.util">FileSystemVersionException</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html#serialVersionUID">serialVersionUID</a></span> - Static variable in exception org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.RegionRepairException</a></dt>
@@ -75145,6 +75133,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/rest/model/VersionModel.html#serverVersion">serverVersion</a></span> - Variable in class org.apache.hadoop.hbase.rest.model.<a href="./org/apache/hadoop/hbase/rest/model/VersionModel.html" title="class in org.apache.hadoop.hbase.rest.model">VersionModel</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html#serverWrapper">serverWrapper</a></span> - Variable in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html" title="class in org.apache.hadoop.hbase.ipc">MetricsHBaseServer</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html#service">service</a></span> - Variable in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.BlockingServiceAndInterface</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/RpcServer.Call.html#service">service</a></span> - Variable in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/RpcServer.Call.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Call</a></dt>
@@ -75594,6 +75584,10 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#setCatalogJanitorEnabled(boolean)">setCatalogJanitorEnabled(boolean)</a></span> - Method in class org.apache.hadoop.hbase.tmpl.master.<a href="./org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#setCells(java.util.ArrayList)">setCells(ArrayList&lt;Cell&gt;)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="./org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a></dt>
+<dd>
+<div class="block">This is not thread safe.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/DelegatingPayloadCarryingRpcController.html#setCellScanner(org.apache.hadoop.hbase.CellScanner)">setCellScanner(CellScanner)</a></span> - Method in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/DelegatingPayloadCarryingRpcController.html" title="class in org.apache.hadoop.hbase.ipc">DelegatingPayloadCarryingRpcController</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/PayloadCarryingRpcController.html#setCellScanner(org.apache.hadoop.hbase.CellScanner)">setCellScanner(CellScanner)</a></span> - Method in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/PayloadCarryingRpcController.html" title="class in org.apache.hadoop.hbase.ipc">PayloadCarryingRpcController</a></dt>
@@ -76831,6 +76825,8 @@ service.</div>
 <dd>
 <div class="block">Sets the mob threshold of the family.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#setMServerWrap(org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">setMServerWrap(MetricsHBaseServerWrapper)</a></span> - Method in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl.ImplData</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.CostFunction.html#setMultiplier(float)">setMultiplier(float)</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="./org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.CostFunction.html" title="class in org.apache.hadoop.hbase.master.balancer">StochasticLoadBalancer.CostFunction</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeBlockMeta.html#setMvccVersionDeltaWidth(int)">setMvccVersionDeltaWidth(int)</a></span> - Method in class org.apache.hadoop.hbase.codec.prefixtree.<a href="./org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeBlockMeta.html" title="class in org.apache.hadoop.hbase.codec.prefixtree">PrefixTreeBlockMeta</a></dt>
@@ -77342,6 +77338,13 @@ service.</div>
 <div class="block">Set the list of regions that will be reopened
  because of an update in table schema</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/ScannerCallable.html#setRenew(boolean)">setRenew(boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a></dt>
+<dd>
+<div class="block">Indicate whether we make a call only to renew the lease, but without affected the scanner in
+ any other way.</div>
+</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#setRenew(boolean)">setRenew(boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html" title="class in org.apache.hadoop.hbase.client">ScannerCallableWithReplicas</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Get.html#setReplicaId(int)">setReplicaId(int)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Query.html#setReplicaId(int)">setReplicaId(int)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Query.html" title="class in org.apache.hadoop.hbase.client">Query</a></dt>
@@ -79178,10 +79181,6 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedArrayQueue.html#size()">size()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedArrayQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedArrayQueue</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#size">size</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html#size()">size()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedConcurrentLinkedQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedConcurrentLinkedQueue</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html#size()">size()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue.PriorityQueue</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html#size()">size()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue</a></dt>
@@ -93450,7 +93449,7 @@ the order they are declared.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/RegionListTmplImpl.html#__jamon_innerUnit__memstoreStats(java.io.Writer,%20java.util.List)">__jamon_innerUnit__memstoreStats(Writer, List&lt;HRegionInfo&gt;)</a></span> - Method in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/RegionListTmplImpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RegionListTmplImpl</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#__jamon_innerUnit__queueStats(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper)">__jamon_innerUnit__queueStats(Writer, MetricsRegionServerWrapper)</a></span> - Method in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmplImpl</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html#__jamon_innerUnit__queueStats(java.io.Writer,%20org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper,%20org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper)">__jamon_innerUnit__queueStats(Writer, MetricsRegionServerWrapper, MetricsHBaseServerWrapper)</a></span> - Method in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="./org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmplImpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmplImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/tmpl/master/RegionServerListTmplImpl.html#__jamon_innerUnit__requestStats(java.io.Writer,%20org.apache.hadoop.hbase.ServerName[])">__jamon_innerUnit__requestStats(Writer, ServerName[])</a></span> - Method in class org.apache.hadoop.hbase.tmpl.master.<a href="./org/apache/hadoop/hbase/tmpl/master/RegionServerListTmplImpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">RegionServerListTmplImpl</a></dt>
 <dd>&nbsp;</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/ScheduledChore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ScheduledChore.html b/devapidocs/org/apache/hadoop/hbase/ScheduledChore.html
index e9ea78b..998db4a 100644
--- a/devapidocs/org/apache/hadoop/hbase/ScheduledChore.html
+++ b/devapidocs/org/apache/hadoop/hbase/ScheduledChore.html
@@ -747,7 +747,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimeUnit</h4>
-<pre>public final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.287">getTimeUnit</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.287">getTimeUnit</a>()</pre>
 </li>
 </ul>
 <a name="isInitialChoreComplete()">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html b/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
index 308031f..44f2cf0 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
@@ -5607,6 +5607,21 @@ service.</div>
 </tr>
 </tbody>
 </table>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Method parameters in <a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a> with type arguments of type <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="strong">WALEdit.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#setCells(java.util.ArrayList)">setCells</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells)</code>
+<div class="block">This is not thread safe.</div>
+</td>
+</tr>
+</tbody>
+</table>
 </li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.replication">
 <!--   -->

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/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 66603a0..bfe20ef 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
@@ -4001,8 +4001,8 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
-<td class="colLast"><span class="strong">ReplicationSinkManager.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#getSinks()">getSinks</a></strong>()</code>&nbsp;</td>
+<td class="colFirst"><code>protected <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
+<td class="colLast"><span class="strong">ReplicationSinkManager.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#getSinksForTesting()">getSinksForTesting</a></strong>()</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>


[18/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html
index f3aed1b..0597160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html
@@ -1513,810 +1513,816 @@
 <span class="sourceLineNo">1505</span>      if (maxSeqIdInStores == null || maxSeqIdInStores.isEmpty()) {<a name="line.1505"></a>
 <span class="sourceLineNo">1506</span>        return;<a name="line.1506"></a>
 <span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        if (!CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          // or the master was crashed before and we can not get the information.<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>          if (maxSeqId != null &amp;&amp; maxSeqId.longValue() &gt;= logEntry.getKey().getLogSeqNum()) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>            skippedCells.add(cell);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>          }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      }<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (!skippedCells.isEmpty()) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        logEntry.getEdit().getCells().removeAll(skippedCells);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1508</span>      // Create the array list for the cells that aren't filtered.<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // We make the assumption that most cells will be kept.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      ArrayList&lt;Cell&gt; keptCells = new ArrayList&lt;Cell&gt;(logEntry.getEdit().getCells().size());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>          keptCells.add(cell);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        } else {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          // or the master was crashed before and we can not get the information.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>          if (maxSeqId == null || maxSeqId.longValue() &lt; logEntry.getKey().getLogSeqNum()) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>            keptCells.add(cell);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      }<a name="line.1523"></a>
 <span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    @Override<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (entries.isEmpty()) {<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        return;<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      WriterAndPath wap = null;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      long startTime = System.nanoTime();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      try {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        int editsCount = 0;<a name="line.1537"></a>
+<span class="sourceLineNo">1525</span>      // Anything in the keptCells array list is still live.<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // So rather than removing the cells from the array list<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      // which would be an O(n^2) operation, we just replace the list<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      logEntry.getEdit().setCells(keptCells);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    @Override<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      if (entries.isEmpty()) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>        return;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      }<a name="line.1537"></a>
 <span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        for (Entry logEntry : entries) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          if (wap == null) {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>            wap = getWriterAndPath(logEntry);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>            if (wap == null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>              if (LOG.isDebugEnabled()) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>              }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>              return;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          filterCellByStore(logEntry);<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            wap.w.append(logEntry);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            editsCount++;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          } else {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>            wap.incrementSkippedEdits(1);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>          }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        // Pass along summary statistics<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        wap.incrementEdits(editsCount);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      } catch (IOException e) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          e = e instanceof RemoteException ?<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>        throw e;<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    }<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span><a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    /**<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>     */<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    @Override<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      synchronized (writers) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>        }<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      return ret;<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span><a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    @Override<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    public int getNumberOfRecoveredRegions() {<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      return writers.size();<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>  }<a name="line.1587"></a>
+<span class="sourceLineNo">1539</span>      WriterAndPath wap = null;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      long startTime = System.nanoTime();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      try {<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        int editsCount = 0;<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span><a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>        for (Entry logEntry : entries) {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>          if (wap == null) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>            wap = getWriterAndPath(logEntry);<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>            if (wap == null) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>              if (LOG.isDebugEnabled()) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>              }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>              return;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>            }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          filterCellByStore(logEntry);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            wap.w.append(logEntry);<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            editsCount++;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          } else {<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>            wap.incrementSkippedEdits(1);<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>          }<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        // Pass along summary statistics<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        wap.incrementEdits(editsCount);<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      } catch (IOException e) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>          e = e instanceof RemoteException ?<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>        throw e;<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    }<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span><a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>    /**<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>     */<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    @Override<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      synchronized (writers) {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      return ret;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    }<a name="line.1587"></a>
 <span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  /**<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>   */<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  public abstract static class SinkWriter {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    /* Count of edits written to this path */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    long editsWritten = 0;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    /* Count of edits skipped to this path */<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    long editsSkipped = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    /* Number of nanos spent writing to this log */<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    long nanosSpent = 0;<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    void incrementEdits(int edits) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      editsWritten += edits;<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    void incrementSkippedEdits(int skipped) {<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      editsSkipped += skipped;<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span><a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    void incrementNanoTime(long nanos) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      nanosSpent += nanos;<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    }<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  }<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span><a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>  /**<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * data written to this output.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   */<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    final Path p;<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    final Writer w;<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      this.p = p;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      this.w = w;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>  }<a name="line.1625"></a>
+<span class="sourceLineNo">1589</span>    @Override<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    public int getNumberOfRecoveredRegions() {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      return writers.size();<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  }<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span><a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>  /**<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>   */<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>  public abstract static class SinkWriter {<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    /* Count of edits written to this path */<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    long editsWritten = 0;<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    /* Count of edits skipped to this path */<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    long editsSkipped = 0;<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    /* Number of nanos spent writing to this log */<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    long nanosSpent = 0;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span><a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    void incrementEdits(int edits) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      editsWritten += edits;<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>    void incrementSkippedEdits(int skipped) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      editsSkipped += skipped;<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span><a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    void incrementNanoTime(long nanos) {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      nanosSpent += nanos;<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span><a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>  /**<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>   * data written to this output.<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>   */<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    final Path p;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    final Writer w;<a name="line.1625"></a>
 <span class="sourceLineNo">1626</span><a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>  /**<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>   */<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    private static final String KEY_DELIMITER = "#";<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    private long waitRegionOnlineTimeOut;<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    // online encoded region name -&gt; region location map<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span><a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>    /**<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>     * Map key -&gt; value layout<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>     */<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span><a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        int numWriters) {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      super(controller, entryBuffers, numWriters);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      this.waitRegionOnlineTimeOut =<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>        entryBuffers, numWriters);<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span><a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>    @Override<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      if (entries.isEmpty()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        return;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span><a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      // check if current region in a disabling or disabled table<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        // need fall back to old way<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>        // store regions we have recovered so far<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        return;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      }<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span><a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      // group entries by region servers<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      groupEditsByServer(entries);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span><a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      // process workitems<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      String maxLocKey = null;<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      int maxSize = 0;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>            maxSize = curQueue.size();<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>            maxQueue = curQueue;<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>            maxLocKey = entry.getKey();<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>          }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        if (maxSize &lt; minBatchSize<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>          // buffer more to process<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>          return;<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        } else if (maxSize &gt; 0) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>        }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span><a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>      if (maxSize &gt; 0) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>        recoveredRegions.add(encodedRegionName);<a name="line.1721"></a>
+<span class="sourceLineNo">1627</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      this.p = p;<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      this.w = w;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>    }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>  }<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span><a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>  /**<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>   */<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    private static final String KEY_DELIMITER = "#";<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>    private long waitRegionOnlineTimeOut;<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    // online encoded region name -&gt; region location map<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span><a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>    /**<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>     * Map key -&gt; value layout<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>     */<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span><a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span><a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>        int numWriters) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      super(controller, entryBuffers, numWriters);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      this.waitRegionOnlineTimeOut =<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>        entryBuffers, numWriters);<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    @Override<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (entries.isEmpty()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        return;<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      }<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span><a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      // check if current region in a disabling or disabled table<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // need fall back to old way<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>        // store regions we have recovered so far<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        return;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span><a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      // group entries by region servers<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      groupEditsByServer(entries);<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span><a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      // process workitems<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      String maxLocKey = null;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>      int maxSize = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>            maxSize = curQueue.size();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>            maxQueue = curQueue;<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>            maxLocKey = entry.getKey();<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>          }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>        }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        if (maxSize &lt; minBatchSize<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>          // buffer more to process<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>          return;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        } else if (maxSize &gt; 0) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span><a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      if (maxSize &gt; 0) {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
 <span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
 <span class="sourceLineNo">1724</span><a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    /**<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>     * Helper function to group WALEntries to individual region servers<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>     * @throws IOException<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>     */<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      for (Entry entry : entries) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>        WALEdit edit = entry.getEdit();<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        TableName table = entry.getKey().getTablename();<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>        // clear scopes which isn't needed for recovery<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>        entry.getKey().setScopes(null);<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>        // skip edits of non-existent tables<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>          this.skippedEdits.incrementAndGet();<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>          continue;<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        }<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span><a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        boolean needSkip = false;<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        HRegionLocation loc = null;<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        String locKey = null;<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span><a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>        for (Cell cell : cells) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>          boolean isCompactionEntry = false;<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>              try {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>                  .toByteArray());<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>                row = regionName[1]; // startKey of the region<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>                isCompactionEntry = true;<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>              } catch (Exception ex) {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>                skippedCells.add(cell);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>                continue;<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>              }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>            } else {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>              skippedCells.add(cell);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>              continue;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>            }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>          try {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>            loc =<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>                  encodeRegionNameStr);<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            // skip replaying the compaction if the region is gone<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>                  + encodeRegionNameStr);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>              needSkip = true;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>            }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>          } catch (TableNotFoundException ex) {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>            // table has been deleted so skip edits of the table<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>                + encodeRegionNameStr);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>            if (nonExistentTables == null) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>            }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            nonExistentTables.add(table);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>            this.skippedEdits.incrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>            needSkip = true;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>            break;<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          }<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span><a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          cachedLastFlushedSequenceId =<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          if (cachedLastFlushedSequenceId != null<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            // skip the whole WAL entry<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            this.skippedEdits.incrementAndGet();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            needSkip = true;<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            break;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } else {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            if (maxStoreSequenceIds == null) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>              maxStoreSequenceIds =<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            }<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            if (maxStoreSequenceIds != null) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>                skippedCells.add(cell);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                continue;<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>              }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>            }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>          }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        }<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>        // skip the edit<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        if (loc == null || needSkip) continue;<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>        if (!skippedCells.isEmpty()) {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          cells.removeAll(skippedCells);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        synchronized (serverToBufferQueueMap) {<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>          if (queue == null) {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>            queue =<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>          }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>        }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        // store regions we have recovered so far<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      }<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    }<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span><a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    /**<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>     * destination region is online for replay.<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>     * @throws IOException<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>     */<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>      // fetch location from cache<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      if(loc != null) return loc;<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      if (loc == null) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>            + " of table:" + table);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      // check if current row moves to a different region due to region merge/split<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        // originalEncodedRegionName should have already flushed<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      }<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span><a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      Long lastFlushedSequenceId = -1l;<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      if (!isRecovering.get()) {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>        // been moved to somewhere before hosting RS fails<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>            + " because it's not in recovering.");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      } else {<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>        Long cachedLastFlushedSequenceId =<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span><a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        // update the value for the region<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>        RegionStoreSequenceIds ids =<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>              loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        if (ids != null) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>          }<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        }<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        if (cachedLastFlushedSequenceId == null<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>            || lastFlushedSequenceId &gt; cachedLastFlushedSequenceId) {<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>          lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), lastFlushedSequenceId);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        }<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      }<a name="line.1903"></a>
+<span class="sourceLineNo">1725</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>        recoveredRegions.add(encodedRegionName);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    }<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span><a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>    /**<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>     * Helper function to group WALEntries to individual region servers<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>     * @throws IOException<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>     */<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      for (Entry entry : entries) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        WALEdit edit = entry.getEdit();<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>        TableName table = entry.getKey().getTablename();<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        // clear scopes which isn't needed for recovery<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        entry.getKey().setScopes(null);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // skip edits of non-existent tables<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>          this.skippedEdits.incrementAndGet();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>          continue;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        boolean needSkip = false;<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        HRegionLocation loc = null;<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        String locKey = null;<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span><a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        for (Cell cell : cells) {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>          boolean isCompactionEntry = false;<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>              try {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>                  .toByteArray());<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>                row = regionName[1]; // startKey of the region<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>                isCompactionEntry = true;<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>              } catch (Exception ex) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>                skippedCells.add(cell);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>                continue;<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>              }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            } else {<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>              skippedCells.add(cell);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>              continue;<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>            }<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          }<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span><a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          try {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>            loc =<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>                  encodeRegionNameStr);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>            // skip replaying the compaction if the region is gone<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>                  + encodeRegionNameStr);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>              needSkip = true;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>            }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>          } catch (TableNotFoundException ex) {<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>            // table has been deleted so skip edits of the table<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>                + encodeRegionNameStr);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>            if (nonExistentTables == null) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>            }<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>            nonExistentTables.add(table);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>            this.skippedEdits.incrementAndGet();<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>            needSkip = true;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>            break;<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          }<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span><a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>          cachedLastFlushedSequenceId =<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>          if (cachedLastFlushedSequenceId != null<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            // skip the whole WAL entry<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>            this.skippedEdits.incrementAndGet();<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>            needSkip = true;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            break;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>          } else {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>            if (maxStoreSequenceIds == null) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>              maxStoreSequenceIds =<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>            }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            if (maxStoreSequenceIds != null) {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>                skippedCells.add(cell);<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                continue;<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              }<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>            }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>          }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        }<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>        // skip the edit<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        if (loc == null || needSkip) continue;<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span><a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (!skippedCells.isEmpty()) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          cells.removeAll(skippedCells);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>        synchronized (serverToBufferQueueMap) {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>          if (queue == null) {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            queue =<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>        }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>        // store regions we have recovered so far<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span><a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    /**<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>     * destination region is online for replay.<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>     * @throws IOException<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>     */<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      // fetch location from cache<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      if(loc != null) return loc;<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      if (loc == null) {<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>            + " of table:" + table);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      }<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      // check if current row moves to a different region due to region merge/split<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        // originalEncodedRegionName should have already flushed<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      Long lastFlushedSequenceId = -1l;<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      if (!isRecovering.get()) {<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>        // been moved to somewhere before hosting RS fails<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>            + " because it's not in recovering.");<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      } else {<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        Long cachedLastFlushedSequenceId =<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        // update the value for the region<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>        RegionStoreSequenceIds ids =<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>              loc.getRegionInfo().getEncodedName());<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>        if (ids != null) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>          }<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        }<a name="line.1903"></a>
 <span class="sourceLineNo">1904</span><a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      onlineRegions.put(loc.getRegionInfo().getEncodedName(), loc);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      return loc;<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span><a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>    private void processWorkItems(String key, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; actions)<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>        throws IOException {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>      RegionServerWriter rsw = null;<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span><a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long startTime = System.nanoTime();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      try {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        rsw = getRegionServerWriter(key);<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>        rsw.sink.replayEntries(actions);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>        // Pass along summary statistics<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        rsw.incrementEdits(actions.size());<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>        rsw.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      } catch (IOException e) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        throw e;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    /**<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>     * Wait until region is online on the destination region server<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>     * @param loc<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>     * @param row<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>     * @param timeout How long to wait<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>     * @param isRecovering Recovering state of the region interested on destination region server.<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>     * @return True when region is online on the destination region server<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>     * @throws InterruptedException<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>     */<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    private HRegionLocation waitUntilRegionOnline(HRegionLocation loc, byte[] row,<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>        final long timeout, AtomicBoolean isRecovering)<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>        throws IOException {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      final long endTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      final long pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      boolean reloadLocation = false;<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      TableName tableName = loc.getRegionInfo().getTable();<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      int tries = 0;<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      Throwable cause = null;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>      while (endTime &gt; EnvironmentEdgeManager.currentTime()) {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>        try {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          // Try and get regioninfo from the hosting server.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          HConnection hconn = getConnectionByTableName(tableName);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          if(reloadLocation) {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            loc = hconn.getRegionLocation(tableName, row, true);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          }<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          BlockingInterface remoteSvr = hconn.getAdmin(loc.getServerName());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          HRegionInfo region = loc.getRegionInfo();<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>          try {<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>            GetRegionInfoRequest request =<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>                RequestConverter.buildGetRegionInfoRequest(region.getRegionName());<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            GetRegionInfoResponse response = remoteSvr.getRegionInfo(null, request);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>            if (HRegionInfo.convert(response.getRegionInfo()) != null) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>              isRecovering.set((response.hasIsRecovering()) ? response.getIsRecovering() : true);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>              return loc;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            }<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          } catch (ServiceException se) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.1965"></a>
-<span c

<TRUNCATED>

[08/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.html
index f3aed1b..0597160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.html
@@ -1513,810 +1513,816 @@
 <span class="sourceLineNo">1505</span>      if (maxSeqIdInStores == null || maxSeqIdInStores.isEmpty()) {<a name="line.1505"></a>
 <span class="sourceLineNo">1506</span>        return;<a name="line.1506"></a>
 <span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        if (!CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          // or the master was crashed before and we can not get the information.<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>          if (maxSeqId != null &amp;&amp; maxSeqId.longValue() &gt;= logEntry.getKey().getLogSeqNum()) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>            skippedCells.add(cell);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>          }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>        }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      }<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (!skippedCells.isEmpty()) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        logEntry.getEdit().getCells().removeAll(skippedCells);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1508</span>      // Create the array list for the cells that aren't filtered.<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // We make the assumption that most cells will be kept.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      ArrayList&lt;Cell&gt; keptCells = new ArrayList&lt;Cell&gt;(logEntry.getEdit().getCells().size());<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      for (Cell cell : logEntry.getEdit().getCells()) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>          keptCells.add(cell);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        } else {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>          Long maxSeqId = maxSeqIdInStores.get(family);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>          // Do not skip cell even if maxSeqId is null. Maybe we are in a rolling upgrade,<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          // or the master was crashed before and we can not get the information.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>          if (maxSeqId == null || maxSeqId.longValue() &lt; logEntry.getKey().getLogSeqNum()) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>            keptCells.add(cell);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      }<a name="line.1523"></a>
 <span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    @Override<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (entries.isEmpty()) {<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        return;<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>      }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      WriterAndPath wap = null;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      long startTime = System.nanoTime();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      try {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        int editsCount = 0;<a name="line.1537"></a>
+<span class="sourceLineNo">1525</span>      // Anything in the keptCells array list is still live.<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // So rather than removing the cells from the array list<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      // which would be an O(n^2) operation, we just replace the list<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      logEntry.getEdit().setCells(keptCells);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    @Override<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      if (entries.isEmpty()) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>        return;<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      }<a name="line.1537"></a>
 <span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        for (Entry logEntry : entries) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          if (wap == null) {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>            wap = getWriterAndPath(logEntry);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>            if (wap == null) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>              if (LOG.isDebugEnabled()) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>              }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>              return;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>            }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          filterCellByStore(logEntry);<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>            wap.w.append(logEntry);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            editsCount++;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          } else {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>            wap.incrementSkippedEdits(1);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>          }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>        // Pass along summary statistics<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        wap.incrementEdits(editsCount);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      } catch (IOException e) {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          e = e instanceof RemoteException ?<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>        throw e;<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    }<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span><a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    /**<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>     */<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    @Override<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      synchronized (writers) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>        }<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      return ret;<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span><a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    @Override<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    public int getNumberOfRecoveredRegions() {<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      return writers.size();<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>  }<a name="line.1587"></a>
+<span class="sourceLineNo">1539</span>      WriterAndPath wap = null;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      long startTime = System.nanoTime();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      try {<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        int editsCount = 0;<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span><a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>        for (Entry logEntry : entries) {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>          if (wap == null) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>            wap = getWriterAndPath(logEntry);<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>            if (wap == null) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>              if (LOG.isDebugEnabled()) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                LOG.debug("getWriterAndPath decided we don't need to write edits for " + logEntry);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>              }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>              return;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>            }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          filterCellByStore(logEntry);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (!logEntry.getEdit().isEmpty()) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            wap.w.append(logEntry);<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            this.updateRegionMaximumEditLogSeqNum(logEntry);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            editsCount++;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          } else {<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>            wap.incrementSkippedEdits(1);<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>          }<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        // Pass along summary statistics<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>        wap.incrementEdits(editsCount);<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        wap.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      } catch (IOException e) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>          e = e instanceof RemoteException ?<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>                  ((RemoteException)e).unwrapRemoteException() : e;<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>        throw e;<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    }<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span><a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>    /**<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>     * @return a map from encoded region ID to the number of edits written out for that region.<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>     */<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    @Override<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    public Map&lt;byte[], Long&gt; getOutputCounts() {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      TreeMap&lt;byte[], Long&gt; ret = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      synchronized (writers) {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>        for (Map.Entry&lt;byte[], SinkWriter&gt; entry : writers.entrySet()) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          ret.put(entry.getKey(), entry.getValue().editsWritten);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      return ret;<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    }<a name="line.1587"></a>
 <span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  /**<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>   */<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  public abstract static class SinkWriter {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    /* Count of edits written to this path */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    long editsWritten = 0;<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    /* Count of edits skipped to this path */<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    long editsSkipped = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    /* Number of nanos spent writing to this log */<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    long nanosSpent = 0;<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    void incrementEdits(int edits) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      editsWritten += edits;<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    void incrementSkippedEdits(int skipped) {<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      editsSkipped += skipped;<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span><a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    void incrementNanoTime(long nanos) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      nanosSpent += nanos;<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    }<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  }<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span><a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>  /**<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * data written to this output.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   */<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    final Path p;<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    final Writer w;<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      this.p = p;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      this.w = w;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>  }<a name="line.1625"></a>
+<span class="sourceLineNo">1589</span>    @Override<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    public int getNumberOfRecoveredRegions() {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      return writers.size();<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  }<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span><a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>  /**<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>   * Class wraps the actual writer which writes data out and related statistics<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>   */<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>  public abstract static class SinkWriter {<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    /* Count of edits written to this path */<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    long editsWritten = 0;<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    /* Count of edits skipped to this path */<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    long editsSkipped = 0;<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    /* Number of nanos spent writing to this log */<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    long nanosSpent = 0;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span><a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    void incrementEdits(int edits) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      editsWritten += edits;<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>    void incrementSkippedEdits(int skipped) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      editsSkipped += skipped;<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span><a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    void incrementNanoTime(long nanos) {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      nanosSpent += nanos;<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span><a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>  /**<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>   * Private data structure that wraps a Writer and its Path, also collecting statistics about the<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>   * data written to this output.<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>   */<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>  private final static class WriterAndPath extends SinkWriter {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    final Path p;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    final Writer w;<a name="line.1625"></a>
 <span class="sourceLineNo">1626</span><a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>  /**<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>   */<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    private static final String KEY_DELIMITER = "#";<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    private long waitRegionOnlineTimeOut;<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    // online encoded region name -&gt; region location map<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span><a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>    /**<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>     * Map key -&gt; value layout<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>     */<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span><a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        int numWriters) {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      super(controller, entryBuffers, numWriters);<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      this.waitRegionOnlineTimeOut =<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>        entryBuffers, numWriters);<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span><a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>    @Override<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      if (entries.isEmpty()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        return;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span><a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      // check if current region in a disabling or disabled table<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        // need fall back to old way<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>        // store regions we have recovered so far<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        return;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      }<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span><a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      // group entries by region servers<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      groupEditsByServer(entries);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span><a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      // process workitems<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      String maxLocKey = null;<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      int maxSize = 0;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>            maxSize = curQueue.size();<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>            maxQueue = curQueue;<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>            maxLocKey = entry.getKey();<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>          }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        if (maxSize &lt; minBatchSize<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>          // buffer more to process<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>          return;<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        } else if (maxSize &gt; 0) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>        }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span><a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>      if (maxSize &gt; 0) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span><a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>        recoveredRegions.add(encodedRegionName);<a name="line.1721"></a>
+<span class="sourceLineNo">1627</span>    WriterAndPath(final Path p, final Writer w) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      this.p = p;<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      this.w = w;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>    }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>  }<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span><a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>  /**<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>   * Class that manages to replay edits from WAL files directly to assigned fail over region servers<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>   */<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  class LogReplayOutputSink extends OutputSink {<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>    private static final double BUFFER_THRESHOLD = 0.35;<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>    private static final String KEY_DELIMITER = "#";<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>    private long waitRegionOnlineTimeOut;<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    private final Set&lt;String&gt; recoveredRegions = Collections.synchronizedSet(new HashSet&lt;String&gt;());<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>    private final Map&lt;String, RegionServerWriter&gt; writers =<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        new ConcurrentHashMap&lt;String, RegionServerWriter&gt;();<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    // online encoded region name -&gt; region location map<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>    private final Map&lt;String, HRegionLocation&gt; onlineRegions =<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        new ConcurrentHashMap&lt;String, HRegionLocation&gt;();<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span><a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    private Map&lt;TableName, HConnection&gt; tableNameToHConnectionMap = Collections<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>        .synchronizedMap(new TreeMap&lt;TableName, HConnection&gt;());<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>    /**<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>     * Map key -&gt; value layout<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>     * {@literal &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;}<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>     */<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    private Map&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; serverToBufferQueueMap =<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>        new ConcurrentHashMap&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt;();<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    private List&lt;Throwable&gt; thrown = new ArrayList&lt;Throwable&gt;();<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span><a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    // The following sink is used in distrubitedLogReplay mode for entries of regions in a disabling<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    // table. It's a limitation of distributedLogReplay. Because log replay needs a region is<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    // assigned and online before it can replay wal edits while regions of disabling/disabled table<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    // won't be assigned by AM. We can retire this code after HBASE-8234.<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    private LogRecoveredEditsOutputSink logRecoveredEditsOutputSink;<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    private boolean hasEditsInDisablingOrDisabledTables = false;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span><a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    public LogReplayOutputSink(PipelineController controller, EntryBuffers entryBuffers,<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>        int numWriters) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>      super(controller, entryBuffers, numWriters);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      this.waitRegionOnlineTimeOut =<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>          conf.getInt(HConstants.HBASE_SPLITLOG_MANAGER_TIMEOUT,<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>            ZKSplitLogManagerCoordination.DEFAULT_TIMEOUT);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      this.logRecoveredEditsOutputSink = new LogRecoveredEditsOutputSink(controller,<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>        entryBuffers, numWriters);<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      this.logRecoveredEditsOutputSink.setReporter(reporter);<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    }<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span><a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    @Override<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>    public void append(RegionEntryBuffer buffer) throws IOException {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>      List&lt;Entry&gt; entries = buffer.entryBuffer;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      if (entries.isEmpty()) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        LOG.warn("got an empty buffer, skipping");<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        return;<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      }<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span><a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      // check if current region in a disabling or disabled table<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      if (isTableDisabledOrDisabling(buffer.tableName)) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        // need fall back to old way<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>        logRecoveredEditsOutputSink.append(buffer);<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        hasEditsInDisablingOrDisabledTables = true;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>        // store regions we have recovered so far<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>        addToRecoveredRegions(Bytes.toString(buffer.encodedRegionName));<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        return;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span><a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      // group entries by region servers<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      groupEditsByServer(entries);<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span><a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      // process workitems<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      String maxLocKey = null;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>      int maxSize = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; maxQueue = null;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      synchronized (this.serverToBufferQueueMap) {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        for (Map.Entry&lt;String, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;&gt; entry :<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>            this.serverToBufferQueueMap.entrySet()) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; curQueue = entry.getValue();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>          if (curQueue.size() &gt; maxSize) {<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>            maxSize = curQueue.size();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>            maxQueue = curQueue;<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>            maxLocKey = entry.getKey();<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>          }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>        }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        if (maxSize &lt; minBatchSize<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>            &amp;&amp; entryBuffers.totalBuffered &lt; BUFFER_THRESHOLD * entryBuffers.maxHeapUsage) {<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>          // buffer more to process<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>          return;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>        } else if (maxSize &gt; 0) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>          this.serverToBufferQueueMap.remove(maxLocKey);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span><a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      if (maxSize &gt; 0) {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>        processWorkItems(maxLocKey, maxQueue);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
 <span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
 <span class="sourceLineNo">1724</span><a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    /**<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>     * Helper function to group WALEntries to individual region servers<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>     * @throws IOException<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>     */<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      for (Entry entry : entries) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>        WALEdit edit = entry.getEdit();<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        TableName table = entry.getKey().getTablename();<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>        // clear scopes which isn't needed for recovery<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>        entry.getKey().setScopes(null);<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>        // skip edits of non-existent tables<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>          this.skippedEdits.incrementAndGet();<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>          continue;<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        }<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span><a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        boolean needSkip = false;<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        HRegionLocation loc = null;<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        String locKey = null;<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span><a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>        for (Cell cell : cells) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>          boolean isCompactionEntry = false;<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>              try {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>                  .toByteArray());<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>                row = regionName[1]; // startKey of the region<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>                isCompactionEntry = true;<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>              } catch (Exception ex) {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>                skippedCells.add(cell);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>                continue;<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>              }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>            } else {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>              skippedCells.add(cell);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>              continue;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>            }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>          try {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>            loc =<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>                  encodeRegionNameStr);<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            // skip replaying the compaction if the region is gone<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>                  + encodeRegionNameStr);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>              needSkip = true;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>            }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>          } catch (TableNotFoundException ex) {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>            // table has been deleted so skip edits of the table<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>                + encodeRegionNameStr);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>            if (nonExistentTables == null) {<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>            }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>            nonExistentTables.add(table);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>            this.skippedEdits.incrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>            needSkip = true;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>            break;<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>          }<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span><a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          cachedLastFlushedSequenceId =<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>          if (cachedLastFlushedSequenceId != null<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>            // skip the whole WAL entry<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            this.skippedEdits.incrementAndGet();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            needSkip = true;<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            break;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          } else {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>            if (maxStoreSequenceIds == null) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>              maxStoreSequenceIds =<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>            }<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            if (maxStoreSequenceIds != null) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>                skippedCells.add(cell);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                continue;<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>              }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>            }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>          }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        }<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>        // skip the edit<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        if (loc == null || needSkip) continue;<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>        if (!skippedCells.isEmpty()) {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          cells.removeAll(skippedCells);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        synchronized (serverToBufferQueueMap) {<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>          if (queue == null) {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>            queue =<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>          }<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>        }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        // store regions we have recovered so far<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      }<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    }<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span><a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    /**<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>     * destination region is online for replay.<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>     * @throws IOException<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>     */<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>      // fetch location from cache<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      if(loc != null) return loc;<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      if (loc == null) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>            + " of table:" + table);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      }<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      // check if current row moves to a different region due to region merge/split<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        // originalEncodedRegionName should have already flushed<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      }<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span><a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      Long lastFlushedSequenceId = -1l;<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      if (!isRecovering.get()) {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>        // been moved to somewhere before hosting RS fails<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>            + " because it's not in recovering.");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      } else {<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>        Long cachedLastFlushedSequenceId =<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span><a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        // update the value for the region<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>        RegionStoreSequenceIds ids =<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>              loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        if (ids != null) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>          }<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        }<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>        if (cachedLastFlushedSequenceId == null<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>            || lastFlushedSequenceId &gt; cachedLastFlushedSequenceId) {<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>          lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), lastFlushedSequenceId);<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        }<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      }<a name="line.1903"></a>
+<span class="sourceLineNo">1725</span>    private void addToRecoveredRegions(String encodedRegionName) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>      if (!recoveredRegions.contains(encodedRegionName)) {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>        recoveredRegions.add(encodedRegionName);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    }<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span><a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>    /**<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>     * Helper function to group WALEntries to individual region servers<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>     * @throws IOException<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>     */<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    private void groupEditsByServer(List&lt;Entry&gt; entries) throws IOException {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      Set&lt;TableName&gt; nonExistentTables = null;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>      Long cachedLastFlushedSequenceId = -1l;<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      for (Entry entry : entries) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        WALEdit edit = entry.getEdit();<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>        TableName table = entry.getKey().getTablename();<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        // clear scopes which isn't needed for recovery<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        entry.getKey().setScopes(null);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        String encodeRegionNameStr = Bytes.toString(entry.getKey().getEncodedRegionName());<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // skip edits of non-existent tables<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        if (nonExistentTables != null &amp;&amp; nonExistentTables.contains(table)) {<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>          this.skippedEdits.incrementAndGet();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>          continue;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>        Map&lt;byte[], Long&gt; maxStoreSequenceIds = null;<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>        boolean needSkip = false;<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        HRegionLocation loc = null;<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        String locKey = null;<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>        List&lt;Cell&gt; cells = edit.getCells();<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        List&lt;Cell&gt; skippedCells = new ArrayList&lt;Cell&gt;();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        HConnection hconn = this.getConnectionByTableName(table);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span><a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        for (Cell cell : cells) {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>          byte[] row = CellUtil.cloneRow(cell);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>          byte[] family = CellUtil.cloneFamily(cell);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>          boolean isCompactionEntry = false;<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>          if (CellUtil.matchingFamily(cell, WALEdit.METAFAMILY)) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>            CompactionDescriptor compaction = WALEdit.getCompaction(cell);<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>            if (compaction != null &amp;&amp; compaction.hasRegionName()) {<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>              try {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>                byte[][] regionName = HRegionInfo.parseRegionName(compaction.getRegionName()<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>                  .toByteArray());<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>                row = regionName[1]; // startKey of the region<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>                family = compaction.getFamilyName().toByteArray();<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>                isCompactionEntry = true;<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>              } catch (Exception ex) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>                LOG.warn("Unexpected exception received, ignoring " + ex);<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>                skippedCells.add(cell);<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>                continue;<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>              }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>            } else {<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>              skippedCells.add(cell);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>              continue;<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>            }<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          }<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span><a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          try {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>            loc =<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>                locateRegionAndRefreshLastFlushedSequenceId(hconn, table, row,<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>                  encodeRegionNameStr);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>            // skip replaying the compaction if the region is gone<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>            if (isCompactionEntry &amp;&amp; !encodeRegionNameStr.equalsIgnoreCase(<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>              loc.getRegionInfo().getEncodedName())) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>              LOG.info("Not replaying a compaction marker for an older region: "<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>                  + encodeRegionNameStr);<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>              needSkip = true;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>            }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>          } catch (TableNotFoundException ex) {<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>            // table has been deleted so skip edits of the table<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>            LOG.info("Table " + table + " doesn't exist. Skip log replay for region "<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>                + encodeRegionNameStr);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>            lastFlushedSequenceIds.put(encodeRegionNameStr, Long.MAX_VALUE);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>            if (nonExistentTables == null) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>              nonExistentTables = new TreeSet&lt;TableName&gt;();<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>            }<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>            nonExistentTables.add(table);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>            this.skippedEdits.incrementAndGet();<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>            needSkip = true;<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>            break;<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          }<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span><a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>          cachedLastFlushedSequenceId =<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>              lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>          if (cachedLastFlushedSequenceId != null<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>              &amp;&amp; cachedLastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            // skip the whole WAL entry<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>            this.skippedEdits.incrementAndGet();<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>            needSkip = true;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            break;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>          } else {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>            if (maxStoreSequenceIds == null) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>              maxStoreSequenceIds =<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>                  regionMaxSeqIdInStores.get(loc.getRegionInfo().getEncodedName());<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>            }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            if (maxStoreSequenceIds != null) {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              Long maxStoreSeqId = maxStoreSequenceIds.get(family);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              if (maxStoreSeqId == null || maxStoreSeqId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>                // skip current kv if column family doesn't exist anymore or already flushed<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>                skippedCells.add(cell);<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                continue;<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              }<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>            }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>          }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        }<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>        // skip the edit<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        if (loc == null || needSkip) continue;<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span><a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (!skippedCells.isEmpty()) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          cells.removeAll(skippedCells);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>        synchronized (serverToBufferQueueMap) {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>          locKey = loc.getHostnamePort() + KEY_DELIMITER + table;<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>          List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; queue = serverToBufferQueueMap.get(locKey);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>          if (queue == null) {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            queue =<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>                Collections.synchronizedList(new ArrayList&lt;Pair&lt;HRegionLocation, Entry&gt;&gt;());<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            serverToBufferQueueMap.put(locKey, queue);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>          queue.add(new Pair&lt;HRegionLocation, Entry&gt;(loc, entry));<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>        }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>        // store regions we have recovered so far<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>        addToRecoveredRegions(loc.getRegionInfo().getEncodedName());<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span><a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    /**<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>     * Locate destination region based on table name &amp; row. This function also makes sure the<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>     * destination region is online for replay.<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>     * @throws IOException<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>     */<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    private HRegionLocation locateRegionAndRefreshLastFlushedSequenceId(HConnection hconn,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>        TableName table, byte[] row, String originalEncodedRegionName) throws IOException {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      // fetch location from cache<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      HRegionLocation loc = onlineRegions.get(originalEncodedRegionName);<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      if(loc != null) return loc;<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      // fetch location from hbase:meta directly without using cache to avoid hit old dead server<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      loc = hconn.getRegionLocation(table, row, true);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      if (loc == null) {<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>        throw new IOException("Can't locate location for row:" + Bytes.toString(row)<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>            + " of table:" + table);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      }<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      // check if current row moves to a different region due to region merge/split<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      if (!originalEncodedRegionName.equalsIgnoreCase(loc.getRegionInfo().getEncodedName())) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        // originalEncodedRegionName should have already flushed<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        lastFlushedSequenceIds.put(originalEncodedRegionName, Long.MAX_VALUE);<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        HRegionLocation tmpLoc = onlineRegions.get(loc.getRegionInfo().getEncodedName());<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>        if (tmpLoc != null) return tmpLoc;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      Long lastFlushedSequenceId = -1l;<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      AtomicBoolean isRecovering = new AtomicBoolean(true);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      loc = waitUntilRegionOnline(loc, row, this.waitRegionOnlineTimeOut, isRecovering);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      if (!isRecovering.get()) {<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>        // region isn't in recovering at all because WAL file may contain a region that has<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>        // been moved to somewhere before hosting RS fails<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>        lastFlushedSequenceIds.put(loc.getRegionInfo().getEncodedName(), Long.MAX_VALUE);<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>        LOG.info("logReplay skip region: " + loc.getRegionInfo().getEncodedName()<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>            + " because it's not in recovering.");<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      } else {<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        Long cachedLastFlushedSequenceId =<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>            lastFlushedSequenceIds.get(loc.getRegionInfo().getEncodedName());<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>        // retrieve last flushed sequence Id from ZK. Because region postOpenDeployTasks will<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        // update the value for the region<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>        RegionStoreSequenceIds ids =<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>            csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>              loc.getRegionInfo().getEncodedName());<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>        if (ids != null) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>          lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>          Map&lt;byte[], Long&gt; storeIds = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>          List&lt;StoreSequenceId&gt; maxSeqIdInStores = ids.getStoreSequenceIdList();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          for (StoreSequenceId id : maxSeqIdInStores) {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>            storeIds.put(id.getFamilyName().toByteArray(), id.getSequenceId());<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>          }<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>          regionMaxSeqIdInStores.put(loc.getRegionInfo().getEncodedName(), storeIds);<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>        }<a name="line.1903"></a>
 <span class="sourceLineNo">1904</span><a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      onlineRegions.put(loc.getRegionInfo().getEncodedName(), loc);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      return loc;<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span><a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>    private void processWorkItems(String key, List&lt;Pair&lt;HRegionLocation, Entry&gt;&gt; actions)<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>        throws IOException {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>      RegionServerWriter rsw = null;<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span><a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long startTime = System.nanoTime();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      try {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        rsw = getRegionServerWriter(key);<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>        rsw.sink.replayEntries(actions);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>        // Pass along summary statistics<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        rsw.incrementEdits(actions.size());<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>        rsw.incrementNanoTime(System.nanoTime() - startTime);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      } catch (IOException e) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.fatal(" Got while writing log entry to log", e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        throw e;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    /**<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>     * Wait until region is online on the destination region server<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>     * @param loc<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>     * @param row<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>     * @param timeout How long to wait<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>     * @param isRecovering Recovering state of the region interested on destination region server.<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>     * @return True when region is online on the destination region server<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>     * @throws InterruptedException<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>     */<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    private HRegionLocation waitUntilRegionOnline(HRegionLocation loc, byte[] row,<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>        final long timeout, AtomicBoolean isRecovering)<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>        throws IOException {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      final long endTime = EnvironmentEdgeManager.currentTime() + timeout;<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      final long pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      boolean reloadLocation = false;<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      TableName tableName = loc.getRegionInfo().getTable();<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      int tries = 0;<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      Throwable cause = null;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>      while (endTime &gt; EnvironmentEdgeManager.currentTime()) {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>        try {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          // Try and get regioninfo from the hosting server.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          HConnection hconn = getConnectionByTableName(tableName);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          if(reloadLocation) {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>            loc = hconn.getRegionLocation(tableName, row, true);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          }<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>          BlockingInterface remoteSvr = hconn.getAdmin(loc.getServerName());<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>          HRegionInfo region = loc.getRegionInfo();<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>          try {<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>            GetRegionInfoRequest request =<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>                RequestConverter.buildGetRegionInfoRequest(region.getRegionName());<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>            GetRegionInfoResponse response = remoteSvr.getRegionInfo(null, request);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>            if (HRegionInfo.convert(response.getRegionInfo()) != null) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>              isRecovering.set((response.hasIsRecovering()) ? response.getIsRecovering() : true);<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>              return loc;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>            }<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>          } catch (ServiceException se) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>          }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>        } catch (IOException e) {<

<TRUNCATED>

[32/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
index abb8a15..be615ae 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
@@ -2525,318 +2525,325 @@
 <span class="sourceLineNo">2517</span>        ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2517"></a>
 <span class="sourceLineNo">2518</span>      }<a name="line.2518"></a>
 <span class="sourceLineNo">2519</span>      assert scanner != null;<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>      RpcCallContext context = RpcServer.getCurrentCall();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>      Object lastBlock = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span><a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      quota = getQuotaManager().checkQuota(region, OperationQuota.OperationType.SCAN);<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      long maxQuotaResultSize = Math.min(maxScannerResultSize, quota.getReadAvailable());<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span><a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>      if (rows &gt; 0) {<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>        // if nextCallSeq does not match throw Exception straight away. This needs to be<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        // performed even before checking of Lease.<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>        // See HBASE-5974<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>        if (request.hasNextCallSeq()) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>          if (rsh != null) {<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>            if (request.getNextCallSeq() != rsh.getNextCallSeq()) {<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>              throw new OutOfOrderScannerNextException(<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>                "Expected nextCallSeq: " + rsh.getNextCallSeq()<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>                + " But the nextCallSeq got from client: " + request.getNextCallSeq() +<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>                "; request=" + TextFormat.shortDebugString(request));<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>            }<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>            // Increment the nextCallSeq value which is the next expected from client.<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>            rsh.incNextCallSeq();<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>          }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>        }<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        try {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>          // Remove lease while its being processed in server; protects against case<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>          // where processing of request takes &gt; lease expiration time.<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>          lease = regionServer.leases.removeLease(scannerName);<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>          List&lt;Result&gt; results = new ArrayList&lt;Result&gt;();<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span><a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>          boolean done = false;<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>          // Call coprocessor. Get region info from scanner.<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>            Boolean bypass = region.getCoprocessorHost().preScannerNext(<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>              scanner, results, rows);<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>            if (!results.isEmpty()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>              for (Result r : results) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>                lastBlock = addSize(context, r, lastBlock);<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>              }<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>            }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>            if (bypass != null &amp;&amp; bypass.booleanValue()) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>              done = true;<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>            }<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          }<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span><a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>          if (!done) {<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>            long maxResultSize = Math.min(scanner.getMaxResultSize(), maxQuotaResultSize);<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>            if (maxResultSize &lt;= 0) {<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>              maxResultSize = maxQuotaResultSize;<a name="line.2566"></a>
+<span class="sourceLineNo">2520</span>      if (request.hasRenew() &amp;&amp; request.getRenew()) {<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>        lease = regionServer.leases.removeLease(scannerName);<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>        if (lease != null &amp;&amp; scanners.containsKey(scannerName)) {<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>          regionServer.leases.addLease(lease);<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>        }<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>        return builder.build();<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>      }<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>      RpcCallContext context = RpcServer.getCurrentCall();<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>      Object lastBlock = null;<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span><a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>      quota = getQuotaManager().checkQuota(region, OperationQuota.OperationType.SCAN);<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>      long maxQuotaResultSize = Math.min(maxScannerResultSize, quota.getReadAvailable());<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span><a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>      if (rows &gt; 0) {<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>        // if nextCallSeq does not match throw Exception straight away. This needs to be<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>        // performed even before checking of Lease.<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>        // See HBASE-5974<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>        if (request.hasNextCallSeq()) {<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>          if (rsh != null) {<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>            if (request.getNextCallSeq() != rsh.getNextCallSeq()) {<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>              throw new OutOfOrderScannerNextException(<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>                "Expected nextCallSeq: " + rsh.getNextCallSeq()<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>                + " But the nextCallSeq got from client: " + request.getNextCallSeq() +<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>                "; request=" + TextFormat.shortDebugString(request));<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>            }<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>            // Increment the nextCallSeq value which is the next expected from client.<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>            rsh.incNextCallSeq();<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>          }<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>        }<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>        try {<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>          // Remove lease while its being processed in server; protects against case<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>          // where processing of request takes &gt; lease expiration time.<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>          lease = regionServer.leases.removeLease(scannerName);<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>          List&lt;Result&gt; results = new ArrayList&lt;Result&gt;();<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span><a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>          boolean done = false;<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>          // Call coprocessor. Get region info from scanner.<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span>            Boolean bypass = region.getCoprocessorHost().preScannerNext(<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>              scanner, results, rows);<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>            if (!results.isEmpty()) {<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>              for (Result r : results) {<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>                lastBlock = addSize(context, r, lastBlock);<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>              }<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>            }<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>            if (bypass != null &amp;&amp; bypass.booleanValue()) {<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span>              done = true;<a name="line.2566"></a>
 <span class="sourceLineNo">2567</span>            }<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>            // This is cells inside a row. Default size is 10 so if many versions or many cfs,<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>            // then we'll resize. Resizings show in profiler. Set it higher than 10. For now<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>            // arbitrary 32. TODO: keep record of general size of results being returned.<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>            List&lt;Cell&gt; values = new ArrayList&lt;Cell&gt;(32);<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>            region.startRegionOperation(Operation.SCAN);<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>            try {<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>              int i = 0;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>              synchronized(scanner) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>                boolean stale = (region.getRegionInfo().getReplicaId() != 0);<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>                boolean clientHandlesPartials =<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>                    request.hasClientHandlesPartials() &amp;&amp; request.getClientHandlesPartials();<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>                boolean clientHandlesHeartbeats =<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>                    request.hasClientHandlesHeartbeats() &amp;&amp; request.getClientHandlesHeartbeats();<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span><a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>                // On the server side we must ensure that the correct ordering of partial results is<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>                // returned to the client to allow them to properly reconstruct the partial results.<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>                // If the coprocessor host is adding to the result list, we cannot guarantee the<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>                // correct ordering of partial results and so we prevent partial results from being<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>                // formed.<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>                boolean serverGuaranteesOrderOfPartials = results.isEmpty();<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>                boolean allowPartialResults =<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>                    clientHandlesPartials &amp;&amp; serverGuaranteesOrderOfPartials &amp;&amp; !isSmallScan;<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>                boolean moreRows = false;<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span><a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>                // Heartbeat messages occur when the processing of the ScanRequest is exceeds a<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>                // certain time threshold on the server. When the time threshold is exceeded, the<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>                // server stops the scan and sends back whatever Results it has accumulated within<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>                // that time period (may be empty). Since heartbeat messages have the potential to<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>                // create partial Results (in the event that the timeout occurs in the middle of a<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>                // row), we must only generate heartbeat messages when the client can handle both<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>                // heartbeats AND partials<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>                boolean allowHeartbeatMessages = clientHandlesHeartbeats &amp;&amp; allowPartialResults;<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>                // Default value of timeLimit is negative to indicate no timeLimit should be<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>                // enforced.<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>                long timeLimit = -1;<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span><a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>                // Set the time limit to be half of the more restrictive timeout value (one of the<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>                // timeout values must be positive). In the event that both values are positive, the<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>                // more restrictive of the two is used to calculate the limit.<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>                if (allowHeartbeatMessages &amp;&amp; (scannerLeaseTimeoutPeriod &gt; 0 || rpcTimeout &gt; 0)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>                  long timeLimitDelta;<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>                  if (scannerLeaseTimeoutPeriod &gt; 0 &amp;&amp; rpcTimeout &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>                    timeLimitDelta = Math.min(scannerLeaseTimeoutPeriod, rpcTimeout);<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>                  } else {<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>                    timeLimitDelta =<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>                        scannerLeaseTimeoutPeriod &gt; 0 ? scannerLeaseTimeoutPeriod : rpcTimeout;<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>                  }<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>                  // Use half of whichever timeout value was more restrictive... But don't allow<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>                  // the time limit to be less than the allowable minimum (could cause an<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>                  // immediatate timeout before scanning any data).<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>                  timeLimitDelta = Math.max(timeLimitDelta / 2, minimumScanTimeLimitDelta);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>                  timeLimit = System.currentTimeMillis() + timeLimitDelta;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>                }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span><a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>                final LimitScope sizeScope =<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>                    allowPartialResults ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>                final LimitScope timeScope =<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>                    allowHeartbeatMessages ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span><a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>                boolean trackMetrics =<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>                    request.hasTrackScanMetrics() &amp;&amp; request.getTrackScanMetrics();<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span><a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>                // Configure with limits for this RPC. Set keep progress true since size progress<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>                // towards size limit should be kept between calls to nextRaw<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>                ScannerContext.Builder contextBuilder = ScannerContext.newBuilder(true);<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>                contextBuilder.setSizeLimit(sizeScope, maxResultSize);<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>                contextBuilder.setBatchLimit(scanner.getBatch());<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>                contextBuilder.setTimeLimit(timeScope, timeLimit);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>                contextBuilder.setTrackMetrics(trackMetrics);<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>                ScannerContext scannerContext = contextBuilder.build();<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>                boolean limitReached = false;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>                while (i &lt; rows) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>                  // Reset the batch progress to 0 before every call to RegionScanner#nextRaw. The<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>                  // batch limit is a limit on the number of cells per Result. Thus, if progress is<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>                  // being tracked (i.e. scannerContext.keepProgress() is true) then we need to<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>                  // reset the batch progress between nextRaw invocations since we don't want the<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>                  // batch progress from previous calls to affect future calls<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>                  scannerContext.setBatchProgress(0);<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>                  // Collect values to be returned here<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>                  moreRows = scanner.nextRaw(values, scannerContext);<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>                  if (!values.isEmpty()) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>                    final boolean partial = scannerContext.partialResultFormed();<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>                    Result r = Result.create(values, null, stale, partial);<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>                    lastBlock = addSize(context, r, lastBlock);<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>                    results.add(r);<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>                    i++;<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>                  }<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span><a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>                  boolean sizeLimitReached = scannerContext.checkSizeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>                  boolean timeLimitReached = scannerContext.checkTimeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>                  boolean rowLimitReached = i &gt;= rows;<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>                  limitReached = sizeLimitReached || timeLimitReached || rowLimitReached;<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span><a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>                  if (limitReached || !moreRows) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>                    if (LOG.isTraceEnabled()) {<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>                      LOG.trace("Done scanning. limitReached: " + limitReached + " moreRows: "<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>                          + moreRows + " scannerContext: " + scannerContext);<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>                    }<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>                    // We only want to mark a ScanResponse as a heartbeat message in the event that<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>                    // there are more values to be read server side. If there aren't more values,<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>                    // marking it as a heartbeat is wasteful because the client will need to issue<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>                    // another ScanRequest only to realize that they already have all the values<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>                    if (moreRows) {<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>                      // Heartbeat messages occur when the time limit has been reached.<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>                      builder.setHeartbeatMessage(timeLimitReached);<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>                    }<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>                    break;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>                  }<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>                  values.clear();<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>                }<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span><a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>                if (limitReached || moreRows) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>                  // We stopped prematurely<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>                  builder.setMoreResultsInRegion(true);<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>                } else {<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>                  // We didn't get a single batch<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>                  builder.setMoreResultsInRegion(false);<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>                }<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span><a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>                // Check to see if the client requested that we track metrics server side. If the<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>                // client requested metrics, retrieve the metrics from the scanner context.<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>                if (trackMetrics) {<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>                  Map&lt;String, Long&gt; metrics = scannerContext.getMetrics().getMetricsMap();<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>                  ScanMetrics.Builder metricBuilder = ScanMetrics.newBuilder();<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>                  NameInt64Pair.Builder pairBuilder = NameInt64Pair.newBuilder();<a name="line.2695"></a>
+<span class="sourceLineNo">2568</span>          }<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span><a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>          if (!done) {<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>            long maxResultSize = Math.min(scanner.getMaxResultSize(), maxQuotaResultSize);<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>            if (maxResultSize &lt;= 0) {<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>              maxResultSize = maxQuotaResultSize;<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span>            }<a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>            // This is cells inside a row. Default size is 10 so if many versions or many cfs,<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>            // then we'll resize. Resizings show in profiler. Set it higher than 10. For now<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>            // arbitrary 32. TODO: keep record of general size of results being returned.<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>            List&lt;Cell&gt; values = new ArrayList&lt;Cell&gt;(32);<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span>            region.startRegionOperation(Operation.SCAN);<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>            try {<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>              int i = 0;<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>              synchronized(scanner) {<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>                boolean stale = (region.getRegionInfo().getReplicaId() != 0);<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>                boolean clientHandlesPartials =<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>                    request.hasClientHandlesPartials() &amp;&amp; request.getClientHandlesPartials();<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>                boolean clientHandlesHeartbeats =<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>                    request.hasClientHandlesHeartbeats() &amp;&amp; request.getClientHandlesHeartbeats();<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span><a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>                // On the server side we must ensure that the correct ordering of partial results is<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>                // returned to the client to allow them to properly reconstruct the partial results.<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>                // If the coprocessor host is adding to the result list, we cannot guarantee the<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>                // correct ordering of partial results and so we prevent partial results from being<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>                // formed.<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>                boolean serverGuaranteesOrderOfPartials = results.isEmpty();<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>                boolean allowPartialResults =<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>                    clientHandlesPartials &amp;&amp; serverGuaranteesOrderOfPartials &amp;&amp; !isSmallScan;<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>                boolean moreRows = false;<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span><a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>                // Heartbeat messages occur when the processing of the ScanRequest is exceeds a<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>                // certain time threshold on the server. When the time threshold is exceeded, the<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>                // server stops the scan and sends back whatever Results it has accumulated within<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>                // that time period (may be empty). Since heartbeat messages have the potential to<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>                // create partial Results (in the event that the timeout occurs in the middle of a<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>                // row), we must only generate heartbeat messages when the client can handle both<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>                // heartbeats AND partials<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>                boolean allowHeartbeatMessages = clientHandlesHeartbeats &amp;&amp; allowPartialResults;<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span><a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>                // Default value of timeLimit is negative to indicate no timeLimit should be<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>                // enforced.<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span>                long timeLimit = -1;<a name="line.2610"></a>
+<span class="sourceLineNo">2611</span><a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>                // Set the time limit to be half of the more restrictive timeout value (one of the<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>                // timeout values must be positive). In the event that both values are positive, the<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>                // more restrictive of the two is used to calculate the limit.<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>                if (allowHeartbeatMessages &amp;&amp; (scannerLeaseTimeoutPeriod &gt; 0 || rpcTimeout &gt; 0)) {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>                  long timeLimitDelta;<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>                  if (scannerLeaseTimeoutPeriod &gt; 0 &amp;&amp; rpcTimeout &gt; 0) {<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>                    timeLimitDelta = Math.min(scannerLeaseTimeoutPeriod, rpcTimeout);<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>                  } else {<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>                    timeLimitDelta =<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>                        scannerLeaseTimeoutPeriod &gt; 0 ? scannerLeaseTimeoutPeriod : rpcTimeout;<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>                  }<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>                  // Use half of whichever timeout value was more restrictive... But don't allow<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>                  // the time limit to be less than the allowable minimum (could cause an<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>                  // immediatate timeout before scanning any data).<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>                  timeLimitDelta = Math.max(timeLimitDelta / 2, minimumScanTimeLimitDelta);<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>                  timeLimit = System.currentTimeMillis() + timeLimitDelta;<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>                }<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span><a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>                final LimitScope sizeScope =<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>                    allowPartialResults ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>                final LimitScope timeScope =<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span>                    allowHeartbeatMessages ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2633"></a>
+<span class="sourceLineNo">2634</span><a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>                boolean trackMetrics =<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>                    request.hasTrackScanMetrics() &amp;&amp; request.getTrackScanMetrics();<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span><a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>                // Configure with limits for this RPC. Set keep progress true since size progress<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>                // towards size limit should be kept between calls to nextRaw<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>                ScannerContext.Builder contextBuilder = ScannerContext.newBuilder(true);<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>                contextBuilder.setSizeLimit(sizeScope, maxResultSize);<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>                contextBuilder.setBatchLimit(scanner.getBatch());<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span>                contextBuilder.setTimeLimit(timeScope, timeLimit);<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>                contextBuilder.setTrackMetrics(trackMetrics);<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>                ScannerContext scannerContext = contextBuilder.build();<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>                boolean limitReached = false;<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>                while (i &lt; rows) {<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>                  // Reset the batch progress to 0 before every call to RegionScanner#nextRaw. The<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>                  // batch limit is a limit on the number of cells per Result. Thus, if progress is<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>                  // being tracked (i.e. scannerContext.keepProgress() is true) then we need to<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>                  // reset the batch progress between nextRaw invocations since we don't want the<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>                  // batch progress from previous calls to affect future calls<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>                  scannerContext.setBatchProgress(0);<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span><a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>                  // Collect values to be returned here<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>                  moreRows = scanner.nextRaw(values, scannerContext);<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span><a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>                  if (!values.isEmpty()) {<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>                    final boolean partial = scannerContext.partialResultFormed();<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>                    Result r = Result.create(values, null, stale, partial);<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>                    lastBlock = addSize(context, r, lastBlock);<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>                    results.add(r);<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>                    i++;<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>                  }<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span><a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>                  boolean sizeLimitReached = scannerContext.checkSizeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>                  boolean timeLimitReached = scannerContext.checkTimeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>                  boolean rowLimitReached = i &gt;= rows;<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>                  limitReached = sizeLimitReached || timeLimitReached || rowLimitReached;<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span><a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>                  if (limitReached || !moreRows) {<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>                    if (LOG.isTraceEnabled()) {<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span>                      LOG.trace("Done scanning. limitReached: " + limitReached + " moreRows: "<a name="line.2673"></a>
+<span class="sourceLineNo">2674</span>                          + moreRows + " scannerContext: " + scannerContext);<a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>                    }<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>                    // We only want to mark a ScanResponse as a heartbeat message in the event that<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>                    // there are more values to be read server side. If there aren't more values,<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>                    // marking it as a heartbeat is wasteful because the client will need to issue<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>                    // another ScanRequest only to realize that they already have all the values<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>                    if (moreRows) {<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>                      // Heartbeat messages occur when the time limit has been reached.<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>                      builder.setHeartbeatMessage(timeLimitReached);<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>                    }<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>                    break;<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>                  }<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>                  values.clear();<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>                }<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span><a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>                if (limitReached || moreRows) {<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>                  // We stopped prematurely<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>                  builder.setMoreResultsInRegion(true);<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>                } else {<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>                  // We didn't get a single batch<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>                  builder.setMoreResultsInRegion(false);<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>                }<a name="line.2695"></a>
 <span class="sourceLineNo">2696</span><a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>                  for (Entry&lt;String, Long&gt; entry : metrics.entrySet()) {<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>                    pairBuilder.setName(entry.getKey());<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>                    pairBuilder.setValue(entry.getValue());<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>                    metricBuilder.addMetrics(pairBuilder.build());<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>                  }<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span><a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>                  builder.setScanMetrics(metricBuilder.build());<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>                }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>              }<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>              region.updateReadRequestsCount(i);<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>              long responseCellSize = context != null ? context.getResponseCellSize() : 0;<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>              region.getMetrics().updateScanNext(responseCellSize);<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>              if (regionServer.metricsRegionServer != null) {<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>                regionServer.metricsRegionServer.updateScannerNext(responseCellSize);<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>              }<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>            } finally {<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>              region.closeRegionOperation();<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>            }<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>            // coprocessor postNext hook<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>              region.getCoprocessorHost().postScannerNext(scanner, results, rows, true);<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>            }<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>          }<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span><a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>          quota.addScanResult(results);<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>          // If the scanner's filter - if any - is done with the scan<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>          // and wants to tell the client to stop the scan. This is done by passing<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>          // a null result, and setting moreResults to false.<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>          if (scanner.isFilterDone() &amp;&amp; results.isEmpty()) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>            moreResults = false;<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>            results = null;<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>          } else {<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>            addResults(builder, results, controller,<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>                RegionReplicaUtil.isDefaultReplica(region.getRegionInfo()),<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>                isClientCellBlockSupport(context));<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>          }<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        } catch (IOException e) {<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>          // if we have an exception on scanner next and we are using the callSeq<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          // we should rollback because the client will retry with the same callSeq<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>          // and get an OutOfOrderScannerNextException if we don't do so.<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>          if (rsh != null &amp;&amp; request.hasNextCallSeq()) {<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>            rsh.rollbackNextCallSeq();<a name="line.2739"></a>
+<span class="sourceLineNo">2697</span>                // Check to see if the client requested that we track metrics server side. If the<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>                // client requested metrics, retrieve the metrics from the scanner context.<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>                if (trackMetrics) {<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>                  Map&lt;String, Long&gt; metrics = scannerContext.getMetrics().getMetricsMap();<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>                  ScanMetrics.Builder metricBuilder = ScanMetrics.newBuilder();<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>                  NameInt64Pair.Builder pairBuilder = NameInt64Pair.newBuilder();<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span><a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>                  for (Entry&lt;String, Long&gt; entry : metrics.entrySet()) {<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>                    pairBuilder.setName(entry.getKey());<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>                    pairBuilder.setValue(entry.getValue());<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>                    metricBuilder.addMetrics(pairBuilder.build());<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>                  }<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span><a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>                  builder.setScanMetrics(metricBuilder.build());<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>                }<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>              }<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>              region.updateReadRequestsCount(i);<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>              long responseCellSize = context != null ? context.getResponseCellSize() : 0;<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>              region.getMetrics().updateScanNext(responseCellSize);<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>              if (regionServer.metricsRegionServer != null) {<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>                regionServer.metricsRegionServer.updateScannerNext(responseCellSize);<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>              }<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>            } finally {<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>              region.closeRegionOperation();<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>            }<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>            // coprocessor postNext hook<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>              region.getCoprocessorHost().postScannerNext(scanner, results, rows, true);<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>            }<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>          }<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span><a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>          quota.addScanResult(results);<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span><a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>          // If the scanner's filter - if any - is done with the scan<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>          // and wants to tell the client to stop the scan. This is done by passing<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>          // a null result, and setting moreResults to false.<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>          if (scanner.isFilterDone() &amp;&amp; results.isEmpty()) {<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>            moreResults = false;<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>            results = null;<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>          } else {<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>            addResults(builder, results, controller,<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>                RegionReplicaUtil.isDefaultReplica(region.getRegionInfo()),<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>                isClientCellBlockSupport(context));<a name="line.2739"></a>
 <span class="sourceLineNo">2740</span>          }<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>          throw e;<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>        } finally {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>          if (context != null) {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>            context.setCallBack(rsh.shippedCallback);<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>          }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>          // Adding resets expiration time on lease.<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>          if (scanners.containsKey(scannerName)) {<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>            ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>            // When context != null, adding back the lease will be done in callback set above.<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>            if (context == null) {<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>              if (lease != null) regionServer.leases.addLease(lease);<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>            }<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>          }<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>        }<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>      }<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span><a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>      if (!moreResults || closeScanner) {<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        ttl = 0;<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        moreResults = false;<a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>        if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>          if (region.getCoprocessorHost().preScannerClose(scanner)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>            return builder.build(); // bypass<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>          }<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>        }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>        rsh = scanners.remove(scannerName);<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>        if (rsh != null) {<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>          if (context != null) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>            context.setCallBack(rsh.closeCallBack);<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>          } else {<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>            rsh.s.close();<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>          }<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>          try {<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>          } catch (LeaseException le) {<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>            // No problem, ignore<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>            if (LOG.isTraceEnabled()) {<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>              LOG.trace("Un-able to cancel lease of scanner. It could already be closed.");<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>            }<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>          }<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>            region.getCoprocessorHost().postScannerClose(scanner);<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>          }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>        }<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      }<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span><a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>      if (ttl &gt; 0) {<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        builder.setTtl(ttl);<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>      builder.setScannerId(scannerId);<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      builder.setMoreResults(moreResults);<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      return builder.build();<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>    } catch (IOException ie) {<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>      if (scannerName != null &amp;&amp; ie instanceof NotServingRegionException) {<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        RegionScannerHolder rsh = scanners.remove(scannerName);<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>        if (rsh != null) {<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>          try {<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>            RegionScanner scanner = rsh.s;<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>            LOG.warn(scannerName + " encountered " + ie.getMessage() + ", closing ...");<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>            scanner.close();<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>          } catch (IOException e) {<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>           LOG.warn("Getting exception closing " + scannerName, e);<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>          }<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        }<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>      }<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>      throw new ServiceException(ie);<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>    } finally {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>      if (quota != null) {<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        quota.close();<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>      }<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>    }<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>  }<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span><a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>  @Override<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>  public CoprocessorServiceResponse execRegionServerService(RpcController controller,<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      CoprocessorServiceRequest request) throws ServiceException {<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>    return regionServer.execRegionServerService(controller, request);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>  }<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span><a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>  @Override<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>  public UpdateConfigurationResponse updateConfiguration(<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>      RpcController controller, UpdateConfigurationRequest request)<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>      throws ServiceException {<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>    try {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>      this.regionServer.updateConfiguration();<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    } catch (Exception e) {<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>      throw new ServiceException(e);<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    }<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>    return UpdateConfigurationResponse.getDefaultInstance();<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>  }<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>}<a name="line.2831"></a>
+<span class="sourceLineNo">2741</span>        } catch (IOException e) {<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>          // if we have an exception on scanner next and we are using the callSeq<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>          // we should rollback because the client will retry with the same callSeq<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>          // and get an OutOfOrderScannerNextException if we don't do so.<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>          if (rsh != null &amp;&amp; request.hasNextCallSeq()) {<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>            rsh.rollbackNextCallSeq();<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>          }<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>          throw e;<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>        } finally {<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>          if (context != null) {<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>            context.setCallBack(rsh.shippedCallback);<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>          }<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>          // Adding resets expiration time on lease.<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>          if (scanners.containsKey(scannerName)) {<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>            ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>            // When context != null, adding back the lease will be done in callback set above.<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>            if (context == null) {<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>              if (lease != null) regionServer.leases.addLease(lease);<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>            }<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>          }<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>        }<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>      }<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span><a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>      if (!moreResults || closeScanner) {<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>        ttl = 0;<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>        moreResults = false;<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>        if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>          if (region.getCoprocessorHost().preScannerClose(scanner)) {<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>            return builder.build(); // bypass<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>          }<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>        }<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>        rsh = scanners.remove(scannerName);<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>        if (rsh != null) {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>          if (context != null) {<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>            context.setCallBack(rsh.closeCallBack);<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>          } else {<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>            rsh.s.close();<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>          }<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>          try {<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>          } catch (LeaseException le) {<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>            // No problem, ignore<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>            if (LOG.isTraceEnabled()) {<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>              LOG.trace("Un-able to cancel lease of scanner. It could already be closed.");<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>            }<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>          }<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>            region.getCoprocessorHost().postScannerClose(scanner);<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>          }<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>        }<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>      }<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span><a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>      if (ttl &gt; 0) {<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>        builder.setTtl(ttl);<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>      builder.setScannerId(scannerId);<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>      builder.setMoreResults(moreResults);<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>      return builder.build();<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>    } catch (IOException ie) {<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>      if (scannerName != null &amp;&amp; ie instanceof NotServingRegionException) {<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>        RegionScannerHolder rsh = scanners.remove(scannerName);<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>        if (rsh != null) {<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>          try {<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>            RegionScanner scanner = rsh.s;<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>            LOG.warn(scannerName + " encountered " + ie.getMessage() + ", closing ...");<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>            scanner.close();<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>          } catch (IOException e) {<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>           LOG.warn("Getting exception closing " + scannerName, e);<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>          }<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>        }<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>      }<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>      throw new ServiceException(ie);<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>    } finally {<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>      if (quota != null) {<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>        quota.close();<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>      }<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>    }<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>  }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span><a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>  @Override<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>  public CoprocessorServiceResponse execRegionServerService(RpcController controller,<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>      CoprocessorServiceRequest request) throws ServiceException {<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>    return regionServer.execRegionServerService(controller, request);<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>  }<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span><a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>  @Override<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>  public UpdateConfigurationResponse updateConfiguration(<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>      RpcController controller, UpdateConfigurationRequest request)<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>      throws ServiceException {<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>    try {<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>      this.regionServer.updateConfiguration();<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>    } catch (Exception e) {<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>      throw new ServiceException(e);<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>    }<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>    return UpdateConfigurationResponse.getDefaultInstance();<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>  }<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>}<a name="line.2838"></a>
 
 
 


[33/51] [partial] hbase-site git commit: Published site at 95a13b51ee052eb73882682e8f009bfa1e914866.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32d40534/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
index abb8a15..be615ae 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
@@ -2525,318 +2525,325 @@
 <span class="sourceLineNo">2517</span>        ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2517"></a>
 <span class="sourceLineNo">2518</span>      }<a name="line.2518"></a>
 <span class="sourceLineNo">2519</span>      assert scanner != null;<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>      RpcCallContext context = RpcServer.getCurrentCall();<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>      Object lastBlock = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span><a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      quota = getQuotaManager().checkQuota(region, OperationQuota.OperationType.SCAN);<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>      long maxQuotaResultSize = Math.min(maxScannerResultSize, quota.getReadAvailable());<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span><a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>      if (rows &gt; 0) {<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>        // if nextCallSeq does not match throw Exception straight away. This needs to be<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>        // performed even before checking of Lease.<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>        // See HBASE-5974<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>        if (request.hasNextCallSeq()) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>          if (rsh != null) {<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>            if (request.getNextCallSeq() != rsh.getNextCallSeq()) {<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>              throw new OutOfOrderScannerNextException(<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>                "Expected nextCallSeq: " + rsh.getNextCallSeq()<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>                + " But the nextCallSeq got from client: " + request.getNextCallSeq() +<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>                "; request=" + TextFormat.shortDebugString(request));<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>            }<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>            // Increment the nextCallSeq value which is the next expected from client.<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>            rsh.incNextCallSeq();<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>          }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>        }<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>        try {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>          // Remove lease while its being processed in server; protects against case<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>          // where processing of request takes &gt; lease expiration time.<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>          lease = regionServer.leases.removeLease(scannerName);<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>          List&lt;Result&gt; results = new ArrayList&lt;Result&gt;();<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span><a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>          boolean done = false;<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>          // Call coprocessor. Get region info from scanner.<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>            Boolean bypass = region.getCoprocessorHost().preScannerNext(<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>              scanner, results, rows);<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>            if (!results.isEmpty()) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>              for (Result r : results) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>                lastBlock = addSize(context, r, lastBlock);<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>              }<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>            }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>            if (bypass != null &amp;&amp; bypass.booleanValue()) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>              done = true;<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>            }<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          }<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span><a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>          if (!done) {<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>            long maxResultSize = Math.min(scanner.getMaxResultSize(), maxQuotaResultSize);<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>            if (maxResultSize &lt;= 0) {<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>              maxResultSize = maxQuotaResultSize;<a name="line.2566"></a>
+<span class="sourceLineNo">2520</span>      if (request.hasRenew() &amp;&amp; request.getRenew()) {<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>        lease = regionServer.leases.removeLease(scannerName);<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>        if (lease != null &amp;&amp; scanners.containsKey(scannerName)) {<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>          regionServer.leases.addLease(lease);<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>        }<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>        return builder.build();<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>      }<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>      RpcCallContext context = RpcServer.getCurrentCall();<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>      Object lastBlock = null;<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span><a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>      quota = getQuotaManager().checkQuota(region, OperationQuota.OperationType.SCAN);<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>      long maxQuotaResultSize = Math.min(maxScannerResultSize, quota.getReadAvailable());<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span><a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>      if (rows &gt; 0) {<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>        // if nextCallSeq does not match throw Exception straight away. This needs to be<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>        // performed even before checking of Lease.<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>        // See HBASE-5974<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>        if (request.hasNextCallSeq()) {<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>          if (rsh != null) {<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>            if (request.getNextCallSeq() != rsh.getNextCallSeq()) {<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>              throw new OutOfOrderScannerNextException(<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>                "Expected nextCallSeq: " + rsh.getNextCallSeq()<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>                + " But the nextCallSeq got from client: " + request.getNextCallSeq() +<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>                "; request=" + TextFormat.shortDebugString(request));<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>            }<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>            // Increment the nextCallSeq value which is the next expected from client.<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>            rsh.incNextCallSeq();<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>          }<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>        }<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>        try {<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>          // Remove lease while its being processed in server; protects against case<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>          // where processing of request takes &gt; lease expiration time.<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>          lease = regionServer.leases.removeLease(scannerName);<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>          List&lt;Result&gt; results = new ArrayList&lt;Result&gt;();<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span><a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>          boolean done = false;<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>          // Call coprocessor. Get region info from scanner.<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span>            Boolean bypass = region.getCoprocessorHost().preScannerNext(<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>              scanner, results, rows);<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>            if (!results.isEmpty()) {<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>              for (Result r : results) {<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>                lastBlock = addSize(context, r, lastBlock);<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>              }<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>            }<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>            if (bypass != null &amp;&amp; bypass.booleanValue()) {<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span>              done = true;<a name="line.2566"></a>
 <span class="sourceLineNo">2567</span>            }<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>            // This is cells inside a row. Default size is 10 so if many versions or many cfs,<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>            // then we'll resize. Resizings show in profiler. Set it higher than 10. For now<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>            // arbitrary 32. TODO: keep record of general size of results being returned.<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>            List&lt;Cell&gt; values = new ArrayList&lt;Cell&gt;(32);<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>            region.startRegionOperation(Operation.SCAN);<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>            try {<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>              int i = 0;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>              synchronized(scanner) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>                boolean stale = (region.getRegionInfo().getReplicaId() != 0);<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>                boolean clientHandlesPartials =<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>                    request.hasClientHandlesPartials() &amp;&amp; request.getClientHandlesPartials();<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>                boolean clientHandlesHeartbeats =<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>                    request.hasClientHandlesHeartbeats() &amp;&amp; request.getClientHandlesHeartbeats();<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span><a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>                // On the server side we must ensure that the correct ordering of partial results is<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>                // returned to the client to allow them to properly reconstruct the partial results.<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>                // If the coprocessor host is adding to the result list, we cannot guarantee the<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>                // correct ordering of partial results and so we prevent partial results from being<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>                // formed.<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>                boolean serverGuaranteesOrderOfPartials = results.isEmpty();<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>                boolean allowPartialResults =<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>                    clientHandlesPartials &amp;&amp; serverGuaranteesOrderOfPartials &amp;&amp; !isSmallScan;<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>                boolean moreRows = false;<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span><a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>                // Heartbeat messages occur when the processing of the ScanRequest is exceeds a<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>                // certain time threshold on the server. When the time threshold is exceeded, the<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>                // server stops the scan and sends back whatever Results it has accumulated within<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>                // that time period (may be empty). Since heartbeat messages have the potential to<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>                // create partial Results (in the event that the timeout occurs in the middle of a<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>                // row), we must only generate heartbeat messages when the client can handle both<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>                // heartbeats AND partials<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>                boolean allowHeartbeatMessages = clientHandlesHeartbeats &amp;&amp; allowPartialResults;<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>                // Default value of timeLimit is negative to indicate no timeLimit should be<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>                // enforced.<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>                long timeLimit = -1;<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span><a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>                // Set the time limit to be half of the more restrictive timeout value (one of the<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>                // timeout values must be positive). In the event that both values are positive, the<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>                // more restrictive of the two is used to calculate the limit.<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>                if (allowHeartbeatMessages &amp;&amp; (scannerLeaseTimeoutPeriod &gt; 0 || rpcTimeout &gt; 0)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>                  long timeLimitDelta;<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>                  if (scannerLeaseTimeoutPeriod &gt; 0 &amp;&amp; rpcTimeout &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>                    timeLimitDelta = Math.min(scannerLeaseTimeoutPeriod, rpcTimeout);<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>                  } else {<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>                    timeLimitDelta =<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>                        scannerLeaseTimeoutPeriod &gt; 0 ? scannerLeaseTimeoutPeriod : rpcTimeout;<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>                  }<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>                  // Use half of whichever timeout value was more restrictive... But don't allow<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>                  // the time limit to be less than the allowable minimum (could cause an<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>                  // immediatate timeout before scanning any data).<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>                  timeLimitDelta = Math.max(timeLimitDelta / 2, minimumScanTimeLimitDelta);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>                  timeLimit = System.currentTimeMillis() + timeLimitDelta;<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>                }<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span><a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>                final LimitScope sizeScope =<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>                    allowPartialResults ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>                final LimitScope timeScope =<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>                    allowHeartbeatMessages ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span><a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>                boolean trackMetrics =<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>                    request.hasTrackScanMetrics() &amp;&amp; request.getTrackScanMetrics();<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span><a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>                // Configure with limits for this RPC. Set keep progress true since size progress<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>                // towards size limit should be kept between calls to nextRaw<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>                ScannerContext.Builder contextBuilder = ScannerContext.newBuilder(true);<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>                contextBuilder.setSizeLimit(sizeScope, maxResultSize);<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>                contextBuilder.setBatchLimit(scanner.getBatch());<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>                contextBuilder.setTimeLimit(timeScope, timeLimit);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>                contextBuilder.setTrackMetrics(trackMetrics);<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>                ScannerContext scannerContext = contextBuilder.build();<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>                boolean limitReached = false;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>                while (i &lt; rows) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>                  // Reset the batch progress to 0 before every call to RegionScanner#nextRaw. The<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>                  // batch limit is a limit on the number of cells per Result. Thus, if progress is<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>                  // being tracked (i.e. scannerContext.keepProgress() is true) then we need to<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>                  // reset the batch progress between nextRaw invocations since we don't want the<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>                  // batch progress from previous calls to affect future calls<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>                  scannerContext.setBatchProgress(0);<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>                  // Collect values to be returned here<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>                  moreRows = scanner.nextRaw(values, scannerContext);<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span><a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>                  if (!values.isEmpty()) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>                    final boolean partial = scannerContext.partialResultFormed();<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>                    Result r = Result.create(values, null, stale, partial);<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>                    lastBlock = addSize(context, r, lastBlock);<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>                    results.add(r);<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>                    i++;<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>                  }<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span><a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>                  boolean sizeLimitReached = scannerContext.checkSizeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>                  boolean timeLimitReached = scannerContext.checkTimeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>                  boolean rowLimitReached = i &gt;= rows;<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>                  limitReached = sizeLimitReached || timeLimitReached || rowLimitReached;<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span><a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>                  if (limitReached || !moreRows) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>                    if (LOG.isTraceEnabled()) {<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>                      LOG.trace("Done scanning. limitReached: " + limitReached + " moreRows: "<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>                          + moreRows + " scannerContext: " + scannerContext);<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>                    }<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>                    // We only want to mark a ScanResponse as a heartbeat message in the event that<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>                    // there are more values to be read server side. If there aren't more values,<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>                    // marking it as a heartbeat is wasteful because the client will need to issue<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>                    // another ScanRequest only to realize that they already have all the values<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>                    if (moreRows) {<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>                      // Heartbeat messages occur when the time limit has been reached.<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>                      builder.setHeartbeatMessage(timeLimitReached);<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>                    }<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>                    break;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>                  }<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>                  values.clear();<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>                }<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span><a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>                if (limitReached || moreRows) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>                  // We stopped prematurely<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>                  builder.setMoreResultsInRegion(true);<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>                } else {<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>                  // We didn't get a single batch<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>                  builder.setMoreResultsInRegion(false);<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>                }<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span><a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>                // Check to see if the client requested that we track metrics server side. If the<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>                // client requested metrics, retrieve the metrics from the scanner context.<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>                if (trackMetrics) {<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>                  Map&lt;String, Long&gt; metrics = scannerContext.getMetrics().getMetricsMap();<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>                  ScanMetrics.Builder metricBuilder = ScanMetrics.newBuilder();<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>                  NameInt64Pair.Builder pairBuilder = NameInt64Pair.newBuilder();<a name="line.2695"></a>
+<span class="sourceLineNo">2568</span>          }<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span><a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>          if (!done) {<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>            long maxResultSize = Math.min(scanner.getMaxResultSize(), maxQuotaResultSize);<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>            if (maxResultSize &lt;= 0) {<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>              maxResultSize = maxQuotaResultSize;<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span>            }<a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>            // This is cells inside a row. Default size is 10 so if many versions or many cfs,<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>            // then we'll resize. Resizings show in profiler. Set it higher than 10. For now<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>            // arbitrary 32. TODO: keep record of general size of results being returned.<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>            List&lt;Cell&gt; values = new ArrayList&lt;Cell&gt;(32);<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span>            region.startRegionOperation(Operation.SCAN);<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>            try {<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>              int i = 0;<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>              synchronized(scanner) {<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>                boolean stale = (region.getRegionInfo().getReplicaId() != 0);<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>                boolean clientHandlesPartials =<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>                    request.hasClientHandlesPartials() &amp;&amp; request.getClientHandlesPartials();<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>                boolean clientHandlesHeartbeats =<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>                    request.hasClientHandlesHeartbeats() &amp;&amp; request.getClientHandlesHeartbeats();<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span><a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>                // On the server side we must ensure that the correct ordering of partial results is<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>                // returned to the client to allow them to properly reconstruct the partial results.<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>                // If the coprocessor host is adding to the result list, we cannot guarantee the<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>                // correct ordering of partial results and so we prevent partial results from being<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>                // formed.<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>                boolean serverGuaranteesOrderOfPartials = results.isEmpty();<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>                boolean allowPartialResults =<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>                    clientHandlesPartials &amp;&amp; serverGuaranteesOrderOfPartials &amp;&amp; !isSmallScan;<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>                boolean moreRows = false;<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span><a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>                // Heartbeat messages occur when the processing of the ScanRequest is exceeds a<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>                // certain time threshold on the server. When the time threshold is exceeded, the<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>                // server stops the scan and sends back whatever Results it has accumulated within<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>                // that time period (may be empty). Since heartbeat messages have the potential to<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>                // create partial Results (in the event that the timeout occurs in the middle of a<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>                // row), we must only generate heartbeat messages when the client can handle both<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>                // heartbeats AND partials<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>                boolean allowHeartbeatMessages = clientHandlesHeartbeats &amp;&amp; allowPartialResults;<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span><a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>                // Default value of timeLimit is negative to indicate no timeLimit should be<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>                // enforced.<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span>                long timeLimit = -1;<a name="line.2610"></a>
+<span class="sourceLineNo">2611</span><a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>                // Set the time limit to be half of the more restrictive timeout value (one of the<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>                // timeout values must be positive). In the event that both values are positive, the<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>                // more restrictive of the two is used to calculate the limit.<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>                if (allowHeartbeatMessages &amp;&amp; (scannerLeaseTimeoutPeriod &gt; 0 || rpcTimeout &gt; 0)) {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>                  long timeLimitDelta;<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>                  if (scannerLeaseTimeoutPeriod &gt; 0 &amp;&amp; rpcTimeout &gt; 0) {<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>                    timeLimitDelta = Math.min(scannerLeaseTimeoutPeriod, rpcTimeout);<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>                  } else {<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>                    timeLimitDelta =<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>                        scannerLeaseTimeoutPeriod &gt; 0 ? scannerLeaseTimeoutPeriod : rpcTimeout;<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>                  }<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>                  // Use half of whichever timeout value was more restrictive... But don't allow<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>                  // the time limit to be less than the allowable minimum (could cause an<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>                  // immediatate timeout before scanning any data).<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>                  timeLimitDelta = Math.max(timeLimitDelta / 2, minimumScanTimeLimitDelta);<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>                  timeLimit = System.currentTimeMillis() + timeLimitDelta;<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>                }<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span><a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>                final LimitScope sizeScope =<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>                    allowPartialResults ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>                final LimitScope timeScope =<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span>                    allowHeartbeatMessages ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.2633"></a>
+<span class="sourceLineNo">2634</span><a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>                boolean trackMetrics =<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>                    request.hasTrackScanMetrics() &amp;&amp; request.getTrackScanMetrics();<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span><a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>                // Configure with limits for this RPC. Set keep progress true since size progress<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>                // towards size limit should be kept between calls to nextRaw<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>                ScannerContext.Builder contextBuilder = ScannerContext.newBuilder(true);<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>                contextBuilder.setSizeLimit(sizeScope, maxResultSize);<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>                contextBuilder.setBatchLimit(scanner.getBatch());<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span>                contextBuilder.setTimeLimit(timeScope, timeLimit);<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>                contextBuilder.setTrackMetrics(trackMetrics);<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>                ScannerContext scannerContext = contextBuilder.build();<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>                boolean limitReached = false;<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>                while (i &lt; rows) {<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>                  // Reset the batch progress to 0 before every call to RegionScanner#nextRaw. The<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>                  // batch limit is a limit on the number of cells per Result. Thus, if progress is<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>                  // being tracked (i.e. scannerContext.keepProgress() is true) then we need to<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>                  // reset the batch progress between nextRaw invocations since we don't want the<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>                  // batch progress from previous calls to affect future calls<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>                  scannerContext.setBatchProgress(0);<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span><a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>                  // Collect values to be returned here<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>                  moreRows = scanner.nextRaw(values, scannerContext);<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span><a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>                  if (!values.isEmpty()) {<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>                    final boolean partial = scannerContext.partialResultFormed();<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>                    Result r = Result.create(values, null, stale, partial);<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>                    lastBlock = addSize(context, r, lastBlock);<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>                    results.add(r);<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>                    i++;<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>                  }<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span><a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>                  boolean sizeLimitReached = scannerContext.checkSizeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>                  boolean timeLimitReached = scannerContext.checkTimeLimit(LimitScope.BETWEEN_ROWS);<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>                  boolean rowLimitReached = i &gt;= rows;<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>                  limitReached = sizeLimitReached || timeLimitReached || rowLimitReached;<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span><a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>                  if (limitReached || !moreRows) {<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>                    if (LOG.isTraceEnabled()) {<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span>                      LOG.trace("Done scanning. limitReached: " + limitReached + " moreRows: "<a name="line.2673"></a>
+<span class="sourceLineNo">2674</span>                          + moreRows + " scannerContext: " + scannerContext);<a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>                    }<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>                    // We only want to mark a ScanResponse as a heartbeat message in the event that<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>                    // there are more values to be read server side. If there aren't more values,<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>                    // marking it as a heartbeat is wasteful because the client will need to issue<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>                    // another ScanRequest only to realize that they already have all the values<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>                    if (moreRows) {<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>                      // Heartbeat messages occur when the time limit has been reached.<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>                      builder.setHeartbeatMessage(timeLimitReached);<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>                    }<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>                    break;<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>                  }<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>                  values.clear();<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>                }<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span><a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>                if (limitReached || moreRows) {<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>                  // We stopped prematurely<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>                  builder.setMoreResultsInRegion(true);<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>                } else {<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>                  // We didn't get a single batch<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>                  builder.setMoreResultsInRegion(false);<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>                }<a name="line.2695"></a>
 <span class="sourceLineNo">2696</span><a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>                  for (Entry&lt;String, Long&gt; entry : metrics.entrySet()) {<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>                    pairBuilder.setName(entry.getKey());<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>                    pairBuilder.setValue(entry.getValue());<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>                    metricBuilder.addMetrics(pairBuilder.build());<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>                  }<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span><a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>                  builder.setScanMetrics(metricBuilder.build());<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>                }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>              }<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>              region.updateReadRequestsCount(i);<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>              long responseCellSize = context != null ? context.getResponseCellSize() : 0;<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>              region.getMetrics().updateScanNext(responseCellSize);<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>              if (regionServer.metricsRegionServer != null) {<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>                regionServer.metricsRegionServer.updateScannerNext(responseCellSize);<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>              }<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>            } finally {<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>              region.closeRegionOperation();<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>            }<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>            // coprocessor postNext hook<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>              region.getCoprocessorHost().postScannerNext(scanner, results, rows, true);<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>            }<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>          }<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span><a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>          quota.addScanResult(results);<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>          // If the scanner's filter - if any - is done with the scan<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>          // and wants to tell the client to stop the scan. This is done by passing<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>          // a null result, and setting moreResults to false.<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>          if (scanner.isFilterDone() &amp;&amp; results.isEmpty()) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>            moreResults = false;<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>            results = null;<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>          } else {<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>            addResults(builder, results, controller,<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>                RegionReplicaUtil.isDefaultReplica(region.getRegionInfo()),<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>                isClientCellBlockSupport(context));<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>          }<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        } catch (IOException e) {<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>          // if we have an exception on scanner next and we are using the callSeq<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          // we should rollback because the client will retry with the same callSeq<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>          // and get an OutOfOrderScannerNextException if we don't do so.<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>          if (rsh != null &amp;&amp; request.hasNextCallSeq()) {<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>            rsh.rollbackNextCallSeq();<a name="line.2739"></a>
+<span class="sourceLineNo">2697</span>                // Check to see if the client requested that we track metrics server side. If the<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>                // client requested metrics, retrieve the metrics from the scanner context.<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>                if (trackMetrics) {<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>                  Map&lt;String, Long&gt; metrics = scannerContext.getMetrics().getMetricsMap();<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>                  ScanMetrics.Builder metricBuilder = ScanMetrics.newBuilder();<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>                  NameInt64Pair.Builder pairBuilder = NameInt64Pair.newBuilder();<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span><a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>                  for (Entry&lt;String, Long&gt; entry : metrics.entrySet()) {<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>                    pairBuilder.setName(entry.getKey());<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>                    pairBuilder.setValue(entry.getValue());<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>                    metricBuilder.addMetrics(pairBuilder.build());<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>                  }<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span><a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>                  builder.setScanMetrics(metricBuilder.build());<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>                }<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>              }<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>              region.updateReadRequestsCount(i);<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>              long responseCellSize = context != null ? context.getResponseCellSize() : 0;<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>              region.getMetrics().updateScanNext(responseCellSize);<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>              if (regionServer.metricsRegionServer != null) {<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>                regionServer.metricsRegionServer.updateScannerNext(responseCellSize);<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>              }<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>            } finally {<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>              region.closeRegionOperation();<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>            }<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>            // coprocessor postNext hook<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>              region.getCoprocessorHost().postScannerNext(scanner, results, rows, true);<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>            }<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>          }<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span><a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>          quota.addScanResult(results);<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span><a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>          // If the scanner's filter - if any - is done with the scan<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>          // and wants to tell the client to stop the scan. This is done by passing<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>          // a null result, and setting moreResults to false.<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>          if (scanner.isFilterDone() &amp;&amp; results.isEmpty()) {<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>            moreResults = false;<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>            results = null;<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>          } else {<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>            addResults(builder, results, controller,<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>                RegionReplicaUtil.isDefaultReplica(region.getRegionInfo()),<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>                isClientCellBlockSupport(context));<a name="line.2739"></a>
 <span class="sourceLineNo">2740</span>          }<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>          throw e;<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>        } finally {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>          if (context != null) {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>            context.setCallBack(rsh.shippedCallback);<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>          }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>          // Adding resets expiration time on lease.<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>          if (scanners.containsKey(scannerName)) {<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>            ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>            // When context != null, adding back the lease will be done in callback set above.<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>            if (context == null) {<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>              if (lease != null) regionServer.leases.addLease(lease);<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>            }<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>          }<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>        }<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>      }<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span><a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>      if (!moreResults || closeScanner) {<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        ttl = 0;<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        moreResults = false;<a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>        if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>          if (region.getCoprocessorHost().preScannerClose(scanner)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>            return builder.build(); // bypass<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>          }<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>        }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>        rsh = scanners.remove(scannerName);<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>        if (rsh != null) {<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>          if (context != null) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>            context.setCallBack(rsh.closeCallBack);<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>          } else {<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>            rsh.s.close();<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>          }<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>          try {<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>          } catch (LeaseException le) {<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>            // No problem, ignore<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>            if (LOG.isTraceEnabled()) {<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>              LOG.trace("Un-able to cancel lease of scanner. It could already be closed.");<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>            }<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>          }<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>            region.getCoprocessorHost().postScannerClose(scanner);<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>          }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>        }<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      }<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span><a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>      if (ttl &gt; 0) {<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        builder.setTtl(ttl);<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>      builder.setScannerId(scannerId);<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      builder.setMoreResults(moreResults);<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      return builder.build();<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>    } catch (IOException ie) {<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>      if (scannerName != null &amp;&amp; ie instanceof NotServingRegionException) {<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        RegionScannerHolder rsh = scanners.remove(scannerName);<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>        if (rsh != null) {<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>          try {<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>            RegionScanner scanner = rsh.s;<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>            LOG.warn(scannerName + " encountered " + ie.getMessage() + ", closing ...");<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>            scanner.close();<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>          } catch (IOException e) {<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>           LOG.warn("Getting exception closing " + scannerName, e);<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>          }<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        }<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>      }<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>      throw new ServiceException(ie);<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>    } finally {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>      if (quota != null) {<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        quota.close();<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>      }<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>    }<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>  }<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span><a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>  @Override<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>  public CoprocessorServiceResponse execRegionServerService(RpcController controller,<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      CoprocessorServiceRequest request) throws ServiceException {<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>    return regionServer.execRegionServerService(controller, request);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>  }<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span><a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>  @Override<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>  public UpdateConfigurationResponse updateConfiguration(<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>      RpcController controller, UpdateConfigurationRequest request)<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>      throws ServiceException {<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>    try {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>      this.regionServer.updateConfiguration();<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    } catch (Exception e) {<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>      throw new ServiceException(e);<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    }<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>    return UpdateConfigurationResponse.getDefaultInstance();<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>  }<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>}<a name="line.2831"></a>
+<span class="sourceLineNo">2741</span>        } catch (IOException e) {<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>          // if we have an exception on scanner next and we are using the callSeq<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>          // we should rollback because the client will retry with the same callSeq<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>          // and get an OutOfOrderScannerNextException if we don't do so.<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>          if (rsh != null &amp;&amp; request.hasNextCallSeq()) {<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>            rsh.rollbackNextCallSeq();<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>          }<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>          throw e;<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>        } finally {<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>          if (context != null) {<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>            context.setCallBack(rsh.shippedCallback);<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>          }<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>          // Adding resets expiration time on lease.<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>          if (scanners.containsKey(scannerName)) {<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>            ttl = this.scannerLeaseTimeoutPeriod;<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>            // When context != null, adding back the lease will be done in callback set above.<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>            if (context == null) {<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>              if (lease != null) regionServer.leases.addLease(lease);<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>            }<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>          }<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>        }<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>      }<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span><a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>      if (!moreResults || closeScanner) {<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>        ttl = 0;<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>        moreResults = false;<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>        if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>          if (region.getCoprocessorHost().preScannerClose(scanner)) {<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>            return builder.build(); // bypass<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>          }<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>        }<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>        rsh = scanners.remove(scannerName);<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>        if (rsh != null) {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>          if (context != null) {<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>            context.setCallBack(rsh.closeCallBack);<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>          } else {<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>            rsh.s.close();<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>          }<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>          try {<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>          } catch (LeaseException le) {<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>            // No problem, ignore<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>            if (LOG.isTraceEnabled()) {<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>              LOG.trace("Un-able to cancel lease of scanner. It could already be closed.");<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>            }<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>          }<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>            region.getCoprocessorHost().postScannerClose(scanner);<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>          }<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>        }<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>      }<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span><a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>      if (ttl &gt; 0) {<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>        builder.setTtl(ttl);<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>      builder.setScannerId(scannerId);<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>      builder.setMoreResults(moreResults);<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>      return builder.build();<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>    } catch (IOException ie) {<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>      if (scannerName != null &amp;&amp; ie instanceof NotServingRegionException) {<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>        RegionScannerHolder rsh = scanners.remove(scannerName);<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>        if (rsh != null) {<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>          try {<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>            RegionScanner scanner = rsh.s;<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>            LOG.warn(scannerName + " encountered " + ie.getMessage() + ", closing ...");<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>            scanner.close();<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>            regionServer.leases.cancelLease(scannerName);<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>          } catch (IOException e) {<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>           LOG.warn("Getting exception closing " + scannerName, e);<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>          }<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>        }<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>      }<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>      throw new ServiceException(ie);<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>    } finally {<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>      if (quota != null) {<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>        quota.close();<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>      }<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>    }<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>  }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span><a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>  @Override<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>  public CoprocessorServiceResponse execRegionServerService(RpcController controller,<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>      CoprocessorServiceRequest request) throws ServiceException {<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>    return regionServer.execRegionServerService(controller, request);<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>  }<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span><a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>  @Override<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>  public UpdateConfigurationResponse updateConfiguration(<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>      RpcController controller, UpdateConfigurationRequest request)<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>      throws ServiceException {<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>    try {<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>      this.regionServer.updateConfiguration();<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>    } catch (Exception e) {<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>      throw new ServiceException(e);<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>    }<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>    return UpdateConfigurationResponse.getDefaultInstance();<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>  }<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>}<a name="line.2838"></a>